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



可能重复:
当一个财产隐藏了一个带有';新';关键字?

使用反射,如何判断一个属性是否正在阴影另一个属性?我正在进行一些代码生成,我需要这些信息来正确调用所述属性。

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

相关内容

  • 没有找到相关文章