这样做的公认模式是使基类方法<编码>受保护<>/代码>:
ref class ItemBase { }
ref class ItemA : ItemBase { }
ref class ItemList abstract {
protected:
virtual void addInternal(ItemBase ^p);
}
ref class ItemListA : ItemList {
public:
virtual void add(ItemA ^p){addInternal(p);}
}
这里是使用通用物的更好解决办法。 说明我们如何限制一般参数<代码>T至ItemBase
,以强制规定这种收集必须只用。 项目Base
或其子类。
ref class ItemBase { };
ref class ItemA : public ItemBase { };
generic <class T>
where T: ItemBase
ref class ItemList abstract {
public:
virtual void Add(T p){}
};
ref class ItemListA : ItemList<ItemA^> {
//no need to override Add here
};
//usage
int main(array<System::String ^> ^args)
{
ItemListA^ list = gcnew ItemListA();
list->Add(gcnew ItemA());
}