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