我有一个定义如下的类
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/