我不明白为什么此代码有效。 派生类是从使用派生类类型的基类继承的。 我期望类型创建中有无限循环之王。
请有人可以解释为什么此代码有效吗? 谢谢。
using System;
using System.Collections.Generic;
using static System.Console;
namespace ConsoleApp1
{
internal class Program
{
private static void Main(string[] args)
{
WriteLine(new Derived(new Internal<Derived>()));
ReadLine();
}
}
public class Base<T>
{
public Base(Internal<T> intern)
{
this.Intern = intern;
}
public Internal<T> Intern { get; private set; }
}
public class Internal<T>
{
}
public class Derived : Base<Derived>
{
public Derived(Internal<Derived> intern)
: base(intern)
{
}
}
}
答案 0 :(得分:2)
根据您的评论:
Derived
将继承自Base<Derived>
。为了创建Base<Derived>
,您需要拥有Derived
,因此您将继承Derived
等来创建Base<Derived>
。如何在{{1 }}?
您的误解从这里开始:
要创建
Base<Derived>
,您需要拥有Derived
那是不对的。您可能会认为,要创建Base<Derived>
,必须首先需要一个Derived
的实例。
以T<U>
为例。我可以创建U
,而无需使用List<string>
的任何实例:
List<int>
string
不包含任何var list = new List<string>();
。这只是一个空清单。同样的情况在这里适用。
要创建list
,您需要一个string
,您需要执行Base<Derived>
。 Internal<Derived>
也不需要通过相同的逻辑创建new Internal<Derived>()
的实例。
这里真正发生的是您正在尝试创建Internal<Derived>
的实例。您调用其构造函数,该构造函数以Derived
的实例调用Derived
的构造函数。
如何在
Base<Derived>
之前创建Internal<Derived>
?
考虑一下,在派生类之前创建基类是很有意义的。要创建Base<Derived>
,请先创建Derived
,然后向其添加所有特定于Cat
的功能。