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
!