c# object类型的问题

2025-03-04 22:25:22
推荐回答(3个)
回答1:

是的,是实现了隐式转换和显示转换。

因为所有类都继承自object,所以2可以隐式转化为object。
但object却没有类似的实现,所以不能隐式转换。 int b = (int)a;这样就可以了。

可以搜索下implicit和explicit关键字,这个用来实现隐式和显示转换。
当然,你举得是一个值类型和引用类型的特殊例子,才会有拆箱和装箱。你如果是用string 和object互转,也会有相同的问题,就不涉及什么拆箱装箱了。

回答2:

object a = 2; //这是个简单的装箱过程 不需要强转
当 CLR 对值类型进行装箱时,会将该值包装到 System.Object 内部,再将后者存储在托管堆上。取消装箱将从对象中提取值类型。 装箱是隐式的;取消装箱是显式的。

自己去研究一下装箱和拆箱吧

回答3:

object a = 2; 装箱,因为不论解释成什么类型,object都兼容,所以就可以存,这个没疑问。但是 int b = a; 拆箱的时候不允许隐式拆箱,因为会涉及到内存大小,而GetType返回的一定是继承自object的类,估计默认是int或者根据一定规则返回的时候就返回int,但是拆箱的时候为了防止内存泄露,强制需要你显示转换