c # Как определить, есть ли у конкретного метода перегруженные версии? - PullRequest
0 голосов
/ 26 августа 2018

Мне просто нужно знать, есть ли умный способ определить, есть ли у конкретного метода типа перегрузки или нет.

В данный момент я перебираю методы и ищу DeclaringType+Name неоднозначность ...но я думаю, что это немного отстойно:)

1 Ответ

0 голосов
/ 26 августа 2018

Перегрузка - это то, что происходит, когда у вас есть два метода с одинаковым именем, но разными сигнатурами.

Так что, если мы можем, метод равен override проверкой имени метода, не болееone.

Я бы создал метод расширения IsOverloads, чтобы сделать его.

, используя метод IsOverloads, необходимо указать как минимум два параметра

  1. класс Type.
  2. проверка имени метода

Использование отражения для получения информации о методе из класса, а затем проверка имени метода больше единицы означает, что метод перегружен.

public static class Ext {
    public static bool IsOverloads(this Type type,string methodName)
    {
        return IsOverloads(type, methodName, BindingFlags.Public | BindingFlags.Instance);
    }

    public static bool IsOverloads(this Type type, 
                                   string methodName, 
                                   BindingFlags flags)
    {
        var info = type.GetMethods(flags);
        return info.Where(o1 => o1.Name == methodName).Count() > 1;
    }
}

Вот простой

public class Program
{        
    public void Test() { }  
    public void Test(int a) { }
    public void TestNo(int a) { }

    public static void Main()
    {  

        Console.WriteLine(typeof(Program).IsOverloads("Test")); //True

        Console.WriteLine(typeof(Program).IsOverloads("TestNo")); //false
    }
}

c # онлайн

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...