[英]C# interface inheritance
鉴于:
public interface IA
{
void TestMethod();
}
public interface IB : IA
{
}
为什么:
typeof(IB).GetMethods().Count() == 0;
?
只是要清楚:
public class A
{
public void TestMethod()
{
}
}
public class B : A
{
}
typeof(B).GetMethods().Count();
确实有效(返回5);
作为奖励:
typeof(IB).BaseType == null
这是获取IA和IB计数的代码:
var ibCount = typeof(IB).GetMethods().Count(); // returns 0
var iaCount = typeof (IB).GetInterfaces()[0].GetMethods().Count(); // return 1
请注意,在生产代码中,我不会像通常在其中使用它的代码中那样使用GetInterfaces()[0]
,我不能假设我将始终拥有至少一个接口。
我还尝试了绑定标志,如下所示:
const BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.FlattenHierarchy;
var ibCount = typeof(IB).GetMethods(bindingFlags).Count();
但是,由于接口IB
仍未实现方法TestMethod()
,此操作仍将返回0。 接口IA
可以。 如果IA
和IB
均为类,则使用绑定标志将有效。 但是,在那种情况下,您得到的返回值为5。请不要忘记IA隐式派生自Object
类!
这似乎是GetMethods函数的设计。 它不支持接口中的继承成员。 如果要发现所有方法,则需要直接查询每种接口类型。
查看此MSDN文章的社区内容部分。
将IA视为IB的接口,而不是其基础。
您必须在GetMethods()中定义一些Bindingflags。
尝试
typeof(IB).GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy).Count();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.