C # : “ System. Object”和“ Object”的区别

在 C # 中,在代码中使用 System.Object而不仅仅使用 object,或者使用 System.String而不使用 string等等,这两者之间有什么区别吗?还是只是风格问题?

为什么一种形式优于另一种形式?

18133 次浏览

一个是另一个的化名,这就是风格。

stringglobal::System.String的别名,objectglobal::System.Object的别名

如果你的课堂上有 using System;,那么 String/stringObject/object在功能上是相同的,使用方法只是风格问题。

(编辑: 删除 稍有误导性的引用,根据 Jon Skeet 的评论)

没有区别。有许多类型,称为 基本数据类型,它们受到你提到的编译器样式的威胁。

大写的命名方式是 ISO 命名规则。它更通用,更常见; 强制对源代码中的所有对象使用相同的命名规则,没有例外,比如 C # 编译器就有这样的规则。

据我所知,这是一个快捷方式,使用字符串比使用 System.string 更容易。

但是要小心 String 和 String 之间的区别(c # 是区分大小写的)

string(小写“ s”)是 C # 语言的字符串类型,而 System.String是。NET 架构。

在实践中,除了风格上的不同之外,没有什么区别。

编辑: 由于上述内容明显不够清楚,因此它们之间没有区别,编译后它们是同一类型。我解释了编译器所看到的语义差异(这只是语法上的差异,很像 while 和 for 循环之间的差异)。

stringglobal::System.String的别名。这只是句法糖。两者在几乎所有情况下都是 没错可互换的,并且在编译代码中没有区别。

就个人而言,我使用变量名的别名等,但我在 API 中使用 CLR 类型名称的名称,例如:

public int ReadInt32() // Good, language-neutral


public int ReadInt() // Bad, assumes C# meaning of "int"

(请注意,返回类型实际上并不是一个名称——它在元数据中被编码为一个类型,所以这里没有混淆。)

据我所知,只有一个地方可以使用,而另一个地方不能(据我所知) :

  • nameof禁止使用别名
  • 指定枚举基础类型时,可以使用别名 只有

对象类型是 系统目标的别名。使用 对象类型并将其显示为关键字。我觉得这和遗产有关,但这只是个大胆的猜测。

看看这个 MSDN页面的所有细节。

我更喜欢使用小写版本,但没有什么特别的原因。只是因为这些“基本”类型的语法突显不同,而且我在打字时不必使用 shift 键... ..。

对象 Int很长布尔被作为 辅助轮提供给那些难以适应数据类型不是语言固定部分的想法的工程师。与之前的语言不同,C # 对可以添加的数据类型没有限制。“系统”库提供了一个初学者工具包,包括 系统系统,布尔型系统,双倍日期时间等有用的类型,但鼓励工程师自己添加。因为微软对快速采用他们的新语言很感兴趣,所以他们提供了别名,使得这种语言看起来更像“ C”,但是这些别名是一个完全可抛弃的特性(如果你删除所有内置的别名,C # 也会是一种很好的语言,可能更好)。

尽管 StyleCop 确实强制使用遗留的 C 样式别名,但它是一组其他逻辑规则的缺陷。到目前为止,我还没有听到任何不是基于教条的理由来支持这个规则(SA1121)。如果你认为 SA1121是合乎逻辑的,那么为什么 日期时间没有内建类型?