我只需要知道是否有一种聪明的方法来检测特定的Type方法是否具有重载。
此刻,我正在遍历方法并搜索DeclaringType+Name
的歧义...但是我认为这有点la脚:)
答案 0 :(得分:1)
当您有两个名称相同但签名不同的方法时,就会发生重载。
因此,如果可以的话,请检查方法名称是否为override
。
我将创建扩展方法IsOverloads
来实现。
使用IsOverloads
方法需要提供至少两个参数
Type
。 使用反射从类中获取方法信息,然后检查方法名称大于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
}
}