我有接口
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 */
}
}
怎么做?
我有一个想法,但我不知道它是否适合你的情况
为什么你没有得到实现的类型,the class
然后你通过它的名字得到你感兴趣的接口nameof(ITest)
,然后你遍历这个接口的所有方法由该类型实现,如下所示:
foreach(var methodInfo in typeof(TestImpl).GetInterface(nameof(ITest)).GetMethods())
{
}
这是一个非常简单的想法,事实上您没有在foreach
循环中对接口名称进行硬编码,这也很好。如果它不适合您的情况,请考虑在您的问题中添加更多详细信息,以便我可以考虑不同的想法并编辑此答案,或者有人可以帮助您。
编辑
或者您可以通过属性获取具体的类类型ReflectedType
,然后您可以根据使用GetInterfaceMap
方法的特定接口类型获取此类型方法的“反射映射”,然后此方法将返回为此接口实现的方法输入这个具体的类类型,然后您可以简单地使用该方法Contains
来检查MethodInfo
您要求的特定实例。希望这对您有所帮助。
static bool IsMethodImplementationOfInterface(Type interfaceType,MethodInfo method)
{
return method.ReflectedType.GetInterfaceMap(interfaceType).TargetMethods.Contains(method);
}
foreach (var methodInfo in typeof(TestImpl).GetMethods())
{
if (IsMethodImplementationOfInterface(typeof(ITest), methodInfo))
{
//Logic
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句