int (Int32) 是否被视为 .NET 中的对象或原语(不是 int?)?

Is int (Int32) considered an object in .NET or a primitive (not int?)?

int(又名 Int32)是 object 还是 .NET 中的原语(我不是在问 int?)?

我在保存的单词 int 上按 F12 并得到:

public struct Int32 : IComparable, IFormattable, IConvertible, IComparable<int>, IEquatable<int>

{ ... }

它不是继承自 Object ,是否意味着 int 是一个原始对象?

C# 中的所有内容都继承自 object,包括 int

来自 msdn

Int32 is an immutable value type that represents signed integers

and

Both reference and value types are derived from the ultimate base class Object.

参考this MSDN site有15种内置类型,其中2种是类(对象和字符串),其余是原语:

bool - System.Boolean
byte - System.Byte
sbyte - System.SByte
char - System.Char
decimal - System.Decimal
double - System.Double
float - System.Single
int - System.Int32
uint - System.UInt32
long - System.Int64
ulong - System.UInt64
object - System.Object
short - System.Int16
ushort - System.UInt16
string - System.String

基本类型是通过关键字标识的类型,所以int是基本类型。

基本类型还允许您将其用作文字。

但是,关键字标识的基础类型是 System.Int32,这不是原始类型。 这是一个值类型,而不是引用类型(或对象)。

Int32 是一个结构,它就像一个类型(编译时)而不是对象(运行 时)。所以你不能说“Int32 是一个对象”,但你可以说“Int32 继承自对象”。

结构是 ValueType,而 ValueType 派生自对象。

intInt32 以及同义词,其中 Int32 更适合 reader 关心位长度的操作(位操作、溢出情况等) .)

MSDN - “原始类型是通过关键字来识别的,关键字是系统命名空间中预定义类型的别名。原始类型与其别名的类型完全没有区别:写入保留字 int 与写入完全相同系统.Int32。 因为原始类型是常规类型的别名,所以每个原始类型都有成员。例如,Integer 具有在 System.Int32 中声明的成员。文字可以被视为其相应类型的实例。"

所以基本上 intInt32 是同义词;您会倾向于在只需要 'an integer' 的地方使用 int,而在使用 Int32 时会明确显示大小,以便未来的维护者会知道在适当的情况下扩大 int 是安全的,但应该注意以相同的方式更改 Int32 变量。使用两者的结果代码将是相同的,但区别仅在于代码的可读性,或者如果您想将其称为代码表示。

您可以阅读 Applied .NET Framework Programming - 作者 Jeffrey Richter 提供了一个使用完整类型名称的好例子。以下是我记得的主要内容:

类型名称可能因 .NET 语言而异。例如,在 C# 中,long 映射到 System.Int64,而在具有托管扩展的 C++ 中,long 映射到 Int32。由于在使用 .NET 时可以混合搭配各种语言,因此可以肯定的是,无论 reader 的首选语言如何,使用明确的 class 名称总是会更加清晰。