我有一个继承自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);
}
}
}
知道我犯了哪个错误吗?感谢任何帮助!
答案 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
所以现在你已经覆盖了基类的值。