我一直在阅读Albaharis的“坚果 shell 中的C#5.0”,并且在“泛型”部分遇到了这一点,据说这是合法的:
class Bar<T> where T : Bar<T> { ... }
尽管我已经仔细阅读了整章,但对我来说却毫无意义。我什至一点都不明白。
有人可以用一些易于理解的命名来解释它吗,例如:
class Person<T> where T : Person<T> { ... }
在这种情况下适当且有用的实际应用场景?
最佳答案
这意味着T
必须继承自Person<T>
。
这是在基类中创建特定于实际后代的类型特定方法,属性或参数的典型方法。
例如:
public abstract class Base<T> where T : Base<T>, new()
{
public static T Create()
{
var instance = new T();
instance.Configure(42);
return instance;
}
protected abstract void Configure(int value);
}
public class Actual : Base<Actual>
{
protected override void Configure(int value) { ... }
}
...
Actual a = Actual.Create(); // Create is defined in Base, but returns Actual
关于c# - C#通用自引用声明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33430463/