为什么这适用于C#(泛型类和自引用)?

时间:2013-09-06 20:38:40

标签: c# class generics self-reference

我有

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

我可以

class A : X <A> 
{
}

逻辑上有这样的东西:

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

这很有效。

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

1 个答案:

答案 0 :(得分:3)

完全没问题。你也可以在没有泛型的情况下做类似的事情:

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());
    }
}

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

对于所有合适的X<T>参数,

T已经存在合适的意思是指适合通用约束的每种类型(或者只适用于所有类型的类型)没有约束)。每一个我的意思不仅仅是你的装配中可用的所有类。只需每个合适的类型。

通用类/方法只是一个模板,它针对给定的特定泛型类型在运行时进行解析。这就是为什么你甚至不必使用泛型类来组装它在其中声明的内容。这就是你的代码工作正常的原因。