什么时候使用int和Int32,或者使用string和string才重要呢
本文关键字:string int Int32 什么时候 或者 | 更新日期: 2023-09-27 18:19:29
在C#中,内置类型的关键字只是System
命名空间中相应类型的别名。
通常,使用关键字(如int
)还是标识符(如Int32
)来引用内置类型没有区别。但每件事都有一个例外,所以我的问题分为两部分:
- C#何时要求使用或不使用关键字
- 使用关键字而不是标识符何时会改变程序的含义
C#不需要使用其中一个,因为它们是等效的。这是个人偏好和编码惯例。因此,使用一个对你和你的团队来说似乎更可读的。只有一条建议:保持一致:不要在一半的代码库中使用别名,在后半部分使用完整的类型名。
string
是类型System.String
的别名,int
是System.Int32
的别名。因此,根据您的喜好使用。
使用别名指令不能使用关键字作为类型名称(但可以在类型参数列表中使用关键字):
using Handle = int; // error
using Handle = Int32; // OK
using NullableHandle = Nullable<int>; // OK
枚举的基础类型必须使用关键字指定:
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
标识符int
、string
、bool
等分别是实际类型Int32
、String
和Boolean
的C#语言别名。使用哪一个并不重要,但在编写API时,有些人更喜欢使用实际的类类型而不是别名。
下面是MSDN上的一篇文章,列出了相应的内容。
它不需要使用其中一个。但是,如果想要较大或较小的int,则可能需要显式使用Int16或Int64,而不是Int32的别名int。
我能想到的唯一一种情况是,在枚举类型的定义中,需要以使用类名的形式使用别名:
public enum MyEnum:Byte //will not compile
public enum MyEnum:byte //correct
还要注意,枚举的定义需要使用alias关键字,而在定义可以接受任何枚举类型的代码成员时,则使用类名enum。
最后,永远不能将System.ValueType
指定为基类或泛型类型参数;而是使用struct
关键字,它本质上是从ValueType派生的对象的别名。
一个问题是,使用奇怪的using
s或成员声明,String
/Int32
可以映射到不同的类型(即不是mscorlib中的类型),甚至映射到另一种类型的成员,这会导致问题。
正如Jon提到的,另一个问题是不能使用标识符声明枚举(您会得到错误"键入byte、sbyte、short、ushort、int、uint、long或ulong expected")。
这没关系。CCD_ 23基本上是CCD_ 24的简写,它们几乎是完全可交换的。如果你喜欢的话,可以将其视为#define(但C#不允许这样的#define)。