在父构造函数中获取子类属性

时间:2011-12-13 11:36:59

标签: c#

class A
{
    public string PropA {set; get;}

    public A()
    {
        var props = this.GetType().GetProperties(BindingFlags.Public);
    }
}


class B : A
{
    public string PropB {set; get;}
}

var b = new B();

调用A构造函数时,变量props仅包含PropA。可以获取所有属性(PropAPropB)?

5 个答案:

答案 0 :(得分:2)

这个适用于我:

var props = this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);

答案 1 :(得分:0)

Parent类(你已经定义了构造函数)对它的子类知之甚少,这就是为什么它只返回PropA 如果在B类中定义约束器,它将返回两个属性

答案 2 :(得分:0)

基类A的构造函数在派生类B的构造函数之前运行,因此您无法访问派生类的属性。

BTW:这对我来说没有意义,基类知道派生类!

答案 3 :(得分:0)

你可以这样做:

class A
{
    public string PropA {set; get;}

    public A()
    {
    }

    protected virtual PropertyInfo[] GetProperties()
    {
        return this.GetType().GetProperties(BindingFlags.Public);
    } 
}


class B : A
{
    public string PropB {set; get;}

    public B() : base()
    {
    }

    public new PropertyInfo[] GetProperties()
    {
        return this.GetType().GetProperties(BindingFlags.Public);
    }
}

var b = new B();
var prop = b.GetPropeties();

答案 4 :(得分:0)

基类不应该知道它的派生类。它打破了开放封闭原则和利斯科夫替代原则。

您可以使用泛型和虚拟或抽象方法来解决此问题。另外,不要编写自己的O / R Mapper。那里有很多,有些必须满足你的需求!