=>常数与{get; } =在C#中恒

问题描述:

在最佳实践和性能(如果有的话)什么是暴露被设置或在C#6+样式属性的属性计算一次,值更好的环境?=>常数与{get; } =在C#中恒

我比较expression bodied properties

public string Name => "bob"; 

auto-property initialisation

public string Name { get; } = "bob"; 

是否desugar以同样的事情?我无法在文档中的任何位置找到用于我的案例的文档。我很抱歉,如果这已经涵盖在SO中,搜索没有让我在哪里。

+0

可悲的是重复的回答不回答一组,一次只值的具体情况,回答以下回答我的问题,准确。 – Jay

当心!表达浓郁属性将执行表达式每次调用时!你可以看到我的回答的最后一部分的例子。

public string Name => "bob"; 

是语法糖

public string Name 
{ 
    get 
    { 
     return "bob"; 
    } 
} 

虽然

public string Name { get; } = "bob"; 

private readonly string _name = "bob"; 

public string Name 
{ 
    get 
    { 
     return _name ; 
    } 
} 

Check it out yourself.

语法糖0

当心 - 这里是危险的一部分!

请注意,表达身体会每次调用这个属性的时间执行。这很好,当它返回一个硬编码值,但如果它返回一个列表,例如,它会每次都返回一个新的列表:

public List<String> Names => new List<String>() {"bob"}; 

是语法糖:

public List<string> Names 
{ 
    get 
    { 
     return new List<string>() {"bob"}; 
    } 
} 

也就是说不自动初始化属性的情况下:

public List<String> Names { get; } = new List<String>() {"bob"}; 

是语法糖这样的:

private readonly List<string> _names = new List<string>() {"bob"}; 

public string Names 
{ 
    get 
    { 
     return _names; 
    } 
} 

正如你可以看到,这里的列表仅初始化一次。

Check it out yourself.

+0

好吧,谢谢。微妙的是'{get;} ='设置后台:) – Jay

+0

很高兴帮助:-) –

第一个是一个箭头功能和结果到返回恒定值的函数:

// syntactic sugar for: 
public string Name { get { return "bob"; } } 

// results into: 
public string get_Name() 
{ 
    return "bob"; 
} 

第二个是一个自动属性,该属性具有值导致成吸气剂与支持字段“鲍勃“:

// results into: 
private string _name = "bob"; 
public string get_Name() 
{ 
    return _name; 
}