這樣做的接受圖案使基類方法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