C# C接口继承
鉴于: 原因: ? 我想说清楚:C# C接口继承,c#,reflection,inheritance,interface,C#,Reflection,Inheritance,Interface,鉴于: 原因: ? 我想说清楚: typeof(IB).GetMethods().Count() == 0; 是否工作,它返回5 作为奖励: public class A { public void TestMethod() { } } public class B : A { } typeof(B).GetMethods().Count(); 您必须在GetMethods中定义一些Bindingflags 试一试 这似乎是GetMethods函数的设计。它不支持
typeof(IB).GetMethods().Count() == 0;
是否工作,它返回5
作为奖励:
public class A
{
public void TestMethod()
{
}
}
public class B : A
{
}
typeof(B).GetMethods().Count();
您必须在GetMethods中定义一些Bindingflags 试一试
这似乎是GetMethods函数的设计。它不支持接口中的继承成员。如果要发现所有方法,需要直接查询每个接口类型
查看的社区内容部分。以下是获取IA和IB计数的代码:
typeof(IB).GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy).Count();
请注意,在生产代码中,我不会使用GetInterfaces[0],因为在我使用它的代码中,我不能假设我总是至少有一个接口
我还尝试了bindingflags,如下所示:
var ibCount = typeof(IB).GetMethods().Count(); // returns 0
var iaCount = typeof (IB).GetInterfaces()[0].GetMethods().Count(); // return 1
然而,这仍然会返回0,因为接口IB仍然没有实现方法TestMethod。接口IA有。如果IA和IB都是类,那么使用绑定标志就可以了。但是,在这种情况下,返回值为5。不要忘记IA隐式派生自类对象 将IA视为IB的接口,而不是其基础。我使用了BindingFlags,因为它们没有帮助;。绑定标志在这种情况下没有帮助。当涉及到课程时,他们会很有帮助。谢谢你的回答。我知道我可以迭代接口并从中获取方法。我的问题是为什么我不能那样做。
typeof(IB).GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy).Count();
var ibCount = typeof(IB).GetMethods().Count(); // returns 0
var iaCount = typeof (IB).GetInterfaces()[0].GetMethods().Count(); // return 1
const BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.FlattenHierarchy;
var ibCount = typeof(IB).GetMethods(bindingFlags).Count();