Ric*_*tad 5 .net c# reflection polymorphism
我试图使用反射来确定派生类覆盖基类的哪些方法.确定方法是否未被重写是相当容易的,但是尝试确定方法是否在基类中被重写,或者只是在派生类中创建为虚拟是我想要完成的.
因此,如果A类具有虚拟方法Process和Export,而B类具有虚拟方法Process(重写)和Display(新虚拟方法),那么在检查B类时我希望得到以下结果;
我只想在检查派生自B类的类时处理Display方法.
是GetBaseDefinition你以后?
基本上
if (method.GetBaseDefinition() == method)
{
// Method was declared in this class
}
Run Code Online (Sandbox Code Playgroud)
这是一个显示您感兴趣的案例的示例:
using System;
using System.Reflection;
class Base
{
public virtual void Overridden() {}
public virtual void NotOverridden() {}
}
class Derived : Base
{
public override void Overridden() {}
public virtual void NewlyDeclared() {}
}
public class Test
{
static void Main()
{
foreach (MethodInfo method in typeof(Derived).GetMethods())
{
Console.WriteLine("{0}: {1} {2} {3}",
method.Name,
method == method.GetBaseDefinition(),
method.DeclaringType,
method.GetBaseDefinition().DeclaringType);
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Overridden: False Derived Base
NewlyDeclared: True Derived Derived
NotOverridden: False Base Base
ToString: False System.Object System.Object
Equals: False System.Object System.Object
GetHashCode: False System.Object System.Object
GetType: True System.Object System.Object
Run Code Online (Sandbox Code Playgroud)