我有一个基类,其声明如下(为了简洁而进行了修剪):
public abstract class MyBaseClass
{
public int RecordId { get; private set; }
public string ObjectName { get; set; }
public abstract string Status { get; set; }
public GetMyObject(int id)
{
MyObject myObject = context.GetObjectById(id);
this.RecordId = myObject.RecordId;
this.ObjectName = myObject.ObjectName;
this.Status = myObject.Status
}
}
由以下类使用:
public class MySpecificClass : MyBaseClass
{
public override string Status
{
get
{
if(this.Status == "something")
return "some status";
else
return "some other status";
}
set
{
this.Status = value;
}
}
public GetMySpecificObject(int id) : base(id)
{
}
}
现在,当我将特定对象绑定到我的模型时(我的实现恰好是 MVC),如果我只访问 RecordID 和 ObjectName,则对象返回得很好,但如果 get 或 set 访问器到我的 (已覆盖)状态已命中。
我已经在 SO 上发现了类似的问题......
为什么 Property Set 会抛出 StackOverflow 异常? https://stackoverflow.com/questions/367192/new-to-c-why-does-property-set-throw-stackoverflow-exception
...但是根据自动属性实现,我的代码看起来是正确的并且不会创建无限循环(但情况似乎确实如此)。关于如何正确覆盖该属性有什么想法吗?
Thanks!
这就是“设计”。
在 Status 的设置器中,您调用 this.Status = value。 Status 是一个虚拟属性,因此它将直接绑定回 MySpecificClass.Status 的 setter。
如果您想访问基本属性,请使用 base.反而
base.Status = value;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)