覆盖C#中基类的属性值

时间:2018-03-28 02:02:53

标签: c# properties override

我有一个继承自B类的A类,B类有一个像这样的属性

public configObject config
{
    get
    {
        var config = new configObject
        {
            property1 = value1
            property2 = value2;
            property3 = null
            property4 = false;
        };

        return config;
    }

    set { this.config = value; }
}

在A类中,我试图覆盖this.config的某些字段的值,但由于某种原因,值没有通过A

中的赋值获得更新
Public class A: B
{
    public A()
    {
    }

    public configJson
    {
         get
            {
                this.config.property2 = newValue2;
                this.config.property3 = newValue;
                this.config.property4 = true;
                return this.SerializeConfiguration(this.config);
            }
    }
}

知道我犯了哪个错误吗?感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

TLDR:最好的选择是重写B类的get方法以重复使用相同的对象,而不是每次都重新创建它。

这是由父类的get方法引起的。如果你这样做,你可以在子类中解决这个问题:

public configJson
{
     get
        {
            configObject cfg = new configObject();
            cfg.property1 = this.config.property1;
            cfg.property2 = newValue2;
            cfg.property3 = newValue;
            cfg.property4 = true;
            return this.SerializeConfiguration(cfg);
        }
}

以下是问题的原因:

每次使用this.config时,都会调用:

get
{
    var config = new configObject
    {
        property1 = value1
        property2 = value2;
        property3 = null
        property4 = false;
    };

    return config;
}

这意味着每次都会重新创建对象。

我建议您重写父类,这样就不会在get方法中实例化这些值。

快速做到这一点的方法是:

class B {
    private configObject cfg;
    public configObject config {
        get {
             if (cfg == null)
                 cfg = new configObject
                 {
                     property1 = value1
                     property2 = value2;
                     property3 = null
                     property4 = false;
                 };

                 return cfg;
             }
         set { cfg = value; }
}

答案 1 :(得分:0)

您可以使用<input type="file" (change)="loadFile($event)" /> 运算符覆盖属性。假设您有课程new

B

并使用public class B { public configObject config { get { var config = new configObject { property1 = value1 property2 = value2; property3 = null property4 = false; }; return config; } set { this.config = value; } //This is actually a StackOverflow error! } } 覆盖该内容:

A

所以现在你已经覆盖了基类的值。