单根类层次结构的优势

本文关键字:层次结构 单根类 | 更新日期: 2023-09-27 18:19:12

我想了解。net、Java等语言中单根类(object)层次结构的所有优点。

我能想到一个优点。假设我有一个函数,我想接受所有数据类型(或其引用)。在这种情况下,我可以编写一个函数,而不是为每个数据类型编写一个函数:
public void MyFun(object obj)
{
     // Some code
}

我们还能从这种层次结构中得到什么好处?

单根类层次结构的优势

我将引用Bruce Eckel的一本书中的几句话- Thinking in Java:


单根层次结构中的所有对象都有一个共同的接口,所以它们最终都是同一种类型。替代方案(由你不知道所有东西都是相同的基础类型。从向后兼容性的角度来看,这符合C更好,可以认为限制更少,但是当你想要的时候要完成完全面向对象的编程,您必须构建自己的编程层次结构来提供与其他OOP一样的便利语言。在你获得的任何新类库中,都有一些其他的将使用不兼容的接口。它需要努力(而且可能。多重继承)将新接口工作到您的设计中。是c++额外的"灵活性"值得吗?如果你需要的话,如果你有在c上的大量投资是很有价值的。如果你从而Java等其他替代方案通常会更高效。


单根层次结构中的所有对象(如Java提供的)都可以保证具有一定的功能。你知道你可以表演对系统中每个对象的某些基本操作。单独一个根层次结构,以及在堆上创建所有对象简化参数传递。


单根层次结构使得实现垃圾更容易收集器(方便地内置于Java中)。必要的支持可以安装在基类和垃圾回收器中可以向系统中的每个对象发送适当的消息。没有单根层次结构和操作对象的系统通过引用,很难实现垃圾收集器。


由于运行时类型信息保证存在于所有对象中,您永远不会得到一个无法确定类型的对象。这对于系统级操作尤其重要,例如异常处理,并允许更大的编程灵活性。


单根层次结构不是关于将对象传递给方法,而是关于所有对象实现的公共接口。

例如,在c#中,System.Object实现了几个从层次结构继承的成员。

例如,这包括ToString(),它用于获得对象的文字表示。您可以保证对于每个对象,ToString()都将成功。在语言级别,您可以使用此功能从表达式(如(4-11).ToString())中获取字符串。 另一个例子是GetType(),它返回类型为System.Type的对象,表示调用该方法的对象的类型。因为这个成员定义在层次结构的顶端,所以反射比c++更容易、更统一。

它为一切提供了基础。例如,在c#中,Object类是根类,它有ToString()GetType()这样的方法,如果你不确定你将处理什么特定的对象,这些方法非常有用。

也-不确定这是不是一个好主意,但你可以在Object类上创建扩展方法,然后每个类的每个实例都能够使用该方法。

例如,您可以创建一个名为WriteToLogFile(this Object o)的扩展方法,然后让它在对象上使用反射来将其实例成员的详细信息写入日志。当然有更好的方法来记录事情,但这只是一个例子。

单根层次结构使平台开发人员对所有对象有一些最小的了解,从而简化了可以在所有其他对象上使用的其他库的开发。

考虑没有GetHashCode()的集合,没有GetType()的反射等