Неявное преобразование в объявлении типа? Какой тип объекта хранится в куче? - PullRequest
1 голос
/ 15 мая 2011

Хорошо, представьте, что у меня есть базовый класс BaseClass, а также дочерний класс ChildClassA, производный от BaseClass.

Что происходит, когда я делаю это?

BaseClass b = new ChildClassA;

То, что я представляю, происходит так:

  1. ChildClassA создается и сохраняется в куче как ChildClassA тип !
  2. Переменная b получает ссылку на ChildClassA
  3. Существует неявное преобразование из ChildClassA в BaseClass
  4. Но объект все еще хранится в куче как ChildClassA

Причина, по которой я спрашиваю, состоит в том, что, как я понимаю, когда объект объявляется и сохраняется в куче, это то, чем он является ВСЕГДА. Преобразование просто указывает CLR на обрабатывать , как будто это другой тип, но он действительно всегда остается исходным типом, а знает, это все еще оригинальный тип.

Я прав? Что-то, чего мне здесь не хватает?

Ответы [ 2 ]

2 голосов
/ 15 мая 2011

Боже, у тебя это есть!

Конверсия просто говорит CLR относитесь к нему как к другому типу,

На самом деле это не преобразование, а скорее интерпретация.

2 голосов
/ 15 мая 2011

Вы в курсе своего понимания.

b относится к экземпляру ChildClassA. Последний по-прежнему находится в куче, как это было ранее, и никакие новые объекты не выделяются в результате присвоения экземпляру BaseClass b.

...