在变量类型转换中,
int i =Convert.ToInt32 ( obj);和 int j = (int)obj;这两者的区别
int n = 16;
object obj = n;//这就是一个装箱的过程
//object是什么类型都可以存储
Console.WriteLine(obj );
int i = Convert.ToInt32 ( obj);
int j = (int)obj;
问题相关代码,请勿粘贴截图
某些文章少看,越看越晕。越看越不会写代码
所以丢掉那些文章给你灌输的那些“垃圾”,我就只问
int i = Convert.ToInt32("1");
int j = (int)"1";
所以那些文章告诉你的东西能对上这个么? 字符串1 如何能变成数字1呢。
至于什么装箱,拆箱如何如何其实根本无需纠结,万物超类object,子类可以转换成父类,属于对象编程的公理,属于不证之证东西。
转换成父类以后,又能转换成自己,也是公理,也是不证之证的东西
接着是推理:转换成超类后,也可以转换成超类--子类这条继承链上的其他类
至于之所以存在装箱,拆箱这东西,和你纠结的没啥关系,只是因为当初官方设计的时候为了兼容其他语言东西,所以并非全部类型都按托管堆设计的,所以int,结构体,值类型是在栈上,所以当栈上的东西强行给超类object的时候,需要临时给他在托管堆上封装一下,本来这个过程就这么简单,只是设计者给其强行命名叫装箱。
接着当需要从超类转换成值类型,反向操作了一下,从托管堆写回栈上,这个过程被强名为拆箱
所以没有啥装箱,拆箱这么纠结的,也不是用object接就这么叫,他只是从值对象到引用对象间的封装和转换
ps:值对象到引用对象间的封装和转换也不是绝对的说法,因为如果我要自己继承重载并故意混乱官方默认实现的话,这种说法也站不住脚了