【发布时间】:2012-09-29 02:11:17
【问题描述】:
我有以下几点:
public class Foo<T> : Goo
where T: SomeClass<?>, new()
我知道吗?不是 C# 中的真正通配符,但是,您将如何在 C# 中正确编写它,以便 SomeClass 可以将任何类作为参数?我尝试使用对象,但随后出现错误“...没有来自...的隐式引用转换”
谢谢!
【问题讨论】:
我有以下几点:
public class Foo<T> : Goo
where T: SomeClass<?>, new()
我知道吗?不是 C# 中的真正通配符,但是,您将如何在 C# 中正确编写它,以便 SomeClass 可以将任何类作为参数?我尝试使用对象,但随后出现错误“...没有来自...的隐式引用转换”
谢谢!
【问题讨论】:
您必须指定第二个类型参数(即我的示例中的Y),注意Y 可以是任何东西,因为没有限制,甚至与T 相同。
public class Foo<T, Y> : Goo
where T: SomeClass<Y>, new()
如果你只需要在你的泛型类中使用SomeClass<Y>,另一个选项是只指定第二类,你不需要 new() 限制,因为编译器事先知道SomeClass<T> 有默认构造函数:
public class Foo<Y> : Goo{
public SomeClass<Y> Value;
public void Setup() { Value = new SomeClass<Y>(); }
}
【讨论】: