C# Accessor and initialization
本问题已经有最佳答案,请猛点这里访问。
如何将访问器声明和初始化结合起来
1 2 3 |
有没有办法把这些结合到陈述中?
你现在不能。您将能够在C 6中:
1 |
甚至可以在C 6(hooray!)中将其设置为只读属性。:
1 |
在C 5中,您可以使用非自动实现的属性:
1 2 3 | // Obviously you can make this read/write if you want private readonly List<string> countries = new List<string>(); public List<string> Countries { get { return countries; } } |
…或者在构造函数中初始化它:
1 2 3 4 5 6 |
不在同一句话中。但是,您可以在构造函数体中完成它。
可以使用构造函数,也可以创建自定义getter/setter:
构造函数
1 2 3 4 5 6 7 8 9 | public class Foo { public Foo() { listofcountries = new List<string>(); } public List<string> listofcountries { get; set; } } |
自定义getter/setter
1 2 3 4 5 6 7 8 9 10 11 12 13 | private List<string> _listofcountries; public List<string> listofcountries { get { if (_listofcountries == null) { _listofcountries = new List<string>(); } return _listofcountries; } set { _listofcountries = value; } } |
值得一提的是,公约规定公共财产应采用驼色的形式:以东x1(0),而不是以东x1(0)。然后,属性的私有实例变量也将采用驼色大小写,但第一个字母小写:
像往常一样更新双向飞碟。一旦C 6击中,那么他的回答将是最好的方式,手放低。在较小的版本中,您会坚持使用我发布的方法。
仅限于C 6。
我通常喜欢做的是:
1 2 3 4 5 6 7 8 9 10 11 12 13 | private List<string> list; public List<string> List { get { if(list == null) { list = new List<string>(); } return list; } } |