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
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 派生自对象。
int
和 Int32
以及同义词,其中 Int32
更适合 reader 关心位长度的操作(位操作、溢出情况等) .)
MSDN - “原始类型是通过关键字来识别的,关键字是系统命名空间中预定义类型的别名。原始类型与其别名的类型完全没有区别:写入保留字 int 与写入完全相同系统.Int32。
因为原始类型是常规类型的别名,所以每个原始类型都有成员。例如,Integer 具有在 System.Int32 中声明的成员。文字可以被视为其相应类型的实例。"
所以基本上 int 和 Int32 是同义词;您会倾向于在只需要 'an integer' 的地方使用 int,而在使用 Int32 时会明确显示大小,以便未来的维护者会知道在适当的情况下扩大 int 是安全的,但应该注意以相同的方式更改 Int32 变量。使用两者的结果代码将是相同的,但区别仅在于代码的可读性,或者如果您想将其称为代码表示。
您可以阅读 Applied .NET Framework Programming - 作者 Jeffrey Richter 提供了一个使用完整类型名称的好例子。以下是我记得的主要内容:
类型名称可能因 .NET 语言而异。例如,在 C# 中,long 映射到 System.Int64,而在具有托管扩展的 C++ 中,long 映射到 Int32。由于在使用 .NET 时可以混合搭配各种语言,因此可以肯定的是,无论 reader 的首选语言如何,使用明确的 class 名称总是会更加清晰。
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
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 派生自对象。
int
和 Int32
以及同义词,其中 Int32
更适合 reader 关心位长度的操作(位操作、溢出情况等) .)
MSDN - “原始类型是通过关键字来识别的,关键字是系统命名空间中预定义类型的别名。原始类型与其别名的类型完全没有区别:写入保留字 int 与写入完全相同系统.Int32。 因为原始类型是常规类型的别名,所以每个原始类型都有成员。例如,Integer 具有在 System.Int32 中声明的成员。文字可以被视为其相应类型的实例。"
所以基本上 int 和 Int32 是同义词;您会倾向于在只需要 'an integer' 的地方使用 int,而在使用 Int32 时会明确显示大小,以便未来的维护者会知道在适当的情况下扩大 int 是安全的,但应该注意以相同的方式更改 Int32 变量。使用两者的结果代码将是相同的,但区别仅在于代码的可读性,或者如果您想将其称为代码表示。
您可以阅读 Applied .NET Framework Programming - 作者 Jeffrey Richter 提供了一个使用完整类型名称的好例子。以下是我记得的主要内容:
类型名称可能因 .NET 语言而异。例如,在 C# 中,long 映射到 System.Int64,而在具有托管扩展的 C++ 中,long 映射到 Int32。由于在使用 .NET 时可以混合搭配各种语言,因此可以肯定的是,无论 reader 的首选语言如何,使用明确的 class 名称总是会更加清晰。