gpt4 book ai didi

c# - .NET 中的一切都是对象吗?

转载 作者:IT王子 更新时间:2023-10-29 03:50:46 25 4
gpt4 key购买 nike

请帮助我们解决关于“几乎”一切都是对象 的争论(an answer to Stack Overflow question As a novice, is there anything I should beware of before learning C#?)。我认为情况确实如此,因为 Visual Studio 中的所有内容至少都显示为结构。请发布一个引用,这样它就不会成为“现代傻瓜”(This American Life)。

请注意,这个问题指的是 C#,不一定是 .NET,以及它如何处理引擎盖下的数据(显然都是 1 和 0)。

下面是对“万物皆对象”的评论:

  • 嗯,不,不是。 – 二进制忧虑者
  • 我想要一个例子... – scotty2012
  • 不是一切都源自基类型对象? – 细细的
  • 大多数事物都是对象... – Omar库赫吉
  • 值类型、整数、 double 、对象引用(不是它们的对象 self )等不是对象。他们能被“装箱”以看起来像物体(例如i.ToString()) 但实际上它们是原始类型。将条目更改为“几乎所有的东西都是一个对象”和我将删除否决票 – 二进制忧虑者
  • 感谢您的澄清。我想想你能想到的最低水平与 C# 中的 int 交互是作为结构,哪个不是对象? - http://msdn.microsoft.com/en-us/library/ms173109.aspx– 细细的
  • Int32 不是继承自 ValueType哪个继承自Object?如果是这样,尽管有这种行为,一个 int 是一个目的。 – 克里斯法默
  • 不,int 的盒装类型继承来自 ValueType,它继承自目的。它们不是对象传统意义上,因为 a) 一个 int不是对 int 的引用,它是诠释。 b) 整数不是垃圾集。如果你声明一个 Int32,那么 int 是 4 个字节堆栈,故事的结尾 – Binary Worrier

对象的定义:“对象”作为类 System.Object 的继承者与“对象”作为类型的实例与“对象”作为引用类型。”

最佳答案

这里的问题是这实际上是两个问题——一个问题是关于继承的,在这种情况下答案是“几乎所有”,另一个是关于引用类型与值类型/内存/装箱的问题,在这种情况下答案是是“否”。

继承:

在 C# 中,以下内容为真:

  • 所有值类型,包括枚举和可为 null 的类型,都派生自 System.Object
  • 所有类、数组和委托(delegate)类型都派生自 System.Object
  • 接口(interface)类型不是从 System.Object 派生的。它们都可以转换为System.Object,但接口(interface)只能派生自其他接口(interface)类型,System.Object不是接口(interface)类型。
  • 没有指针类型派生自 System.Object,也没有任何指针类型可以直接转换为 System.Object
  • “开放”类型参数类型也不是从 System.Object 派生的。类型参数类型不是从任何东西派生的;类型参数被限制为从有效基类派生,但它们本身不是从任何东西“派生”的。

来自 the MSDN entry for System.Object :

Supports all classes in the .NET Framework class hierarchy and provides low-level services to derived classes. This is the ultimate base class of all classes in the .NET Framework; it is the root of the type hierarchy.

Languages typically do not require a class to declare inheritance from Object because the inheritance is implicit.

Because all classes in the .NET Framework are derived from Object, every method defined in the Object class is available in all objects in the system. Derived classes can and do override some of these methods.

因此,并非 C# 中的每个类型都派生自 System.Object。即使对于那些类型,您仍然需要注意 reference types 之间的区别。和 value types ,因为他们的待遇非常不同。

拳击:

虽然值类型确实继承System.Object,但它们在内存中的处理方式不同于引用类型,以及它们如何通过代码中的方法传递的语义也不同。实际上,值类型不会被视为对象(引用类型),除非您通过将其装箱为引用类型来明确指示您的应用程序这样做。参见 more information about boxing in C# here .

关于c# - .NET 中的一切都是对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/436211/

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