在最佳实践和性能(如果有的话)的上下文中,什么更好地暴露在C#6+样式属性中作为属性设置或计算的值?
我正在比较表达身体的属性
public string Name => "bob";
Run Code Online (Sandbox Code Playgroud)
public string Name { get; } = "bob";
Run Code Online (Sandbox Code Playgroud)
对同样的事情有害吗?我在文档中的任何地方都找不到哪个用于我的案例.如果在SO中已经涵盖了这一点,我很抱歉,搜索让我无处可去.
谨防!表达式bodied属性将在每次调用时执行表达式!您可以在我的答案的最后部分看到示例.
public string Name => "bob";
Run Code Online (Sandbox Code Playgroud)
是语法糖
public string Name
{
get
{
return "bob";
}
}
Run Code Online (Sandbox Code Playgroud)
而
public string Name { get; } = "bob";
Run Code Online (Sandbox Code Playgroud)
是语法糖
private readonly string _name = "bob";
public string Name
{
get
{
return _name ;
}
}
Run Code Online (Sandbox Code Playgroud)
当心 - 这是危险的部分!
请注意,每次调用此属性时都将执行表达式主体.当它返回一个硬编码值时很好,但是如果它返回一个列表,例如,它每次都会返回一个新列表:
public List<String> Names => new List<String>() {"bob"};
Run Code Online (Sandbox Code Playgroud)
语法糖是:
public List<string> Names
{
get
{
return new List<string>() {"bob"};
}
}
Run Code Online (Sandbox Code Playgroud)
自动属性初始化不是这种情况:
public List<String> Names { get; } = new List<String>() {"bob"};
Run Code Online (Sandbox Code Playgroud)
这是语法糖:
private readonly List<string> _names = new List<string>() {"bob"};
public string Names
{
get
{
return _names;
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,此处列表仅初始化一次.
| 归档时间: |
|
| 查看次数: |
139 次 |
| 最近记录: |