为什么这在 C# 中有效(泛型类和自引用)

本文关键字:泛型类 自引用 有效 为什么 | 更新日期: 2023-09-27 18:30:25

我有

class X<T> : Base
{
//For exemple:
    static T something();
}

我可以有

class A : X <A> 
{
}

从逻辑上讲,有这样的东西:

class A : Base
{
    static A something();
}

这行得通,效果很好。

但在我的理解中,这是一种自我参照(A 是 X 的孩子,而 X 在 A 之前不存在......),这打破了计算机科学的基础,所以我想知道我的理解有什么问题??

为什么这在 C# 中有效(泛型类和自引用)

完全没问题。您也可以在没有泛型的情况下执行类似的操作:

class Test
{
    public static Test GetInstance()
    {
        return new Test();
    }
}

我在这里没有看到任何自我参考。实际上,这是非常有用的模式,例如在实现单例时。简化的概念(我知道,它应该使用锁等):

public static class Singleton<T> where T : new()
{
    private static T _instance;
    public static T GetInstance()
    {
        return _instance ?? (_instance = new T());
    }
}

编辑 - 回答您的评论问题:

所有合适的T参数都已经存在X<T>我所说的合适是指适合泛型约束的每种类型(或者没有约束时只是每种类型)。我所说的不仅是指您的程序集中可用的所有类。只是每种合适的类型。

泛型

类/方法只是一个模板,在运行时为给定的特定泛型类型解析。这就是为什么你甚至不必在声明它的汇编中使用泛型类的原因。这就是您的代码运行良好的原因。