c#:“System.Object”和“object”的区别
在C#中,在代码中使用System.Object
而不是仅仅是object
,还是System.String
而不是string
等有什么区别? 还是只是一个风格问题?
为什么有一种forms比另一种forms更可取?
string
是global::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键…
一个是另一个的别名。 它的风格。
string
是global::System.String
的别名,而global::System.Object
object
提供您using System;
在你的类中, String
/ string
和Object
/ object
在function上是相同的,用法是风格的问题。
(编辑:删除了一些误导性的报价 ,按照Jon Skeet的评论)
没有区别。 有许多types,称为原始数据types ,这是由编译器按照您提到的方式进行的。
大写的命名风格是ISO命名规则。 这是更一般的,常见的; 强制使用源代码中所有对象的相同命名规则,而C#编译器没有例外。
据我所知,我知道这是一个捷径,使用string比使用System.string更容易。
但要注意,string和string之间有区别(c#区分大小写)
string
(小写“s”)是C#语言的stringtypes, System.String
types是.NET框架中string
的实现。
实际上,除了文体之外,没有什么区别。
编辑:由于以上显然不够清楚,他们之间没有任何区别,他们是一旦编译相同的types。 我正在解释编译器看到的语义差异(这只是语法糖,就像一个while和for循环之间的区别)。
对象 , int , long和bool被作为训练轮提供给那些难以适应数据types不是语言的固定部分的工程师。 与之前的语言不同,C#不会限制您可以添加的数据types的数量。 “系统”库提供了一个入门工具包,包括System.Int32 , System.Boolean , System.Double , System.DateTime等types,但鼓励工程师自行添加。 因为微软有兴趣迅速采用他们的新语言,所以他们提供了别名,使得它看起来好像语言更像'C',但是这些别名是一个完全一次性的function(如果你是C#删除所有的内置别名,可能更好)。
虽然StyleCop确实强制使用传统的C风格别名,但这对其他逻辑规则却是一个缺陷。 到目前为止,我还没有听说过这个规则(SA1121)不是基于教条的单一理由。 如果你认为SA1121是合乎逻辑的,那为什么没有datetimetypes的datetime ?