在C#中,built-in types的关键字只是System
命名空间中相应类型的别名。
通常,使用关键字(例如int
)或标识符(例如Int32
)来引用内置类型没有区别。但是所有事情都有例外,所以我的问题分为两部分:
答案 0 :(得分:8)
C#不要求您使用其中一个,因为它们是等效的。这是个人偏好和编码惯例。因此,使用对您和您的团队来说更具可读性的那个。只有一个建议:保持一致:不要在代码库的一半中使用别名,在后半部分使用完整的类型名称。
答案 1 :(得分:2)
string
是System.String
类型的别名,int
是System.Int32
的别名。因此,请根据自己的喜好使用。
答案 2 :(得分:2)
using alias directive 无法使用关键字作为类型名称(但可以在类型参数列表中使用关键字):
using Handle = int; // error
using Handle = Int32; // OK
using NullableHandle = Nullable<int>; // OK
必须使用关键字指定<{3}} :
enum E : int { } // OK
enum E : Int32 { } // error
表达式(x)+y
,(x)-y
和(x)*y
的解释会有所不同,具体取决于x
是关键字还是标识符:
(int)+y // cast +y (unary plus) to int
(Int32)+y // add y to Int32; error if Int32 is not a variable
(Int32)(+y) // cast +y to Int32
(int)-y // cast -y (unary minus) to int
(Int32)-y // subtract y from Int32; error if Int32 is not a variable
(Int32)(-y) // cast -y to Int32
(int)*y // cast *y (pointer indirection) to int
(Int32)*y // multiply Int32 by y; error if Int32 is not a variable
(Int32)(*y) // cast *y to Int32
答案 3 :(得分:1)
标识符int
,string
,bool
等是真实类型Int32
,String
和{{1}的C#语言别名}, 分别。使用哪个并不重要,但是在编写API时,有些人更喜欢将实际的类类型用于别名。
这是列出等价物的MSDN article。
答案 4 :(得分:0)
没关系。 int
基本上是System.Int32
的简写,它们几乎可以完全互换。如果你愿意,可以考虑#define(但是C#不允许#defines这样)。
答案 5 :(得分:0)
一个问题是,奇怪的using
或成员声明String
/ Int32
可以映射到不同的类型(即不是mscorlib中的那个)或者甚至是另一种类型的成员,这会导致问题。
正如Jon所说,另一个问题是你不能使用标识符声明枚举(你得到错误“输入byte,sbyte,short,ushort,int,uint,long或ulong expected”)。
答案 6 :(得分:0)
它不要求您使用其中一个。但是,如果您想要更大或更小的int,您可能希望显式使用Int16或Int64而不是int,这是Int32的别名。
答案 7 :(得分:0)
我能想到的唯一情况是必需在一个表单中使用别名,否则你可能会使用类名称在enum类型的定义中:
public enum MyEnum:Byte //will not compile
public enum MyEnum:byte //correct
另请注意,枚举的定义需要使用alias关键字,而在定义可接受任何枚举类型的代码成员时,请使用类名Enum。
最后,您永远不能将System.ValueType
指定为基类或泛型类型参数;您改为使用struct
关键字,它实际上是从ValueType派生的对象的别名。