前言:
了解泛型和非泛型之前,我想我们应该来一块聊聊拆箱和装箱的操作;因为就是通过这一点来区分他们的,So?
装箱 值类型--->引用类型; 拆箱 引用类型--->值类型; 说明 是否发生了拆箱和装箱,判断这两种数据类型是否存在继承关系(F12判断) 补充 拿什么类型装的箱,拆的时候就应该拿什么类型拆;相同数据类型不会发生拆装箱,拆装箱的过程中花费时间。
说明:
其实我们在了解这个操作的过程中,可以回想“字符串连接”的操作;典型的拆箱和装箱过程。
int n = 10;
object o = n;//装箱
double d = (double)o; //拆箱--此时报错
Console.WriteLine(d);
Console.ReadKey();
///扩展:继承关系之间发生装箱操作///
int n = 10;
IComparable com = n;
/// 示例一 (三次装箱,一次拆箱) /
int n = 10;
object o = n;//装箱
n = 100;
Console.WriteLine(n + "," + (int)o);
Console.ReadKey();
/// 示例二 (三次装箱)
int n = 10;
double d = 3.14;
string s = "chengdu";
Console.WriteLine(n + d + s);
//解释:字符串连接默认调用了string.contact()函数,因此寻找合适的重载{string string.concat(object a,object b,object c)};
示例三(一次装箱)///
int n = 10;
string s1 = n.ToString();
string s2 = n.GetType().ToString();
Console.WriteLine(s1 + "\t" + s2);
//由于GetType()方法属于object非int(F12帮助),所以发生了一个装箱操作/
补充:
还记得上一篇博客中提及的关于反编译软件的使用不?具体功能还在慢慢探索中,期待。
以上就是装箱和拆箱的过程中的一部分内容,非泛型集合由于增加了反复拆装箱的过程,因此渐渐的被舍弃,但是不得不承认非泛型集合在进行赋值操作的时候不需要考虑数据类型。 |