可能重复:
How does reflection tell me when a property is hiding an inherited member with the 'new' keyword?
使用反射如何判断属性是否正在影响另一个属性?我正在研究一些代码生成,我需要这些信息来正确调用所述属性。
〔实施例:
class A{
int Foo {get;set;}
}
class B:A{
string new Foo {get;set;}
}
代码我需要生成:
someB.Foo = "";
((A)someB).Foo = 0;
答案 0 :(得分:2)
副本中没有任何答案被标记为正确,所以我复制了一个在经过小修改后似乎正常工作的答案。
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;
}