昨天,我向 friend 们解释了C#的通用约束。在演示where T : CLASSNAME
约束时,我提出了类似以下内容:
public class UnusableClass<T> where T : UnusableClass<T>
{
public static int method(T input){
return 0;
}
}
看到它可以编译真的很惊讶。但是,经过一番思考,从编译器的角度来看,我认为这是完全合法的-
UnusableClass<T>
与可在此约束中使用的任何其他类一样多。但是,这留下了两个问题:如何使用此类?是否有可能
int method
吗? 而且,如果是,怎么办?
如果有任何可能,
T
的类型是什么? 最佳答案
出色地。
public class Implementation : UnusableClass<Implementation>
{
}
是完全有效的,因此
var unusable = new UnusableClass<Implementation>();
和
UnusableClass<Implementation>.method(new Implementation());
有效的。
因此,是的,可以通过提供一个继承类型作为type参数来实例化,并且与对static方法的调用类似。例如,它对于树状结构很有用,您需要在该树状结构中通常指定节点具有的子级类型,而节点本身的类型相同。