我有以下情況:如何調用(非虛擬)虛擬方法的原始實現?
在第三方庫(不能修改):
class A { public virtual void M() {} }
class B : A { public override void M() {} }
在我自己的代碼:
class C : B { public override void M() {} }
從C
的實現方法M
我想打電話給A
(但不是B
的!!)。我可以嗎?
接受任何招數,包括反思。我已經嘗試了反思,但是使用typeof(A)
得到的MethodInfo
仍然會生成一個虛擬調用(在隨後的堆棧溢出時調用C
的實現)。
從A
導出C
由於重新實現B
的複雜性而不存在問題。
這是我幾乎從來不使用繼承的原因之一代理。 – ChaosPandion 2010-07-31 12:23:00
@ChaosPandion:是的!完全!想想看,爲什麼甚至在第一時間編寫任何代碼呢? – Timwi 2010-07-31 12:36:54
@Timwi - 我知道你只是開玩笑,但有更好的方法,如構圖。 – ChaosPandion 2010-07-31 12:45:23