这个问题在这里已经有一个答案:>
Detect if a method was overridden using Reflection (C#)7个
是否可以确定虚拟方法是否已被覆盖:
是否可以确定虚拟方法是否已被覆盖:
- class ABase {
- public void DoSomething(object p)
- {
- p.Process();
- if( /* DoSomethingExtra is implemented */ )
- DoSomethingExtra(p);
- }
- public virtual void DoSomethingExtra(object p) { }
- }
- class ADerived {
- public override void DoSomethingExtra(object p)
- {
- p.ProcessMore();
- }
- }
我意识到这个例子似乎很愚蠢(例如,为什么你不叫DoSomethingExtra(),因为它不做任何事情).我向你保证,我有合法的情况.有任何想法吗?
解决方法
检查这个
Detect if a method was overridden using Reflection (C#)
反射将是在运行时执行此操作的唯一方法.这应该带有健康警告,但从OOP的角度来看,应该被认为是一个非常糟糕的想法(tm).基类通常不应该知道或关心派生类的实现方式.