首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何确定属性是从基类继承的还是在派生中声明的?

如何确定属性是从基类继承的还是在派生中声明的?
EN

Stack Overflow用户
提问于 2013-04-02 00:00:56
回答 2查看 16.2K关注 0票数 21

我有一个从抽象类派生的类。获取派生类的类型时,我想找出哪些属性是从抽象类继承的,哪些属性是在派生类中声明的。

代码语言:javascript
运行
复制
public abstract class BaseMsClass
{
    public string CommonParam { get; set; }
}

public class MsClass : BaseMsClass
{
    public string Id { get; set; }
    public string Name { get; set; }

    public MsClass()
    { }
}

var msClass = new MsClass
{
    Id = "1122",
    Name = "Some name",
    CommonParam = "param of the base class"
};

所以,我想快速找出CommonParam是一个继承的参数,Id,Name是在MsClass中声明的参数。有什么建议吗?

尝试使用声明的仅标志返回空的PropertyInfo数组

代码语言:javascript
运行
复制
Type type = msClass.GetType();
type.GetProperties(System.Reflection.BindingFlags.DeclaredOnly)

-->{System.Reflection.PropertyInfo[0]}

但是,GetProperties()返回继承层次结构的所有属性。

代码语言:javascript
运行
复制
type.GetProperties()

-->{System.Reflection.PropertyInfo[3]}
-->[0]: {System.String Id}
-->[1]: {System.String Name}
-->[2]: {System.String CommonParam}

我错过了什么吗?

EN

Stack Overflow用户

发布于 2013-04-02 00:07:56

您可以根据DeclaringType进行检查,如下所示:

代码语言:javascript
运行
复制
var pros = typeof(MsClass).GetProperties()
                          .Where(p => p.DeclaringType == typeof(MsClass));

要从基类中获取属性,您可以类似地调用:

代码语言:javascript
运行
复制
var pros = typeof(MsClass).GetProperties()
                          .Where(p => p.DeclaringType == typeof(BaseMsClass));
票数 12
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15746854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档