【发布时间】:2016-08-20 07:53:24
【问题描述】:
我想创建一个具有泛型类型参数的类,该参数具有成为另一个泛型类的子类的约束。
例子:
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>>
我想避免重复内部类型参数。这可能吗?
【问题讨论】: