gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:56:38 25 4
gpt4 key购买 nike

我们创建的所有类都继承自 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com