我有以下情况:如何调用(非虚拟)虚拟方法的原始实现?
在第三方库(不能修改):
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