测试虚拟方法是否已被覆盖

本文关键字:覆盖 是否 虚拟 方法 测试 | 更新日期: 2023-09-27 18:10:41

我知道这是一个坏主意,但我有一个基类很多的虚拟方法a (), B(), C()和一组匹配的getter bool SupportsA(), bool supportsB(),…

这个想法是,实现者只希望为一小部分虚方法提供功能,我希望减轻他们覆盖相关getter的责任。是否有一种方法可以从基类中判断是否有任何(可能不止一个)子类重写了特定的方法?注意,这些类可能在不同的程序集中定义,所以我不知道类型。

public class
{
  public bool SupportsA
  {
    get { return (A == overridden); }
  }
  public virtual void A()
  {
    // Null default implementation.
  }
}

已经存在一些类似的问题,但它们似乎假设基类型和派生类型在编译时都是已知的。

测试虚拟方法是否已被覆盖

public class BaseClass
 {
    public bool SupportsA
    {
        get { return (this.GetType().GetMethod("A").DeclaringType == typeof(BaseClass)); }
    }
    public virtual void A()
    {
        // Null default implementation.
    }
}