递归通用定义

时间:2013-05-13 20:29:09

标签: c# generics clr nested-generics

所以我正在观看这部精彩的Jon Skeet视频:http://www.youtube.com/watch?v=3DkISWIouY4(从一开始就注意看我要问你的部分!)

请考虑以下代码:

internal class Program
{
    private static void Main(string[] args)
    {
        var x = new DeepContainer<string>();

    }
}

public class DeepContainer<T> : SimpleContainer<DeepContainer<DeepContainer<T>>>
{
    public DeepContainer()
    {

    }
}

public class SimpleContainer<TSomething>
{
    public TSomething Something { get; set; }

    public SimpleContainer()
    {
    }
}

我们知道这不会运行,因为我们无法将TSomething扩展到它的实际类型,它将是<SimpleContainer<SimpleContainer<SimpleContainer<SimpleContainer...

但是,如果我们将DeepContainer<T>的定义更改为:

public class DeepContainer<T> : SimpleContainer<DeepContainer<T>> // One level of Deepcontainer omitted

突然间它起作用了。

然而,在我看来它没有。因为当我尝试扩展TSomething的类型时,我得到: SimpleContainer<SimpleContainer<SimpleContainer<SimpleContainer<SimpleContainer

我无法理解这是如何运作的。

0 个答案:

没有答案