假设我有很多'Item'的例子。 后来,我想把它们中的一些改为'SpecialItem',它扩展了'Item'。
我可以用SpecialItem的实例替换Item的实例,而不必更新对旧的Item实例的所有现有引用吗?
......所以我想这样做 this = this as SpecialItem 但是当然,你不能用'this'来做到这一点;)
答案 0 :(得分:1)
不,你不能这样做。 但你可以使用这样的结构:
class Link {
private var _link:*;
public get link(){}
public set link...
}
和用户link.link,获取你的Item,以及link.link = new SpecialItem(),设置新值。
答案 1 :(得分:1)
你只能向后或向上施放继承链。类似的东西:
var item:Item = mySpecialItem as Item;
如果您需要更高级的运行时交换功能,请考虑使用组合而不是继承,例如,将您的项目引用为Interfaces实例而不是Class实例。
但是,正如@IronBCC所说,如果您只是想要交换属性,可以通过公开该属性来实现。