【发布时间】:2015-03-24 09:09:13
【问题描述】:
昨天,我正在向我的朋友解释 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 的类型会是什么?
【问题讨论】:
-
嗯......闻起来像家庭作业。
-
@JamieKeeling:不,不是真的。我只是对它是否可能感兴趣=)我的朋友完全确定它不是,但我有我的怀疑......
-
这是递归类型的好模式,如树和图。在几乎所有其他情况下,它都会成为一种反模式,它会使代码复杂化并使其可读性降低。我记得我之前工作中的代码库,到处都在使用它。它仍然让我颤抖。
-
这不就是F-bounded Polymorphism吗?
标签: c# generics type-parameter generic-constraints