如何解决初始化 C# 自动属性
更新 - 下面的答案是在 C# 6 出现之前编写的。在 C# 6 中,您可以编写:
public class Foo
{
public string Bar { get; set; } = "bar";
}
您还 可以 编写只读的自动实现的属性,这些属性只能在构造函数中写入(但也可以赋予默认初始值):
public class Foo
{
public string Bar { get; }
public Foo(string bar)
{
Bar = bar;
}
}
不幸的是,现在没有办法做到这一点。您必须在构造函数中设置值。(使用构造函数链接有助于避免重复。)
自动实现的属性现在很方便,但肯定会更好。我发现自己并不希望像只读自动实现的属性那样频繁地进行这种初始化,该属性只能在构造函数中设置并且由只读字段支持。
这在 C# 5 之前(包括 C# 5)并没有发生,但正计划在 C# 6 中进行 - 无论是允许在声明点进行初始化, 还是 允许在构造函数主体中初始化只读自动实现的属性。
解决方法
我习惯于编写这样的类:
public class foo {
private string mBar = "bar";
public string Bar {
get { return mBar; }
set { mBar = value; }
}
//... other methods,no constructor ...
}
将 Bar 转换为自动属性似乎既方便又简洁,但是如何在不添加构造函数并将初始化放入其中的情况下保留初始化呢?
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";