public class Parent
{
public virtual DateTime DateCreated
{
get;
set;
}
}
public class Child:Parent
{
......
}
Type type = typeof(Child);
//PropertyInfo DateTime = type.GetProperty("DateCreated");
有没有办法知道属性“DateCreated”是父属性而不是子属性。
答案 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
上声明的属性,而不是仅继承的属性。