说到C#高级编程,请参阅第33页的描述:For example, when you declare an int in C#, what you are actually declaring is an instance of a .NET struct, System.Int32. This may sound like a small point, but it has a profound significance: it means that you are able to treat all the primitive data types syntactically as if they were classes that supported certain methods.
string s = i.ToString(); // 没有box,有的是方法调用仔细理解一下这个链接的内容:
http://msdn.microsoft.com/zh-cn/library/yz2be5wk.aspx
例:int i = 10;object obj = i; //隐式装箱object obj = object(i); //显式装箱
int i =2;
Object obj = i;
这是隐式装箱。
装箱是将值类型转换为 object 类型或由此值类型实现的任一接口类型的过程。
从INT 和 STRING 都是值类型 ,是不会装箱或者拆箱的。
OBJECT OBJ=1;
INT I=CONVAETE.TOINT32(OBJ) 拆箱
INT I=1;
OBJECT OBJ=I; 装箱
不过这里确实没有装拆箱操作
string s = 10.ToString();
C#数据类型可以分为在栈上分配内存的值类型和在堆上分配内存的引用类型。如果int不过是栈上的一个4字节的值,该如何在它上面调用方法?
C#的实现方式是通过一个有点魔术性的方式,即装箱。装箱和拆箱可以把值类型转换为引用类型,并把引用类型转换回值类型。因为这是基本的操作,即把值强制转换为object类型。装箱用于描述把一个值类型转换为引用类型。运行库会为堆上的对象创建一个临时的引用类型“箱子”。按书上写的int不过是一个4字节的值,没有办法在它上面调用方法,要装箱之后才能调用方法啊?还有书上说“装箱用于描述把一个值类型转换为引用类型”,难道引用类型和object是一回事吗?
object是所有引用类型的基类。
既然object是所有引用类型的基类,那么从值类型转换到object类型或者引用类型都要进行装箱了???
int变量到底是一个4字节的数据,还是一个system.int32的对象?如果仅是数据那么它应该没有方法可调用啊,如果是struct,那它也是值类型的啊,而string是引用类型,值类型到引用类型不应该装箱吗?