给定这段代码,我如何使用“ i”变量知道该方法不是从基类派生的,而是在最不被推荐的类中声明的?
例如,我不需要GetType(),ToString()等来进行打印。

MethodInfo[] methods = Type.GetType(
            "Probabilities_Theory.ProbabilitiesTheory").GetMethods();

foreach (var i in methods)
{
    if (!i.IsVirtual) // another condition needed
        Console.WriteLine(i);
}


我不需要知道它是否被覆盖,因为例如GetType()方法不是虚拟的。但是我仍然不希望GetType()被打印出来。

GetType()和其他虚拟方法的共同点是,它们都不是在最被压低的类中声明的。

我可以这样:

if (i.DeclaringType == typeof(ProbabilitiesTheory))
    Console.WriteLine(i);


但是我希望我的代码更自动化,更具编程性和更多内容。就像一个人不知道它是什么类型。

最佳答案

尝试使用BindingFlags.DeclaredOnly

MethodInfo[] methods = Type.GetType("Probabilities_Theory.ProbabilitiesTheory")
                           .GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);

关于c# - 我怎么知道方法不是从基类C#派生的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53470157/

10-13 00:00