C# int(Int32)被认为是.NET中的对象还是原语(不是int?)?
int(也称为C# int(Int32)被认为是.NET中的对象还是原语(不是int?)?,c#,.net,int,primitive,value-type,C#,.net,Int,Primitive,Value Type,int(也称为Int32)是对象还是.NET中的原语(我不是问关于int?) 我在保存的单词int上点击F12,得到: public struct Int32 : IComparable, IFormattable, IConvertible, IComparable<int>, IEquatable<int> { ... } public struct Int32:IComparable、IFormattable、IConvertible、IComparable、I
Int32
)是对象还是.NET中的原语(我不是问关于int?
)
我在保存的单词int
上点击F12,得到:
public struct Int32 : IComparable, IFormattable, IConvertible, IComparable<int>, IEquatable<int>
{ ... }
public struct Int32:IComparable、IFormattable、IConvertible、IComparable、IEquatable
{ ... }
它不是从对象继承的,这是否意味着int
是一个原语 C#中的所有内容都继承自对象
,包括int
发件人:
Int32是表示有符号整数的不可变值类型
引用和值类型都是从最终基派生的
类对象
有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
查看C#参考源或此处:基本类型是通过关键字识别的类型,因此yesint是基本类型 基元类型还允许您将其用作文本 但是,关键字标识的基础类型是System.Int32,它不是基元类型。
这是一种值类型,不是引用类型(或对象)。
Int32
是一种结构,类似于类型(编译时),而不是对象(运行时)。所以您不能说“Int32
是一个对象”,但可以说“Int32
继承自对象”
结构是对象,ValueType派生自对象
int
和Int32
以及同义词,其中Int32
更适合于读者关心位长度的操作(位篡改操作、溢出情况等)MSDN-基本类型通过关键字标识,关键字是系统命名空间中预定义类型的别名。基元类型与其别名类型完全无法区分:写入保留字int与写入System.Int32完全相同。
因为基元类型别名为常规类型,所以每个基元类型都有成员。例如,Integer在System.Int32中声明了成员。可以将文字视为其相应类型的实例。”
因此,基本上int和Int32是同义词;您可能倾向于在只需要“整数”的地方使用int,在使用Int32时,会显式显示大小,以便未来的维护人员知道在适当的情况下放大int是安全的,但应小心以相同的方式使用INGInt32变量。使用这两种变量生成的代码将是相同的,但区别仅在于代码的可读性,或者如果您想将其称为代码表示的话
您可以阅读应用.NET Framework编程-作者Jeffrey Richter是使用完整类型名称的一个很好的例子。以下是我记得的主要内容:
类型名称在.NET语言之间可以变化。例如,在C语言中,长映射到Stimult.It64,而C++中有托管扩展,长映射到It32。因为在使用.NET时语言可以混合和匹配,所以可以肯定的是,不管读者首选语言,使用显式类名总是更清楚。t、
int
不是从object
继承的。将int
值赋给object
变量称为装箱。@YacoubMassad:Well,表示“所有类、结构、枚举和委托”“从系统对象继承。这是一个结构。自己得出结论。@YacoubMassad它确实继承自对象
-否则它将如何覆盖Equals
,GetHashCode
等?装箱与表示相关,而不是继承。(1是对象)
返回true。所以我想你们是对的。好吧,试过这个就足够了:intxx=1;如果(xx是对象){Console.Write(“yeap”);}
它是一个结构,不允许指定基类型。System.ValueType
的基本类型由struct
关键字隐含。在其他语言(如Java)中,对象和原语之间有区别,但在.NET中,类型系统是统一的。所有非指针、非接口类型都继承自System.Object
。您的意思是Int32是“由编程语言作为基本构建块提供的数据类型”吗?想知道为什么它没有显示Int32继承对象,因为它确实发现这个定义有问题,因为它缺少术语“基元类型”的范围。什么的原始类型?NET框架?那么,这个定义就不可能是正确的,因为不同的.NET语言可以有不同的关键字集。语言?然后我想知道这是否是被问到的问题。您引用的“基元类型”的定义是针对VB.NET的。这些类型内置在C#中,而C#不一定与整个.NET中的内置类型相同。另外,请注意,链接页面中提到了“简单类型”,这是一种C#类型,可能与“基本类型”相同,也可能不同。为整个.NET Framework提供了一个稍微不同的类型列表,这些类型被视为基本类型。C#中没有基本类型,您可以在任何int
literal上调用GetType
,并且GetType
在System.Object中声明。请尝试以下代码:int xx=1;如果(XX是对象){控制台。写(“YAAP”);}你应该考虑在C语言和java中如何实现原语之间的区别。Java假装是完全客观的语言,并且有类型Integer
,Double
,因此派生自基本对象类型。但是,这些是引用类型,与原语int
,double不同<