2017-09-27 17 views
-1

모범 사례와 성능 (있는 경우)의 컨텍스트에서 C# 6 + 스타일 속성의 속성으로 한 번 설정되거나 계산 된 값을 노출하는 데 더 좋은 방법은 무엇입니까?차이점 => 상수와 {get; } = C#의 상수

나는 같은 일에 desugar 않습니다 expression bodied properties

public string Name => "bob"; 

auto-property initialisation

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

을 비교하는거야? 내 경우에 사용할 문서를 어디서나 찾을 수 없습니다. 이 사실을 이미 알고 있다면 죄송합니다.

+0

슬프게도 중복의 대답은 세트 - 한 번만 값의 구체적인 답변을하지 않습니다, 대답은 아래에있는 내 정확하게 질문에 대한 대답. – Jay

답변

5

주의! 표현식 본문 속성은 호출 할 때마다 식을 실행합니다! 제 대답의 마지막 부분에서 예제를 볼 수 있습니다.

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 
{ 
    get 
    { 
     return new List<string>() {"bob"}; 
    } 
} 

:

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

가 문법 설탕인가를 자동 속성 초기화와하지 않는 경우 :

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

이에 대한 문법 설탕입니다 :

,439,

여기서 알 수 있듯이 목록은 한 번만 초기화됩니다.

Check it out yourself.

+0

잘 넣어 줘서 고마워. 미묘한 것은'{get;} ='뒷받침 필드를 설정합니다 :) – Jay

+0

도와 줘서 기쁩니다 :-) –

3

첫번째는 화살표 함수이고 일정 값을 반환하는 함수로 결과

두 번째는 "값 배면 필드 게터로 결과 자동 속성이다
// 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; 
}