Given:
public interface IA
{
void TestMethod();
}
public interface IB : IA
{
}
Why:
typeof(IB).GetMethods().Count() == 0;
?
Just to be clear:
public class A
{
public void TestMethod()
{
}
}
public class B : A
{
}
typeof(B).GetMethods().Count();
does work (it returns 5);
As a bonus:
typeof(IB).BaseType == null
Here is the code for getting the counts for both IA and IB:
var ibCount = typeof(IB).GetMethods().Count(); // returns 0
var iaCount = typeof (IB).GetInterfaces()[0].GetMethods().Count(); // return 1
Note that in production code I wouldn't use GetInterfaces()[0]
as typically in the code where I would use this I can't assume that I will always have at least one interface.
I also tried out the bindingflags as follows:
const BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.FlattenHierarchy;
var ibCount = typeof(IB).GetMethods(bindingFlags).Count();
However, this will still return 0 as interface IB
still doesn't implement method TestMethod()
. Interface IA
does. Using binding flags would work if both IA
and IB
were classes. In that case however, you get a return value of 5. Don't forget that IA implicitly derives from class Object
!
This seems to be the design of the GetMethods function. It doesn't support inherited members in interfaces. If you want to discover all the methods, you need to query each interface type directly.
Check out the community content section of this MSDN article.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With