Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#:区别于;系统对象“;及;“对象”;_C#_Coding Style - Fatal编程技术网

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

在C#中,在代码中使用
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
    禁止使用别名
  • 指定枚举基基础类型时,只能使用别名
对象类型是System.object的别名。使用对象类型并将其显示为关键字。我认为这与遗产有关,但这只是一个猜测

查看此页面了解所有详细信息

我更喜欢使用小写版本,但没有特殊原因。正因为这些“基本”类型的语法突出显示不同,而且我在键入…

对象时不必使用shift键,int、long和bool被作为培训轮提供给那些难以适应数据类型不是语言固定部分这一想法的工程师。与之前的语言不同,C#对可以添加的数据类型数量没有限制。“系统”库提供了一个入门工具包,其中包括System.Int32、System.Boolean、System.Double、System.DateTime等有用类型,但鼓励工程师添加自己的。因为微软对快速采用他们的新语言感兴趣,所以他们提供了别名,使其看起来更像“C”,但这些别名是完全可丢弃的功能(如果删除所有内置别名,C将是一种同样好的语言,可能更好)


虽然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