昨天,我向朋友们解释了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方法的调用类似。例如,它对于树状结构很有用,在这种树状结构中,您通常要指定节点具有的子级类型,而节点本身是相同的类型。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句