7

正如标题所说。

是 C# 编译器设置的限制还是 CLR 从根本上禁止它?

4

3 回答 3

7

两个都。

与 CLR(即 Mono AOT)没有直接关联的 C# 语言不允许多重继承。

支持 C# 以外的语言的 CLR 类型系统也不支持多重继承。

于 2013-08-07T15:55:57.527 回答
1

CLR 禁止它。如果只是编译器,您可以在运行时使用反射来克服它。多重继承(除了通过接口)直接违反了 CLR 的类型系统。

于 2013-08-07T15:55:59.433 回答
1

至少有三个层次:

  • .NET 库:.NET 的类型系统不支持它(看看Type.BaseType属性......它是 a Type,不是 a Type[],所以甚至不支持未来)

  • IL 语言:我不知道,但可能不会,否则Type类型会有所不同(因为 IL 语言是与其他所有内容一起构建的)

  • C# 编译器:不,因为 C# 是 .NET 的首选语言,并且必须显示可以在 .NET 中完成的所有内容(几乎所有内容),而不会创建太多无法通过“普通” .NET 模拟的构造。像 LINQ 和对象初始化器这样的语法糖是一回事(很容易被其他语言模仿),并行类型系统不是 :-)

于 2013-08-07T15:58:32.050 回答