我有界面
public interface ITest
{
Task<bool> MyMethod1<T>(string key, out T value);
Task<bool> MyMethod2<T>(string key, out T value);
}
他们实施
public class TestImpl : ITest
{
public Task<bool> MyMethod1<T>(string key, out T value) // Implements interface
{
// Skipped
}
public Task<bool> MyMethod1<T>(string key, T value) // Does not implements interface
{
// Skipped
}
public Task<bool> MyMethod2<T>(string key, out T value) // Implements interface
{
// Skipped
}
public Task<bool> MyMethod2<T>(string key, T value) // Does not implements interface
{
// Skipped
}
}
我需要检查MethodInfo的指定实例是ITest接口的方法实现。
例如:
void DoWork(MethodInfo methodInfo)
{
if (...) // Check methodInfo is implementation of any method declared in ITest interface
{
/* Do something */
}
}
怎么做?
答案 0 :(得分:1)
我有一个想法,但我不知道它是否适合你的情况
为什么你没有得到实现的类型the class
,然后你得到你感兴趣的接口名称nameof(ITest)
,然后你遍历这个接口的所有方法,由类似如下:
foreach(var methodInfo in typeof(TestImpl).GetInterface(nameof(ITest)).GetMethods())
{
}
这是一个非常简单的想法,事实上你没有在foreach
循环中对接口名称进行硬编码,这也很好。
如果它不适合您的情况,请考虑在您的问题中添加更多详细信息,以便我可以考虑不同的想法并编辑此答案,或者有人可以帮助您。
的修改
或者您可以通过属性ReflectedType
获取具体的类类型,然后您可以获得反射映射&#39;使用GetInterfaceMap
方法基于特定接口类型的此类方法,此方法将返回在此具体类类型中为此接口类型实现的方法,然后您可以简单地使用方法{{1}根据您的要求检查特定的Contains
实例。希望这对你有帮助。
MethodInfo
答案 1 :(得分:0)
您可以使用GetInterfaceMap:
var testImpl = new TestImpl();
var interfaceTargeMethods = testImpl.GetType().GetInterfaceMap(typeof(ITest)).TargetMethods;
foreach (var methodInfo in testImpl.GetType().GetMethods())
{
if (interfaceTargeMethods.Contains(methodInfo))
{
// do something...
}
}