c#:区别于;系统对象“;及;“对象”;
在C#中,在代码中使用c#:区别于;系统对象“;及;“对象”;,c#,coding-style,C#,Coding Style,在C#中,在代码中使用System.Object而不仅仅是Object,或者在System.String而不是String之间有什么区别吗?还是只是风格问题 一种形式比另一种形式更可取有什么原因吗?一种形式是另一种形式的别名。它的基本风格。string是global::System.string的别名,而object是global::System.object 如果您有使用系统在您的类中,String/String和Object/Object在功能上是相同的,用法是风格问题 (编辑:删除,根据J
System.Object
而不仅仅是Object
,或者在System.String
而不是String
之间有什么区别吗?还是只是风格问题
一种形式比另一种形式更可取有什么原因吗?一种形式是另一种形式的别名。它的基本风格。
string
是global::System.string
的别名,而object
是global::System.object
如果您有使用系统
在您的类中,String
/String
和Object
/Object
在功能上是相同的,用法是风格问题
(编辑:删除,根据Jon Skeet的评论)没有区别。有许多类型,称为,它们被编译器以您提到的样式威胁
大写的命名样式是ISO命名规则。它更一般,更普遍;对源代码中的所有对象强制使用相同的命名规则,而C#编译器没有例外。据我所知,这是一种快捷方式,更容易使用string,而不是System.string 但是要注意字符串和字符串之间有区别(c区分大小写)
String
(带小写字母“s”)是c语言的字符串类型,是系统的类型。String
是.NET框架中String
的实现
在实践中,除了文体上的差异外,没有其他差异
编辑:由于上述内容显然不够清晰,因此它们之间没有区别,它们在编译后是相同的类型。我在解释编译器看到的语义差异(这只是语法上的糖分,很像while和for循环之间的差异)。
string
是global::System.string
的别名。它只是语法上的糖。在几乎所有情况下,这两种代码都是完全可以互换的,并且编译后的代码也不会有什么不同
就我个人而言,我对变量名等使用别名,但对API中的名称使用CLR类型名称,例如:
public int ReadInt32() // Good, language-neutral
public int ReadInt() // Bad, assumes C# meaning of "int"
(注意,返回类型实际上不是一个名称——它在元数据中被编码为一个类型,因此这里没有混淆。)
我知道的唯一一个可以使用而另一个不能(我知道)的地方是:
禁止使用别名nameof
- 指定枚举基基础类型时,只能使用别名
虽然StyleCop确实强制使用遗留的C样式别名,但这是一组逻辑规则的缺陷。到目前为止,我还没有听到一个不是基于教条的规则(SA1121)的理由。如果您认为SA1121是合乎逻辑的,那么为什么datetime没有内置类型?那篇文章写得很糟糕,没有使用“primitive”一词。如果您查看Type.IsPrimitive的文档,您将看到:“基本类型是布尔型、字节型、SByte型、Int16型、UInt16型、Int32型、UInt32型、Int64型、UInt64型、UInt64型、UInt64型、IntPtr型、Char型、Double型和Single型。”请注意,这不包括字符串、十进制和object型,但包括IntPtr和UINTPTTR型这篇文章通常写得很糟糕。)也许更好的术语应该是“关键字数据类型”或C语言规范术语:别名。带大写字母的“字符串”对C编译器或C语言没有任何意义。“字符串”始终对应于global::System.string。我不知道最初的作者从哪里得到了“字符串”有特殊含义的概念。它们之间有什么区别?试着在没有“使用系统”的情况下使用“字符串”;指令:)@Jon你更喜欢使用哪个?@IanC:我通常使用别名。关于公共API语言中立性的评论确实很有趣!关闭公共API的FxCop upLanguage中立性是非常值得的。@Stillgar我指的不是字符串。看看我对Jon答案的评论,如果没有意义的话-@Stillgar:这就是为什么我的答案使用int/Int32而不是string/string。是的,这对String/Object/Decimal/Double/Byte/SByte并不重要,但对所有其他的都很重要。我是这样做的:我在原语变量的上下文中使用int或String(例如int x=0),在类的上下文中使用Int32和String等(例如Int32.Parse或String.Empty),但没有任何区别,最后它被编译成相同的CLR类型。你为什么不把它作为一个答案呢?这是一个与这个问题类似的问题——1这是不正确的。字符串和System.string是en