在C#中,System.Object
在代码中使用而不是object
,System.String
而不是string
,等等之间有什么区别吗?还是仅仅是风格问题?
有一种理由为什么一种形式优于另一种形式?
在C#中,System.Object
在代码中使用而不是object
,System.String
而不是string
,等等之间有什么区别吗?还是仅仅是风格问题?
有一种理由为什么一种形式优于另一种形式?
Answers:
string
是的别名global::System.String
。它只是语法糖。两者正好在几乎所有情况下可以互换的,而且会在编译的代码没有什么区别。
我个人使用别名来表示变量名等,但是我将CLR类型名用作API中的名称,例如:
public int ReadInt32() // Good, language-neutral
public int ReadInt() // Bad, assumes C# meaning of "int"
(请注意,返回类型实际上不是名称-它在元数据中被编码为一种类型,因此这里没有混淆。)
我知道一个可以使用而另一个(我知道)不能使用的地方是:
nameof
禁止使用别名string
(带有小写的“ s”)是C#语言的字符串类型,并且该类型System.String
是string
.NET框架中的实现。
在实践中,除了风格上没有什么区别。
编辑:由于以上内容显然不够清楚,它们之间没有区别,一旦编译它们就是同一类型。我正在解释编译器看到的语义差异(这只是语法糖,很像while和for循环之间的差异)。
没有区别。有许多类型称为原始数据类型,它们以您提到的样式受到编译器的威胁。
大写命名方式是ISO命名规则。更一般,更常见;对源中的所有对象强制使用相同的命名规则,而C#编译器则没有例外。
据我所知,我知道这是一个快捷方式,使用字符串比使用System.string更容易。
但请注意,字符串和字符串之间有区别(C#区分大小写)
为难以适应数据类型不是语言固定部分的想法的工程师提供了object,int,long和bool作为培训平台。C#与之前的语言不同,它对可以添加的数据类型数量没有限制。“系统”库提供了一个入门工具包,其中包含诸如System.Int32,System.Boolean,System.Double, System.DateTime之依此类推,但鼓励工程师添加自己的。因为Microsoft对快速采用他们的新语言感兴趣,所以他们提供了别名,使它看起来像是更像“ C”的语言,但是这些别名是完全可抛弃的功能(如果您使用C#,它将是一种很好的语言。删除了所有内置别名,可能更好)。
尽管StyleCop确实强制使用了传统的C样式别名,但对于本应合理的规则集,这是一个缺陷。到目前为止,我还没有听说过此规则(SA1121)的单一理由,该理由不基于教条。如果您认为SA1121符合逻辑,那么为什么datetime没有内置类型?