2013-05-14 1 views
0

이 간단한 질문이 나를 괴롭히는 동안은 오랜 시간이 지났습니다. 속성을 선언하는 두 가지 형식을 보았습니다. 그리고 나는 무엇이 다른지 궁금해하고있었습니다. 다른 이유 중 하나가 다른 것을 선호하게 만드는 이유가 있습니까?속성 선언의 형식이 더 적절합니까?

1 형태 :

public int Age { get; set; } 

2 형태 :

private int _Age; 
public int Age 
{ 
    get { return _Age; } 
    set { _Age = value; } 
} 

은 항상 두 번째 양식을 사용했고 또한 나는 2 형태에 대한이 MSDN Tutorial 단지 대화를 본 적이, 그래서 ' 여기에 약간 혼란 스럽네요, 어느 것이 더 좋습니까?

답변

2

첫 번째 양식은 상당히 "새로운"형태입니다. 따라서 두 번째 형식을 포함하는 많은 "오래된"코드를 찾을 수 있습니다.

현대 버전의 C#을 사용하면 두 번째 형식을 사용하는 유일한 이유는 getter 또는 setter 내부에 더 많은 논리를 연결하는 것입니다. 예를 들어

: 당신이 재산에 여분의 처리 또는 액세스 제어를 수행하지 않는 경우

private int myPropertyValue; 

public int MyProperty 
{ 
    get 
    { 
     return myPropertyValue; 
    } 
    set 
    { 
     if (value >= 0 && value <= 100) 
     { 
      myPropertyValue = value; 
     } 
     else 
     { 
      // throw exception here. 
     } 
    } 
} 
+0

매우 월 – Mehran

+0

당신은 환영합니다 :) –

+1

명시 적 필드를 사용하는 또 다른 이유입니다 만 너무 읽고 후원 필드를 만들 수있는 읽기 전용 속성 때문에 당신을 감사합니다 - 당신에게 콤 감사 –

1

첫 번째는 괜찮습니다. C# 3에 도입 된 바로 그 방법입니다.

here을 가지고 있습니다.

+0

불변 클래스에 대한 좋은 당신 도움 – Mehran

1

정말 좋아하는 문제입니다. 첫 번째 형식은 문법적인 설탕입니다. 여기서 컴파일러는 두 번째 형식을 생성합니다. 내가 어떤 조작이나 평가를하지 않는다면, 나는 더 짧고 단조롭기 때문에 첫 번째 형태를 선호한다. 하지만 다른 사람들이 지적했듯이, C# 3 이전의 경우에는 두 번째 형식을 수행 할 수 밖에 없습니다.

+0

도움에 감사 Jason, 고맙습니다. – Mehran

1

필드가없는 벙어리 클래스가있는 경우에만 첫 번째 폼을 사용합니다. 즉, 값을 저장하는 것입니다.

따라서 대부분의 경우 두 번째 양식을 사용합니다. 이를 통해 외부 (클래스) 소비자를위한 getter/setter에 유효성 검사 로직을 추가 할 수 있지만 클래스 내부의 메소드에서 필드에 액세스 할 때 너무 많은 유효성 검사가 종종있는 폐쇄 된 생태계에 가깝다는 결론을 내립니다 프로세서 사이클 낭비.

관련 문제