1

我有

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

我可以拥有

class A : X <A> 
{
}

逻辑上有这样的东西:

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

这有效并且运作良好。

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

4

1 回答 1

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合适的意思是适合通用约束的每种类型(或没有约束时的每种类型)。并且我的意思不仅是您的程序集中可用的所有类。只是每一种合适的类型。

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

于 2013-09-06T20:40:50.753 回答