【问题标题】:Test whether virtual method has been overridden [duplicate]测试虚拟方法是否已被覆盖[重复]
【发布时间】:2015-09-02 03:13:56
【问题描述】:

我知道这是个坏主意,但我有一个基类,其中包含 很多 虚方法 A()、B()、C() 和一组匹配的 getter bool SupportsA( ), bool 支持B(), ...

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

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

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

【问题讨论】:

  • 有什么理由不使用接口吗?看起来很适合您的要求...

标签: c# reflection


【解决方案1】:
public class BaseClass
 {
    public bool SupportsA
    {
        get { return (this.GetType().GetMethod("A").DeclaringType == typeof(BaseClass)); }
    }
    public virtual void A()
    {
        // Null default implementation.
    }
}

【讨论】:

  • 非常好,它甚至可以在基类构造函数中使用。
猜你喜欢
  • 2016-01-24
  • 2011-11-06
  • 2012-10-26
  • 2013-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
相关资源
最近更新 更多