为什么System.Object在.NET中不是抽象的?

rip*_*234 10 .net oop

我知道它通常被用作锁定对象,但这真的是充分的理由吗?的意义是什么

object o = new object();
Run Code Online (Sandbox Code Playgroud)

非抽象类是表示实际对象的东西."asdasdf"是一个字符串.什么实际的实例可以有"对象"类?没有意义,OOP明智.我的问题是它是否存在某种实际原因(除了用作锁定对象).

Voj*_*vic 13

回答这个问题的最简单方法是问另一个问题:Object类是否有任何抽象概念?由于它没有理由是抽象的,所以不是.

  • 我理解Object类提供了一个默认实现,但这不是具体的原因.即使实现了所有方法,也可以将Object类标记为抽象. (5认同)
  • 它抽象的一个原因是它没有具体的目的.没有具体目的的东西应该是抽象的,以帮助我们作为人类更好的grok API. (3认同)

Dav*_*ton 10

有时您只需要一个Object,而不需要任何其他内容,例如在实现多线程锁定时使用随机引用类型.不使对象抽象允许在这些情况下使用.Monitor.Enter和Monitor.Exit类(它是C#中"lock"关键字的基础)可以获取任何给定对象的锁定,而不管实现如何.


Oma*_*eji 8

当然,一个类是抽象的意味着它有一些需要实现的功能......

System.Object执行它所需的一切,因此它不是Abstract.

我认为你误解了为什么事情是抽象的,这是因为它们包含一些有用的功能,并没有规定你如何实现它们的某些功能部分.

基本上它们是半制造的类,就像一个模型工具包,你可以自定义按照你想要的方式工作,但你不必从头开始整个过程​​.

它们不存在阻止您创建它们的实例.