类型声明中的隐式转换?什么是存储在堆上的对象类型?

时间:2011-05-14 22:06:57

标签: .net implicit-conversion type-declaration

好的想象我有一个基类BaseClass,以及一个源自ChildClassA的子类BaseClass

当我这样做时会发生什么?

BaseClass b = new ChildClassA;

我想象的是:

  1. 创建ChildClassA并将其作为ChildClassA类型存储在堆上!
  2. 变量b被分配了对ChildClassA的引用
  3. 从ChildClassA到BaseClass
  4. 的隐式转换
  5. 但该对象仍作为ChildClassA
  6. 存储在堆中

    我问的原因是,据我所知,一旦一个对象被声明并存储在堆上,那就是它总是如此。转换只是告诉CLR 处理它就像它是一个不同的类型,但它实际上仍然是原始类型,知道它仍然是原始类型。

    我说错了吗?我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

你明白你的理解。

b指的是ChildClassA个实例。后者仍然像以前一样在堆上,并且由于将实例分配给BaseClass b而没有新的对象被堆积。

答案 1 :(得分:2)

通过Jove,你已经拥有它了!

  

转换只是告诉CLR   把它看作是一种不同的类型,

实际上,这不是转换,更像是解释。