C# 从使用派生类的泛型的类派生类

C# 从使用派生类的泛型的类派生类,c#,generics,inheritance,C#,Generics,Inheritance,我不明白为什么这个代码可以工作。 派生类从使用派生类类型的基类继承。 我希望在类型创建中有某种无限循环之王 请有人解释一下为什么这个代码有效吗? 多谢各位 using System; using System.Collections.Generic; using static System.Console; namespace ConsoleApp1 { internal class Program { private static void Main(stri

我不明白为什么这个代码可以工作。 派生类从使用派生类类型的基类继承。 我希望在类型创建中有某种无限循环之王

请有人解释一下为什么这个代码有效吗? 多谢各位

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)
        {
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用静态系统控制台;
名称空间控制台EAPP1
{
内部课程计划
{
私有静态void Main(字符串[]args)
{
WriteLine(新派生(新内部());
ReadLine();
}
}
公共阶级基础
{
公共基地(内部实习生)
{
这个。实习生=实习生;
}
公共内部实习生{get;private set;}
}
公共类内部
{
}
派生的公共类:基
{
公共来源(内部实习生)
:基地(实习)
{
}
}
}
根据您的评论:

Derived
将从
Base
继承。为了创建
Base
,您需要有
派生的
,这样您就可以创建
派生的
继承
Base
等。在
派生的
之前如何创建
Base

你的误解从这里开始:

为了创建
Base
,您需要有
派生的

事实并非如此。您可能会认为,要创建
T
,必须首先使用
U
的实例

List
为例。我可以创建
列表
,而无需使用
字符串的任何实例

var list = new List<string>();
var list=newlist();
列表
不包含任何
字符串
s。这只是一张空名单。同样的道理也适用于这里

要创建一个
Base
,您需要一个
Internal
,您可以通过执行
newinternal()
来获得它<代码>内部
也不需要使用相同的逻辑创建
派生
的实例

这里真正发生的事情是,您正在尝试创建
派生的
的实例。您可以调用它的构造函数,它使用
内部
实例调用
的构造函数

派生之前如何创建
Base


仔细想想,在派生类之前创建基类是有意义的。要创建一个
Cat
,首先要创建一个
Animal
,然后向它添加所有
Cat
特定的特性。

派生的
类似乎只是一个抽象。这就像派生
类IntegerList:List
。作为侧节点,您的示例似乎不适合任何常规编码模式,因此很难理解。通常这意味着该方法可能不是最优的。为什么它不起作用?我的意思是,这里的问题是什么,你期望得到什么答案?你能详细解释一下为什么你认为它会导致无限循环吗?然后,我们可以看到你们哪里有误解,并指出给你们看。@Sweeper派生将从Base继承。我命令创建需要派生的基,然后创建派生的继承基等。在派生之前如何创建基?