Учитывая метод в C#
, мне нужно найти все методы в подклассах, которые прямо или косвенно переопределяют этот метод.
Например, учитывая следующую архитектуру класса
abstract class A { public abstract void m(); }
class B : A { public override void m(){}; }
class C : A { public override void m(){}; }
class D : C { public override void m(){}; }
class E : C { public override void m(){}; }
class F : E { public override void m(){}; }
class G : C { }
class H : G { public override void m(){}; }
Тогда производные методы C.m
будут такими же, как и у классов D, E, F, H.
Я пришел к следующему решению, которое, кажется, работает нормально, но нахожу его несколько громоздким.Я подозреваю, что есть умный способ сделать это.Есть мысли?
public static IEnumerable<MethodInfo> DerivedMethods(this MethodInfo mi)
{
return mi.DeclaringType.Assembly.GetTypes()
.Where(klass => klass.IsSubclassOf(mi.DeclaringType))
.Select(subclass => subclass.GetMethods(
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
.SingleOrDefault(m => m.GetBaseDefinition() == mi.GetBaseDefinition()))
.Where(x => x != null);
}