c# - Microsoft 如何使所有 .NET 类隐式继承自 Object 类?我可以做同样的事情吗?

标签 c# .net inheritance

我们创建的所有类都继承自 Object 类,无需显式声明对该类的继承。

  • Microsoft 如何使所有 .NET 类隐式继承自 对象类?
  • 编译器是否在后面注入(inject)了继承 场景?
  • 我可以做同样的事情吗:让我所有的类(class) 例如从类接口(interface)隐式继承?

我的问题可能含糊不清,所以我会澄清:

我不是在询问从 Object 以外的另一个类继承,因为我知道类的多重继承是被禁止的。我说的是继承而不是通过类接口(interface),我的问题是隐式地做它而不是用我自己的另一个类替换一个对象,或者用对象和我自己的另一个类进行多重继承。我想让所有类继承 Interface1OfMyOwn 和 Interface2OfMyOwn 的形式。

最佳答案

所有类都隐式扩展 Object,因为 C# 标准指定了语言。

询问他们如何实现这就像询问他们如何实现 void 方法不返回数据这一事实,或者他们如何实现类具有属性这一事实:它只是在代码中的某个地方编译器(这里可能是 C# 编译器或 JIT 编译器)。我们无法确定,但可以说,只要编译器未检测到类中的显式继承,它就会转而使用 System.Object,就这么简单。因此,您必须接受 Object 只是编译器的特殊类型

为什么你不能用自定义类做到这一点似乎很明显:它会让编译器彻底混淆没有显式继承的类是否应该扩展 Object 或你的自定义类。如果它为每个没有显式继承的类选择后者,则在大多数情况下会引入编译错误,或者,如果您特别不走运,则会出现仅在运行时才会出现的令人惊讶的行为。如果它选择了前者,而您必须为此明确选择加入您的类(class),那有什么意义呢?

(当然,如果你想隐式实现一个接口(interface),也会发生同样的情况:所有没有真正实现该接口(interface)的类都会中断并导致编译错误。或者,如果你不走运,接口(interface)将匹配类中不相关的方法碰巧具有匹配的签名并导致奇怪的行为,您可以通过测试发现这些行为。)

关于c# - Microsoft 如何使所有 .NET 类隐式继承自 Object 类?我可以做同样的事情吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16758903/

相关文章:

c# - 如何迭代数组/集合/列表中的 "between"项?

c# - 如果使用 Task.Delay,Task.WhenAll 的行为会有所不同

.net - WPF MVVM 使用命令与事件处理程序

c++ - 模板和接口(interface)的多重继承问题

c++ - 从父类(super class)函数返回子类定义

html - 为什么 CSS 样式没有被 HTML 表单字段继承?

c# - 为什么函数需要在定义或使用之前声明?

c# - 免注册 (sxs) COM DirectShow 过滤器

c# - 低级鼠标 Hook 不会在管理进程上触发 mousedown/mouseup 事件

c# - 使用 crm 早期绑定(bind)类的 linq to sql