3

在 msdn 规范中,我注意到这System.Object是 .Net 中的最终基类。他们说这System.ValueType是一个抽象类,它继承System.Object并覆盖了诸如等之类的方法……诸如Equals等之类的Compare值类型继承自所有其他继承自的.net对象。boolintSystem.ValueTypeSystem.Object

我对此有两个问题。

  1. System.Object 需要什么?为什么这里没有首选界面?

我假设它只有 2 个直接子项(忽略我们可以创建更多),即 System.ValueType 和 System.ReferenceType 都具有完全不同的实现。

**编辑:**没有 System.ReferenceType。只有 Sytem.Object 和 Sytem.ValueType (覆盖基类)。在这里道歉。

所以可能需要 System.Object 来处理基本的 CLR 功能,例如使用 new() 创建对象、强制执行默认构造函数、GC 等?

  1. 当我反编译Sytemdll 并看到 bool 的实现时,我只看到一个结构。
    对于一个类(比如异常),我看不到对 System.ReferenceType 或 System.Object 的继承。这种继承是如何处理的?
    事实上,Common Type System 做了什么MyCustomClass来使其继承System.Object(因为继承是在编译时确定的,我认为 CTS 正在这样做)

如果我的理解有误,请随时纠正我/编辑帖子。

在此处输入图像描述

4

1 回答 1

10

这个问题你有很多问题。将来,考虑每个问题发布一个问题。

System.Object 需要什么?

问题很模糊。让我重述一下。

为什么要设计 C# 类型系统以使所有非指针类型都有一个共同的基类型?

获得多态性的好处。在没有泛型的类型系统(如 C# 1.0 类型系统)中,您希望能够创建任意对象的列表。

为什么不首选接口而不是类类型?

接口指定功能。基类允许共享实现。Object 上的方法具有在派生类型之间共享的实现。

我假设它只有 2 个直接子项(忽略我们可以创建更多),即 System.ValueType 和 System.ReferenceType 都具有完全不同的实现。

这是完全错误的。

因此可能需要 System.Object 来处理基本的 CLR 功能,例如使用 new() 创建对象

不。

强制执行默认构造函数

不。虽然最终调用了 object 的默认构造函数,但该构造函数没有做任何事情。所以说这个类型的目的是确保调用一个不做任何事情的构造函数是很奇怪的说法。

GC等?

不。

当我反编译 System.dll 并看到 bool 的实现时,我只看到了一个结构。

正确的。您应该知道所有不可为空的非枚举结构都直接继承自 System.ValueType。

对于一个类(比如异常),我看不到对 System.ReferenceType 或 System.Object 的继承。

正确的。您应该知道所有类类型都继承自 System.Object(当然,如果没有指定其他类型。)

这种继承是如何处理的?

这个问题太模糊了,无法回答。

Common Type System 对 MyCustomClass 做了什么以使其从 System.Object 继承(因为继承是在编译时确定的,我认为 CTS 正在这样做)

我完全不知道你想在这里问什么。尝试使问题更精确。

您没有问但可能应该问的问题是:

当我说类型 A 继承自类型 B 是什么意思?

这意味着所有类型 B 的成员也是类型 A 的成员。

所有成员?甚至私人会员?

是的。继承是一种类型的成员也是另一种类型的成员的属性。

于 2015-06-02T20:00:13.907 回答