.net 类型声明中的隐式转换?堆上存储的对象类型是什么?
好的,假设我有一个基类.net 类型声明中的隐式转换?堆上存储的对象类型是什么?,.net,implicit-conversion,type-declaration,.net,Implicit Conversion,Type Declaration,好的,假设我有一个基类BaseClass,还有一个子类ChildClassA,它派生自BaseClass 当我这样做时会发生什么 BaseClass b=新的子类A 我所想象的是: ChildClassA被创建并作为ChildClassA类型存储在堆中 变量b被分配一个对ChildClassA的引用 存在从ChildClassA到基类的隐式转换 但该对象仍作为ChildClassA存储在堆中 我问这个问题的原因是,据我所知,一旦一个对象被声明并存储在堆上,它总是这样。转换只是告诉CLR将其视为不
BaseClass
,还有一个子类ChildClassA
,它派生自BaseClass
当我这样做时会发生什么
BaseClass b=新的子类A代码>
我所想象的是:
ChildClassA被创建并作为ChildClassA
类型存储在堆中李>
变量b
被分配一个对ChildClassA的引用
存在从ChildClassA到基类的隐式转换
但该对象仍作为ChildClassA存储在堆中
我问这个问题的原因是,据我所知,一旦一个对象被声明并存储在堆上,它总是这样。转换只是告诉CLR将其视为不同的类型,但它实际上始终是原始类型,并且知道它仍然是原始类型
我说得对吗?我有什么遗漏吗?你的理解很到位
b
引用ChildClassA
实例。后者仍然像以前一样在堆上,并且由于将实例分配给基类b
,因此不会对新对象进行堆化,您的理解是正确的
b
引用ChildClassA
实例。后者仍然像以前一样在堆上,并且没有新的对象因为Jove将实例分配给基类b
而被堆化,你已经得到了
转换只是告诉CLR
把它当作另一种类型对待
实际上,这不是一种转换,更像是一种解释。天哪,你得到了
转换只是告诉CLR
把它当作另一种类型对待
实际上这不是一种转换,更像是一种解释