正如标题所说。
是 C# 编译器设置的限制还是 CLR 从根本上禁止它?
两个都。
与 CLR(即 Mono AOT)没有直接关联的 C# 语言不允许多重继承。
支持 C# 以外的语言的 CLR 类型系统也不支持多重继承。
CLR 禁止它。如果只是编译器,您可以在运行时使用反射来克服它。多重继承(除了通过接口)直接违反了 CLR 的类型系统。
至少有三个层次:
.NET 库:.NET 的类型系统不支持它(看看Type.BaseType
属性......它是 a Type
,不是 a Type[]
,所以甚至不支持未来)
IL 语言:我不知道,但可能不会,否则Type
类型会有所不同(因为 IL 语言是与其他所有内容一起构建的)
C# 编译器:不,因为 C# 是 .NET 的首选语言,并且必须显示可以在 .NET 中完成的所有内容(几乎所有内容),而不会创建太多无法通过“普通” .NET 模拟的构造。像 LINQ 和对象初始化器这样的语法糖是一回事(很容易被其他语言模仿),并行类型系统不是 :-)