我一直在阅读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/

10-11 01:30