我正在使用一個爲我生成一堆類的庫。如何在基類對象上調用子類方法?
這些類都從一個公共基類繼承而來,但該基類沒有定義所有子類通用的幾個方法。
例如:
SubClassA : BaseClass{
void Add(ItemA item) {...}
ItemA CreateNewItem() {...}
}
SubClassB: BaseClass{
void Add(ItemB item) {...}
ItemB CreateNewItem() {...}
}
不幸的是,基類沒有這些方法。這將是巨大的:
BaseClass{
// these aren't actually here, I'm just showing what's missing:
abstract void Add(ItemBaseClass item); // not present!
abstract ItemBaseClass CreateNewItem(); // not present!
}
既然有我的A + B對象的公共基類,併爲項目對象的公共基礎課,我曾希望從多態性的精彩世界受益。
不幸的是,由於常用的方法實際上並不存在於基類中,所以我無法虛擬地調用它們。例如,這將是完美的:
BaseClass Obj;
Obj = GetWorkUnit(); // could be SubClassA or SubClassB
ItemBaseClass Item = Obj.CreateNewItem(); // Compile Fail: CreateNewItem() isn't in the base class
Item.DoSomething();
Obj.Add(Item); // Compile Fail: Add(...) isn't in the base class
顯然鑄造的工作,但然後我需要知道哪種類型的我有這將否定的好處。
如何「強制」調用這些方法?我並不擔心得到一個沒有實現我試圖調用的方法的對象。實際上,我可以做我想做的事,VB - 我不明白智能感知,但是編譯器的快樂,它的工作原理:
CType(Obj, Object).Add(Item) // Note: I'm using C#--NOT VB
Againt,我有過這些類(我認爲排除了部分類)沒有控制。
那麼你自己的方法有什麼問題呢?只有使用我的,如果你有選項嚴格在 – 2009-04-16 18:20:39
10你有控制的子類?如果你這樣做,去Lucero的解決方案。 – 2009-04-16 18:25:03
@邁克爾哈倫:C#根本沒有Option Strict。如果你對這些類沒有控制權,我的解決方案就可以工作,如果你能控制子類,Lucero的解決方案是最好的。 – 2009-04-16 18:25:58