c#:“System.Object”和“object”的区别

在C#中,在代码中使用System.Object而不是仅仅是object ,还是System.String而不是string等有什么区别? 还是只是一个风格问题?

为什么有一种forms比另一种forms更可取?

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

就个人而言,我使用variables名称等别名,但我使用CLRtypes名称的API名称,例如:

 public int ReadInt32() // Good, language-neutral public int ReadInt() // Bad, assumes C# meaning of "int" 

(请注意,返回types实际上不是一个名称,它在元数据中被编码为一个types,所以不存在混淆。)

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

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

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

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

我更喜欢使用小写版本,但没有特别的原因。 只是因为这些“基本”types的语法突出显示不同,我不必在input时使用shift键…

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

stringglobal::System.String的别名,而global::System.Object object

提供您using System; 在你的类中, String / stringObject / object在function上是相同的,用法是风格的问题。

(编辑:删除了一些误导性的报价 ,按照Jon Skeet的评论)

没有区别。 有许多types,称为原始数据types ,这是由编译器按照您提到的方式进行的。

大写的命名风格是ISO命名规则。 这是更一般的,常见的; 强制使用源代码中所有对象的相同命名规则,而C#编译器没有例外。

据我所知,我知道这是一个捷径,使用string比使用System.string更容易。

但要注意,string和string之间有区别(c#区分大小写)

string (小写“s”)是C#语言的stringtypes, System.Stringtypes是.NET框架中string的实现。

实际上,除了文体之外,没有什么区别。

编辑:由于以上显然不够清楚,他们之间没有任何区别,他们是一旦编译相同的types。 我正在解释编译器看到的语义差异(这只是语法糖,就像一个while和for循环之间的区别)。

对象intlongbool被作为训练轮提供给那些难以适应数据types不是语言的固定部分的工程师。 与之前的语言不同,C#不会限制您可以添加的数据types的数量。 “系统”库提供了一个入门工具包,包括System.Int32System.BooleanSystem.DoubleSystem.DateTime等types,但鼓励工程师自行添加。 因为微软有兴趣迅速采用他们的新语言,所以他们提供了别名,使得它看起来好像语言更像'C',但是这些别名是一个完全一次性的function(如果你是C#删除所有的内置别名,可能更好)。

虽然StyleCop确实强制使用传统的C风格别名,但这对其他逻辑规则却是一个缺陷。 到目前为止,我还没有听说过这个规则(SA1121)不是基于教条的单一理由。 如果你认为SA1121是合乎逻辑的,那为什么没有datetimetypes的datetime