gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 11:41:20 24 4
gpt4 key购买 nike

我有一个定义如下的类

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com