【发布时间】:2008-10-03 22:59:53
【问题描述】:
我习惯于这样写类:
public class foo {
private string mBar = "bar";
public string Bar {
get { return mBar; }
set { mBar = value; }
}
//... other methods, no constructor ...
}
将 Bar 转换为 auto-property 似乎方便简洁,但是如何在不添加构造函数并将初始化放入其中的情况下保留初始化?
public class foo2theRevengeOfFoo {
//private string mBar = "bar";
public string Bar { get; set; }
//... other methods, no constructor ...
//behavior has changed.
}
您可以看到,添加构造函数与我应该从自动属性中获得的工作量节省不一致。
这样的事情对我来说更有意义:
public string Bar { get; set; } = "bar";
【问题讨论】:
-
有什么特别的原因你不想在构造函数中这样做,因为这对我来说似乎很自然。
-
只是因为我以前不必在构造函数中这样做。因此,如果我必须添加构造函数,这不会为我节省任何精力。
-
如果它是 STATIC 私有字符串...怎么办?然后你不想在构造函数中初始化,因为每次创建新对象时都会调用它,而这并不是想要的。 ~~~
-
问题有点老了,不过回复@StevePitchers和dlamblin,你可以创建一个静态构造函数来初始化你的静态属性一次...
-
@GarryShutler,我找到了一个不想在构造函数中初始化属性的正当理由:如果该属性被标记为
virtual并在派生类中被覆盖,它可能需要不同的初始化逻辑。因为基础构造函数中的初始化代码调用属性设置器而不是直接设置支持字段,所以派生类必须避免使用base()构造函数以避免触发默认初始化逻辑。看起来像一个滑坡。
标签: c# initialization automatic-properties