gpt4 book ai didi

c# - 查找虚方法的原始实现

转载 作者:太空狗 更新时间:2023-10-29 23:11:55 25 4
gpt4 key购买 nike

我正在尝试使用反射来确定派生类重写基类的哪些方法。确定该方法是否被重写相当容易,但是试图确定一个方法是否在基类中被重写,或者只是在派生类中创建为虚拟方法是我试图完成的.

所以,如果 A 类有虚方法 Process 和 Export,B 类有虚方法 Process(重写)和 Display(新虚方法),我希望在检查 B 类时得到以下结果;

  • 覆盖的方法:进程
  • 未覆盖的方法:导出

我只想在检查从 B 类派生的类时处理 Display 方法。

最佳答案

GetBaseDefinition你在追求什么?

基本上

if (method.GetBaseDefinition() == method)
{
// Method was declared in this class
}

这是一个显示您感兴趣的案例的示例:

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);
}
}
}

输出:

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

关于c# - 查找虚方法的原始实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/926910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com