可能重复:
当一个财产隐藏了一个带有';新';关键字?
使用反射,如何判断一个属性是否正在阴影另一个属性?我正在进行一些代码生成,我需要这些信息来正确调用所述属性。
Exmaple:
class A{
int Foo {get;set;}
}
class B:A{
string new Foo {get;set;}
}
我需要生成的代码:
someB.Foo = "";
((A)someB).Foo = 0;
副本中没有任何被标记为正确的答案,所以我复制了一个经过轻微更正后似乎有效的答案。
public static bool IsHidingMember(PropertyInfo self)
{
Type baseType = self.DeclaringType.BaseType;
if (baseType == null)
return false;
PropertyInfo baseProperty = baseType.GetProperty(self.Name);
if (baseProperty == null)
{
return false;
}
if (baseProperty.DeclaringType == self.DeclaringType)
{
return false;
}
var baseMethodDefinition = baseProperty.GetGetMethod().GetBaseDefinition();
var thisMethodDefinition = self.GetGetMethod().GetBaseDefinition();
return baseMethodDefinition.DeclaringType != thisMethodDefinition.DeclaringType;
}