所以我正在观看这部精彩的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
。
我无法理解这是如何运作的。