检查PropertyInfo是否是接口实现

时间:2017-09-19 06:59:18

标签: c# reflection

检查给定属性信息是否来自接口的属性实现的正确方法是什么?

有一个类ERROR: syntax error at or near "KEY" ERROR: syntax error at or near "UNLOCK" ERROR: syntax error at or near "(" invalid command \n invalid command \'></script> invalid command \";s:2: invalid command \', invalid command \'] Query buffer reset (cleared). 可以解决方法的这个问题。但是对于属性,它为getter和setter提供了两个单独的映射,并且仍然存在与使用相应接口方法匹配的问题。

InterfaceMap

1 个答案:

答案 0 :(得分:0)

在给定的PropertyInfo中,您可以使用GetMethodSetMethod属性分别访问getter和setter的MethodInfo

因此,应该可以使用一些辅助方法进行比较:

select cw.*, t.configuration
from (select c.fiscalweek, c.fiscalyear, min(c.fiscaldate) as weekstart
      from calendar c
      group by c.fiscalweek, c.fiscalyear
     ) cw cross apply
     (select top (1) with ties t.*
      from template t
      where t.effectivedate <= cs.weekstart
      order by t.effectivedate desc
     ) t;

然后可以按如下所示使用它来实现所需的方法:

private static bool MethodsImplements(InterfaceMap interfaceMap,
    MethodInfo interfaceMethod, MethodInfo classMethod)
{
    var implIndex = Array.IndexOf(interfaceMap.InterfaceMethods, interfaceMethod);
    return interfaceMethod == interfaceMap.TargetMethods[implIndex];
}

然后,返回var interfaceType = interfaceProperty.DeclaringType; var interfaceMap = classProperty.DeclaringType.GetInterfaceMap(interfaceType); var gettersMatch = classProperty.CanRead && interfaceProperty.CanRead && MethodImplements(interfaceMap, interfaceProperty.GetMethod, classProperty.GetMethod); var settersMatch = classProperty.CanWrite && interfaceProperty.CanWrite && MethodImplements(interfaceMap, interfaceProperty.SetMethod, classProperty.SetMethod); ,因为interface属性可能只有一个getter或只有一个setter。