关于编码风格:c#:“System.Object”和“object”之间的区别

c#: difference between “System.Object” and “object”

在c_中,在代码中使用System.Object与仅使用objectSystem.String而不使用string等有什么区别吗?还是只是风格问题?

为什么一种形式比另一种形式更受欢迎?


stringglobal::System.String的别名。这只是简单的句法糖分。这两者在几乎所有情况下都是完全可以互换的,编译后的代码也不会有什么不同。

我个人使用别名来表示变量名等,但我使用clr类型名来表示API中的名称,例如:

1
2
3
public int ReadInt32() // Good, language-neutral

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

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

我只知道一个地方可以使用,另一个不能使用(我知道)的地方是:

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


对象类型是System.Object的别名。对象类型被使用并显示为关键字。我认为这与遗产有关,但这只是一个猜测。

有关所有详细信息,请参阅此msdn页。

我喜欢使用低成本的版本,但没有特殊原因。只是因为这些"基本"类型的语法突出显示不同,而且我在键入时不必使用SHIFT键…


一个是另一个的别名。它的风格。


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

如果你班上有using System;string/stringobject/object在功能上是相同的,并且用法是风格问题。

(编辑:根据乔恩·斯基特的评论,删除了有点误导性的引用)


string(小写"s")是C语言的字符串类型,System.String类型是.NET框架中string的实现。

在实践中,除了风格上的差异外,没有别的区别。

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


对象、int、long和bool是为那些难以适应数据类型不是语言固定部分这一理念的工程师提供的培训工具。与之前的语言不同,C对您可以添加的数据类型数量没有限制。"System"库提供了一个入门工具包,其中包含诸如System.Int32、System.Boolean、System.Double、System.DateTime等有用的类型,但鼓励工程师自行添加。因为微软对快速采用他们的新语言很感兴趣,他们提供了别名,使其看起来更像C语言,但这些别名是完全可释放的功能(如果删除了所有内置别名,C语言可能会更好)。

虽然StyleCop确实强制使用传统的C样式别名,但它在其他逻辑规则集上是一个瑕疵。到目前为止,我还没有听到一个单一的理由为这个规则(SA1121)不是基于教条。如果您认为SA1121是逻辑的,那么为什么datetime没有buildin类型?


据我所知,我知道这是一个快捷方式,它更容易使用字符串,而不是System.String。

但是要小心,字符串和字符串之间有区别(C区分大小写)


没有区别。有许多类型,称为基元数据类型,由编译器以您提到的样式进行线程化。

大写的命名样式是ISO命名规则。它更通用,更常见;强制对源代码中的所有对象使用相同的命名规则,而不存在C编译器所具有的异常。