Как я узнаю, что метод не был получен из базовых классов C # - PullRequest
0 голосов
/ 25 ноября 2018

Учитывая этот фрагмент кода, как узнать, используя переменную "i", что метод не был получен из базовых классов, но он был объявлен в наиболее преуменьшенном классе?Например, мне не нужны никакие методы GetType (), ToString () и т. Д. Для печати. ​​

MethodInfo[] methods = Type.GetType(
            "Probabilities_Theory.ProbabilitiesTheory").GetMethods();

foreach (var i in methods)
{
    if (!i.IsVirtual) // another condition needed
        Console.WriteLine(i);
}

Мне не нужно знать, был ли он переопределен или нет, потому чтонапример, метод GetType () не является виртуальным по этой причине.Но я все еще не хочу, чтобы GetType () печатался примерно.

Что характерно для GetType () и других виртуальных методов, так это то, что все они не были объявлены в самом низкокачественном классе.

Я мог бы сделать это следующим образом:

if (i.DeclaringType == typeof(ProbabilitiesTheory))
    Console.WriteLine(i);

Но я хочу, чтобы мой код был более автоматическим, более программным и прочим.Как будто никто не знает, какой это тип.

1 Ответ

0 голосов
/ 25 ноября 2018

Попробуйте с BindingFlags.DeclaredOnly:

MethodInfo[] methods = Type.GetType("Probabilities_Theory.ProbabilitiesTheory")
                           .GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
...