我怎么知道方法不是从基类C#派生的

时间:2018-11-25 17:40:52

标签: c# system.reflection

给出这段代码,我如何使用“ 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);

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

1 个答案:

答案 0 :(得分:1)

尝试使用BindingFlags.DeclaredOnly

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