Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#如何检测特定方法是否重载了版本?_C#_Reflection - Fatal编程技术网

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

c#如何检测特定方法是否重载了版本?,c#,reflection,C#,Reflection,我只需要知道是否有一种智能的方法来检测特定类型的方法是否有重载 目前,我正在迭代方法并搜索DeclaringType+Name歧义性…但我认为这有点蹩脚:) 重载是指当您有两个名称相同但签名不同的方法时发生的情况 因此,如果我们可以通过检查方法名是否不止一个来覆盖方法 我将创建一个扩展方法IsOverloads,使之成为一个新的扩展方法 使用IsOverloads方法需要提供至少两个参数 类类型 检查方法名称 使用反射从类中获取方法信息,然后检查方法名称是否大于1表示方法过载 public st

我只需要知道是否有一种智能的方法来检测特定类型的方法是否有重载

目前,我正在迭代方法并搜索
DeclaringType+Name
歧义性…但我认为这有点蹩脚:)

重载是指当您有两个名称相同但签名不同的方法时发生的情况

因此,如果我们可以通过检查方法名是否不止一个来覆盖方法

我将创建一个扩展方法
IsOverloads
,使之成为一个新的扩展方法

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

  • 类型
  • 检查方法名称
  • 使用反射从类中获取方法信息,然后检查方法名称是否大于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
        }
    }
    

    我认为OP要求的是重载,而不是重写。请注意,这只适用于可公开访问的方法,这在原始问题的范围内可能还可以。@D-Shih我想唯一的方法是计算同名的方法?没有绑定标志或标记?不确定这是否是您要找的,但是,您可以使用VisualStudio中的对象浏览器仔细查看对象及其签名。