【问题标题】:Why this works in C# (generic class and self-reference)?为什么这适用于 C#(泛型类和自引用)?
【发布时间】:2013-09-06 20:38:39
【问题描述】:

我有

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 generics self-reference


【解决方案1】:

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

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&lt;T&gt; 已经存在 对于所有合适的T 参数。 合适是指适合通用约束的每种类型(或者在没有约束时仅适用于每种类型)。并且我的意思不仅是您的程序集中可用的所有类。只是每个合适的类型。

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

【讨论】:

猜你喜欢
  • 2012-01-22
  • 1970-01-01
  • 2020-05-05
  • 2018-08-30
  • 1970-01-01
  • 2012-07-10
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多