Ответ 1
Вот код для подсчета как для 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();
Однако это все равно вернет 0, поскольку интерфейс IB
все еще не реализует метод TestMethod()
. Интерфейс IA
делает. Использование флагов привязки будет работать, если оба IA
и IB
являются классами. В этом случае, однако, вы получите возвращаемое значение 5. Не забывайте, что IA неявно вытекает из класса Object
!