Ich möchte eine Klasse mit einem generischen Typargument erstellen, das eine Integritätsbedingung als Unterklasse einer anderen generischen Klasse hat.Generische Typenargumente in generischen Integritätsbedingungen
Beispiel:
public class SomeGeneric<T> where T : new()
{
T CreateItem() => new T();
}
Diese Klasse I erstellen möchten. Hinweis: Ich möchte nicht Client dieser Klasse den inneren Typ Argument zweimal angeben:
public class TheClass<TGeneric> where TGeneric : SomeGeneric<T>, new()
{
public T Item {get; private set;}
public void TheClass
{
var instance = new TGeneric(); // this is possible because of the new() restriction
Item = instance.CreateItem();
}
}
Dies könnte dann verwendet werden, wie folgt:
class AnotherClass
{
}
class Client : TheClass<SomeGeneric<AnotherClass>>
{
public void SomeMethod()
{
var theInstanceOfAnotherClass = this.Item;
// Do stuff with it
}
}
Soweit ich sagen kann, ist dies nicht möglich, da es auf dieser Linie bemängelt, dass T
nicht bekannt ist:
public class TheClass<TGeneric> where TGeneric : SomeGeneric<T>, new()
Die Abhilfe zu tun wäre, wie folgt:
public class TheClass<T, TGeneric> where TGeneric : SomeGeneric<T>, new()
Aber das würde bedeuten, dass der Kunde dies zu tun hat:
public class Client : TheClass<AnotherClass, SomeGeneric<AnotherClass>>
Ich möchte Duplizieren der inneren Typ Argument zu vermeiden. Ist das möglich?
Nein, 'TGeneric' ist ein Typargument, kein generischer Typ, aber ja, das möchte ich erreichen – Kenneth
Ich glaube nicht, dass es einen Weg gibt, das zu tun, was man will, ohne' T' zuerst zu deklarieren . Generische Typenargumente sind wie Funktionsargumente; Sie müssen sie deklarieren, bevor Sie sie verwenden können. – Craxal