c# - 具有不同返回类型的重载函数缺少 MethodInfo

标签 c# reflection

我有一个定义如下的类

interface ITest   
{  
   List<T> Find<T>(int i);   
}

class Test: ITest  
{  
    public T List<T> Find<T>(int i) { return default(T); }  
    List<T> ITest.Find<T>(int i) { return null; }  
}

当我使用 typeof(Test).GetMethods()(有和没有适当的 BindingFlags)时,我没有得到 ITest.Find 函数的 MethodInfo。获取缺失方法的 MethodInfo 的最佳方法是什么?

谢谢

最佳答案

我认为您指的是第一个 Find 方法的以下签名:

public T Find<T>(int i) { return default(T); }

(您现有的声明无法编译;它有两个 返回类型)

我认为您的问题是默认情况下,GetMethods 不会返回显式实现的接口(interface)方法,这些方法是私有(private)的。但是,它应该可以与这些 BindingFlags 一起正常工作:

BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance

如果您希望这两个Find 方法(而不是任何继承的方法),也可以添加一个BindingFlags.DeclaredOnly

例如

static void Main(string[] args)
{
    var flags = BindingFlags.NonPublic | BindingFlags.Public |
                BindingFlags.Instance  | BindingFlags.DeclaredOnly;

    foreach(var method in typeof(Test).GetMethods(flags))
         Console.WriteLine(method);
}

输出:

T Find[T](Int32)
System.Collections.Generic.List`1[T] Program.ITest.Find[T](Int32)

关于c# - 具有不同返回类型的重载函数缺少 MethodInfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4696208/

相关文章:

c# - 如何跳出 IF 语句

c# - 谷歌地图上的移动位置跟踪

c# - 如何创建列表<编译时未知类型>并通过 System.Reflection.PropertyInfo 复制项目

c# - 在程序集中搜索类型

java - 使用 Javassist 动态添加 Lombok 注释

java - 意外的 "transient"构造函数修饰符

java - 我如何只获得带有反射的可实例化类

c# - 检查共享网络驱动器上的文件是否可访问

c# - 带日期时间选择器的 SQL 语句

c# - 现有图形转换为位图