c#如何检测特定方法是否具有重载版本?

时间:2018-08-26 19:58:24

标签: c# reflection

我只需要知道是否有一种聪明的方法来检测特定的Type方法是否具有重载。

此刻,我正在遍历方法并搜索DeclaringType+Name的歧义...但是我认为这有点la脚:)

1 个答案:

答案 0 :(得分:1)

  

当您有两个名称相同但签名不同的方法时,就会发生重载。

因此,如果可以的话,请检查方法名称是否为override

我将创建扩展方法IsOverloads来实现。

使用IsOverloads方法需要提供至少两个参数

  1. Type
  2. 检查方法名称

使用反射从类中获取方法信息,然后检查方法名称大于1表示该方法过载。

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# online