Как заменить экземпляр класса на приведение, при этом все ссылки на него остаются работающими - PullRequest
0 голосов
/ 26 октября 2011

Допустим, у меня есть много экземпляров 'Item'.Позже я хочу изменить некоторые из них на «SpecialItem», который расширяет «Item».

Могу ли я заменить экземпляр Item на экземпляр SpecialItem, не обновляя все существующие ссылки на старый экземплярItem?

... Так что я хотел бы сделать это = это как SpecialItem Но, конечно, вы не можете сделать это с помощью 'this';)

Ответы [ 2 ]

1 голос
/ 26 октября 2011

Вы можете приводить только назад или «вверх» цепочку наследования. Что-то вроде:

var item:Item = mySpecialItem as Item;

Если вам нужны более продвинутые возможности обмена во время выполнения, подумайте об использовании композиции вместо наследования, например, ссылаясь на свои элементы как на экземпляры Interfaces вместо экземпляров Class.

Однако, как говорит @IronBCC, если вы просто хотите поменять свойства, вы можете сделать это, сделав свойство общедоступным.

1 голос
/ 26 октября 2011

Нет, вы не можете этого сделать.Но вы можете использовать такую ​​конструкцию:

class Link {
   private var _link:*;
   public get link(){}
   public set link...
}

и user link.link, чтобы получить ваш Item, и link.link = new SpecialItem (), чтобы установить новое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...