一尘不染

检测是否使用反射(C#)覆盖了方法

c#

假设我有一个基类TestBase,其中定义了一个虚拟方法TestMe()

class TestBase
{
    public virtual bool TestMe() {  }
}

现在,我继承该类:

class Test1 : TestBase
{
    public override bool TestMe() {}
}

现在,使用反射,我需要确定子类中是否已重写方法TestMe-可以吗?

我需要什么-我正在为“对象”类型编写一个设计器可视化程序,以显示继承的整个层次结构,并还显示哪些虚拟方法在哪个级别被覆盖。


阅读 173

收藏
2020-05-19

共1个答案

一尘不染

给定类型Test1,您可以确定它是否具有以下 实现 声明TestMe

typeof(Test1).GetMethod("TestMe").DeclaringType == typeof(Test1)

如果声明来自基本类型,则将得出false。

请注意,由于这是测试声明,而不是true的实现,因此如果它也是抽象的且是抽象的, 则将 返回true
,因为它将具有自己的声明。如果要排除这种情况,请添加Test1``TestMe``Test1``&& !GetMethod("TestMe").IsAbstract

2020-05-19