这篇MSDN文章涉及数据类型.
它说:
对于Java中的每个原始数据类型,核心类库提供了一个包装类,将其表示为Java对象.例如,Int32类包装int数据类型,Double类包装double数据类型.
另一方面,C#中的所有原始数据类型都是System命名空间中的对象.对于每种数据类型,都提供了短名称或别名.例如,int是System.Int32的短名称,double是System.Double的缩写形式.
我跑到Mono代码来读取System.Int32结构的实现.
我发现了几行强迫我提出这个问题:
public const int MaxValue = 0x7fffffff;
public const int MinValue = -2147483648;
// This field is looked up by name in the runtime
internal int m_value;
Run Code Online (Sandbox Code Playgroud)
我假设MS将以相同的方式实现结构.这与包装器有什么不同吗?文件试图传达的究竟是什么?
如果MSDN被认为是System.Int32结构将无限递归,至少对我来说非常困惑.
jas*_*son 13
这与包装器有什么不同吗?
有没有包装类在C#中像有Java中的基本类型和别名int为System.Int32不喜欢的包装东西.这只是System.Int32一个不同的名字.
C#中的原始类型可以装箱,就像它们可以在Java中一样,但是在C#中它们被装箱时它们被装箱,System.Object而在Java中它们被装箱到它们的包装类型.
文件试图传达的究竟是什么?
这两种相似但不同的语言之间存在差异.天真地看,这些东西看起来是一样的:
Java:int- >Integer
C#:int- >System.Int32
但事实并非如此.在Java中,它int是一种基本类型,并且Integer是一个类,用作需要装箱int时int的包装器.在C#,int并且System.Int32是完全一样的东西 (基本类型).
如果MSDN被认为是System.Int32结构将无限递归,至少对我来说非常困惑.
System.Int32和int是恰好在C#同一类型; int只是一个方便的别名System.Int32.在Java中,int并且Integer是截然不同的.在C#中,int并且System.Int32是没有不同的.
所以,要非常清楚:
public const int MaxValue = 0x7fffffff;
public const int MinValue = -2147483648;
// This field is looked up by name in the runtime
internal int m_value;
Run Code Online (Sandbox Code Playgroud)
可以改写成
public const System.Int32 MaxValue = 0x7fffffff;
public const System.Int32 MinValue = -2147483648;
// This field is looked up by name in the runtime
internal System.Int32 m_value;
Run Code Online (Sandbox Code Playgroud)
这根本不会改变的意思,因为int和System.Int32有确切同样的事情.然后,您应该参考上一个问题来了解内置类型的特殊处理.