Как получить и отфильтровать методы класса?
При вызове метода Some(Type), необходимо получить все методы в иерархии класса, кроме текущего - т.е. того который непосредственно вызван.
Ниже комментарий:
using System;
using System.Linq;
using System.Reflection;
public class Program {
public static void Main() {
Foo v1 = new Foo();
IFoo v2 = new Foo();
v1.Some(v2);
v1.Some((Foo)v2);
}
}
public interface IFoo {
public void Some(IFoo value);
}
public class AFoo : IFoo {
public void Some(IFoo value) {
Console.WriteLine("Calling AFoo");
// Так я пытаюсь получить текущий метод
var currentMethod = System.Reflection.MethodBase.GetCurrentMethod();
var allMethods = this.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public);
var methods = (from m in allMethods
where m.Name == "Some" &&
// !!! Вот здесь необходимо отфильтровать текущий метод
currentMethod != m // !currentMethod.Equals(m) - это тоже не помогает
select $"{m.Name}({m.GetParameters()[0].ParameterType.Name})")
.ToArray();
// По факту присутствует текущий метод, а должны остаться только методы производных классов
Console.WriteLine(String.Join(", ", methods)); // Some(Foo), Some(IFoo)
}
}
public class Foo : AFoo, IFoo {
public void Some(Foo value) {
Console.WriteLine("Calling Foo");
}
}