为什么要在系统命名空间中使用C#预定义类型而不是别名

Dav*_*veB 13 c#

在Juides Lowy的"C#编码标准"中,可以从www.idesign.net获得,推荐使用C#预定义类型而不是System命名空间中的别名.

object NOT Object
string NOT String
int NOT Int32
Run Code Online (Sandbox Code Playgroud)

这有什么好处?他们有什么不同?我在自己的编码中遵循了这个建议,但从未知道它们有何不同.

Mar*_*ell 16

主时他们意外地不同的是,当有人愚蠢到调用类型(或属性/场/等)String(例如),因为string 总是指的是global::System.String,在那里,因为String可以YourNamespace.String.

你最接近C#别名的是@string,它往往会像拇指一样伸出来.

我更喜欢C#别名.

顺便说一句,这是一个有趣的方式来惹恼任何使用dynamic太多的人:

using dynamic = System.Object;
Run Code Online (Sandbox Code Playgroud)

  • 这几乎和检查`public class var {}`一样邪恶 (3认同)

Jon*_*eet 13

他们并没有真正的区别.我个人也使用别名,但杰夫里希特提倡恰恰相反.生成的代码将完全相同.使用您认为最具可读性的(并尝试保持一致).

大多数人都同意的一件事是:在编写API时,请使用类型名称而不是别名,因此:

int ReadInt32()
Run Code Online (Sandbox Code Playgroud)

而不是

int ReadInt()
Run Code Online (Sandbox Code Playgroud)

int部分并不重要 - 它不是名称的一部分,可以使用任何语言适当地显示给任何消费者......但方法名称应该是语言中立的,这意味着使用类型名称.

必须使用别名的一个地方是指定枚举的基础类型:

enum Foo : byte // Valid

enum Foo : System.Byte // Invalid
Run Code Online (Sandbox Code Playgroud)


Jef*_*dge 8

除了乔恩在这里说的另一个区别.

var x = (Int32)-y;    // Does not compile.

var x = (int)-y;      // Negates the value of y and casts as an int.
Run Code Online (Sandbox Code Playgroud)

这是因为C#编程语言规范的第7.6.6节中定义的语法消歧规则.


Ale*_*lex 5

我觉得用"蓝色" int,string等等.可能是有点更直观的阅读.否则,我在调用静态方法时使用该类,即Int32.TryParse()