我希望创建一个类,该类具有一个泛型类型参数,该参数有一个约束条件,即必须是另一个泛型类的子类。
例如:
public class SomeGeneric<T> where T : new()
{
T CreateItem() => new T();
}
我想创建这个类。注意:我不希望这个类的客户端在指定内部类型参数时重复指定:
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();
}
}
这可以如下使用:
class AnotherClass
{
}
class Client : TheClass<SomeGeneric<AnotherClass>>
{
public void SomeMethod()
{
var theInstanceOfAnotherClass = this.Item;
// Do stuff with it
}
}
据我所知,这是不可能的,因为它在此行抱怨
T
未知:public class TheClass<TGeneric> where TGeneric : SomeGeneric<T>, new()
解决方法如下:
按照以下步骤操作:
public class TheClass<T, TGeneric> where TGeneric : SomeGeneric<T>, new()
但这意味着客户端必须这样做:
public class Client : TheClass<AnotherClass, SomeGeneric<AnotherClass>>
我希望避免重复使用内部类型参数,这可行吗?
TGeneric
是一个类型参数而不是一个通用类型本身,但是是的,那正是我想要实现的。 - Kenneth