这样做的接受图案使基类方法protected
:
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
,以强制该集合只能与ItemBase
或其子类一起使用。
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());
}
不要使用代码标记代码 - 只需将代码缩进4个空格或选择它并使用“010”按钮。还要注意C++和C++/CLI是不同的语言。 – 2010-08-04 03:34:05
您需要为此使用泛型或遏制而不是继承。不能使用继承,因为您违反了LSP。 – 2010-08-04 04:06:22