如何在构造类时使字段的值默认为某些值
本文关键字:默认 字段 | 更新日期: 2023-09-27 18:19:00
我有以下类:
public abstract class AuditableTable : TableServiceEntity, IAuditableTable
{
protected AuditableTable()
: base()
{
Status = "3";
}
protected AuditableTable(string pk, string rk)
: base(pk, rk)
{
}
public string Status { get; set; }
是否有一个简单的方法,我可以使状态的值总是默认为"3",当一个新的实例被创建?大多数人使用的是什么方式?
我添加了一个setter,但是如果调用另一个构造函数,它将不会设置
不要使用自动实现的属性。声明一个具有初始值的私有字段
private int _status=3;
public int Status
{
get { return _status;}
set {_status=value;}
}
编辑:在构造函数中分配属性值是很好的做法,但如果该类有多个构造函数,我认为在声明时初始化成员会很好。
protected AuditableTable() { // no need to use : base(), it is called implicitly
Status = 3;
}
您可以在构造函数中这样做。这就是它们的用处。
public abstract class AuditableTable : TableServiceEntity, IAuditableTable
{
protected AuditableTable()
: base()
{
InitFields();
}
protected AuditableTable(string pk, string rk)
: base(pk, rk)
{
InitFields();
}
private InitFields()
{
Status = "3";
}
public string Status { get; set; }
}
更新:
当你更新了问题,你也可以看看这个答案来重新安排你的构造函数
这通常是通过链接构造函数完成的。每个构造函数都通过一个公共构造函数调用"up"。例如:
public class MyThing : MyBaseThing
{
public MyThing()
: this(null, null)
{
}
public MyThing(string pk, string rk)
: base(pk, rk)
{
Status = "3";
}
public string Status { get; set; }
}
如果可以链接构造函数,效果会很好。但有时你会有不能链接的构造函数。如果是这种情况,那么请确保每个"叶子"构造函数调用某种类型的私有Init()
方法,该方法执行公共初始化。当你有一个readonly
字段时,这有时是一件令人头疼的事情,因为readonly
字段只能在构造函数中修改——而不能在构造函数调用的方法中修改。
已删除的回答建议使用带有显式支持字段的属性,而不是使用自动实现的属性。这是一件完全合理的事情,尽管有负面评论。当然,它不像自动实现的属性那么漂亮,但它非常有效。这是我们在拥有自动实现属性之前所做的,如果你真的需要一个属性的默认值,没有理由不这样做。如果您看不到已删除的答案:
public class MyThing : MyBaseThing
{
private string _status = "3";
public string Status
{
get { return _status; }
set { _status = value; }
}
// constructors go here.
}