【发布时间】:2018-11-26 02:28:36
【问题描述】:
鉴于这段代码,我如何使用“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);
但我希望我的代码更加自动化,更加程序化。就像一个不知道它是什么类型的一样。
【问题讨论】:
-
听起来可能是 XY 问题meta.stackexchange.com/questions/66377/what-is-the-xy-problem 但对我来说,任何反射的使用都可以。通常你只是通过向下转换类型来解决这个问题。那你就知道了。
-
检查
MethodInfo的属性。应该有一个说明哪种类型声明了该方法。
标签: c# system.reflection