检查给定属性信息是否来自接口的属性实现的正确方法是什么?
有一个类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
答案 0 :(得分:0)
在给定的PropertyInfo
中,您可以使用GetMethod
和SetMethod
属性分别访问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。