Как получить и отфильтровать методы класса?

При вызове метода 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");
  }
}

PlayGround dotnetfiddle.net


Ответы (0 шт):