.NET:使用反射如何判断属性是否在遮蔽另一个属性?

时间:2011-06-30 22:18:09

标签: .net reflection

  

可能重复:
  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;

1 个答案:

答案 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;
    }