2
public class Parent
{
    public virtual DateTime DateCreated
    {
      get;
      set;
    }
}

public class Child:Parent
{
......
}

  Type type = typeof(Child);

 //PropertyInfo DateTime = type.GetProperty("DateCreated"); 

有没有办法知道属性“DateCreated”是父属性而不是子属性。

4

2 回答 2

1

您可以检查属性信息的DeclaringType值,看看它是否与 type 匹配Child。如果它不匹配,那么你知道它是在父级上声明的。

Type type = typeof(Child);
PropertyInfo dateTimeProperty = type.GetProperty("DateCreated"); 

bool declaredByParentClass = dateTimeProperty.DeclaringType != typeof(Child);

或者,您可以使用重载GetProperty来检索在 type 上声明的属性Child

Type type = typeof(Child);
PropertyInfo dateTimeProperty = type.GetProperty("DateCreated", BindingFlags.DeclaredOnly | BindingFlags.Public);

bool declaredByParentClass = dateTimeProperty == null;

如果您只是想检查它是否是从父类声明的,您可以使用第二种方法。但是,我怀疑即使在父级上声明了该属性,您也会想对该属性执行某些操作,如果是这样,您将希望使用第一种方法来避免使用不同的绑定标志两次检索该属性。

于 2013-07-30T15:13:55.323 回答
0

您可以使用反射。当您手头有一个 的实例Type并且想要查看在该类型上声明的属性时,可以使用绑定标志BindingFlags.DeclaredOnly

BindingFlags.DeclaredOnly仅搜索在 上声明的Type属性,而不是简单继承的属性。

于 2013-07-30T15:15:43.117 回答