所以我正在观看令人敬畏的 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
.
我无法理解这是如何工作的。