是否可以知道属于某个类或其父类的属性

时间:2013-07-30 15:07:40

标签: c# reflection

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

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

  Type type = typeof(Child);

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

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

2 个答案:

答案 0 :(得分:1)

您可以查看属性信息的DeclaringType值,看看它是否与Child类型匹配。如果它不匹配,那么你知道它是在父母身上宣布的。

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

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

或者,您可以使用overload of GetProperty检索在Child类型上声明的属性:

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

bool declaredByParentClass = dateTimeProperty == null;

如果您只是想检查它是否从父类声明,您可以使用第二种方法。但是,我怀疑你会想要对该属性做一些事情,即使它是在父元素上声明的,如果是这样,你会想要使用第一种方法来避免使用不同的绑定标志两次检索属性。

答案 1 :(得分:0)

您可以使用反射。如果您手中有Type的实例,并且想要查看该类型上仅 的属性,则可以使用绑定标记BindingFlags.DeclaredOnly

  

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