c# - 从使用派生类的泛型的类派生类
问题描述
我不明白为什么这段代码有效。派生类继承自使用派生类类型的基类。我本来希望在类型创建中出现一些无限循环之王。
请有人能解释为什么这段代码有效吗?谢谢你。
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)
{
}
}
}
解决方案
从您的评论中:
Derived
将继承自Base<Derived>
. 为了创建Base<Derived>
你需要拥有Derived
,那么你将创建Derived
继承Base<Derived>
等。Base<Derived>
之前是如何创建的Derived
?
你的误会从这里开始:
为了创建
Base<Derived>
你需要有Derived
那不是真的。您可能认为要创建T<U>
必须首先需要一个实例U
。
举List<string>
个例子。我可以在List<int>
不使用任何实例的情况下创建string
:
var list = new List<string>();
list
不包含任何string
s。这只是一个空列表。同样的事情也适用于这里。
要创建一个Base<Derived>
,你需要一个Internal<Derived>
,你通过做new Internal<Derived>()
。Internal<Derived>
也不需要Derived
由相同逻辑创建的实例。
这里真正发生的是您正在尝试创建Derived
. 你调用它的构造函数,它Base<Derived>
用 . 的实例调用 的构造函数Internal<Derived>
。
以前是怎么
Base<Derived>
创建的Derived
?
如果您考虑一下,在派生类之前创建基类是有道理的。要创建Cat
,您首先创建一个Animal
,然后将所有Cat
- 特定功能添加到它。
推荐阅读
- reactjs - Kendo React Bootstrap Datepicker 年份不可点击
- solr - 在 Solr 中,如何对带前缀的多值字段进行范围查询?
- mysql - 自引用表时删除数据
- node.js - Mongoose - 两个有条件的查询的聚合
- c# - 使用多个参数(模型和 ViewDataDictionary)创建 RenderPartialViewToString
- java - 学习用 Java Servlet 连接到 db 编程
- java - JMH 捐赠
使用 perf 进行分析时的值 - javascript - 控制台中奇怪的 JS 行为
- firebase - 我可以发送 2 个主题的推送消息吗?流式细胞仪
- azure - Azure 数据工厂复制数据动态获取最后一个 blob