Ahm*_*gdy 9 c# properties c#-6.0
在C#6中初始化属性的以下表达式之间有什么区别:
1.从构造函数初始化的Auto-Property
public class Context1
{
public Context1()
{
this.Items = new List<string>();
}
public List<string> Items { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
2:从支持字段初始化的属性
public class Context2
{
private readonly List<string> items;
public Context2()
{
this.items = new List<string>();
}
public List<string> Items
{
get
{
return this.items;
}
}
}
Run Code Online (Sandbox Code Playgroud)
3:C#6中的Auto-Property新语法
public class Context3
{
public List<string> Items { get; } = new List<string>();
}
Run Code Online (Sandbox Code Playgroud)
4:C#6中的自动属性新语法
public class Context4
{
public List<string> Items => new List<string>();
}
Run Code Online (Sandbox Code Playgroud)
Bol*_*ock 14
清单3是C#6相当于清单2,其中支持字段在引擎盖下提供.
清单4:
public List<string> Items => new List<string>();
Run Code Online (Sandbox Code Playgroud)
相当于:
public List<string> Items { get { return new List<string>(); } }
Run Code Online (Sandbox Code Playgroud)
您可以想象每次访问该属性时都会返回一个新的空列表.
列表2/3和4之间的差异在本问答环节中进一步探讨了一个例子.
清单1只是一个带有getter和private setter的auto属性.它不是一个只读属性,因为您可以将它设置在任何类型的私有成员的任何位置.readonly属性(即getter-only属性)只能在构造函数或属性声明中初始化,就像readonly字段一样.