2011-02-07 3 views
15

가능한 중복 :
Why use getters and setters?
C# 3.0 Auto-Properties - useful or not?C#을 게터, 세터 선언

속성을 다음과 같이 정의 사이에 차이가 있습니다 - 지금까지와 같은

// private, with getter & setter 
private string fName; 
public string Name 
{ 
    get { return this.fName } 
    set { this.fName = value } 
} 

// define as a Property 
public string Name { get; set;} 

가 나는 말할 수있다, 그것은 단지 loo 다. k는 문체 선호도와 같습니다. 내가 놓친 게 있니?

+0

사실상이 질문은 여러 번 전에 물어 보았습니다. – ChrisF

+0

@ChrisF 확실히 속마귀지만, 당신이 가지고있는 것은 옳은 복제품이라고 생각하지 않습니다. –

+0

@ 대니얼 - 제가 발견 한 첫 번째 것이었고, 시스템이 여러 가능한 복제본을 허용하기 때문에 실제로는 문제가 아닙니다. – ChrisF

답변

26

차이 :

  • (심지어 같은 클래스에서) 코드를 단지 C# 3 컴파일러로 컴파일 이상
  • 이 두 번째 형태는 허용하지 않습니다 두 번째 형태의 액세스 실제 필드는 "말할 수없는 이름"을 가지고 있기 때문에 필드를 직접 입력 할 수 있습니다.

두 번째 버전은 자동으로 으로 알려져 있습니다 mplemented 속성 (또는 간단히 "자동 속성"). C# 3에 도입되었습니다. 첫 번째 버전처럼 보이는 코드 만 작성하는 경우 (즉, 로직이 포함되지 않은 경우) 자동 속성이 우수합니다. 나중에 언제든지 첫 번째 형식으로 변환하여 논리를 추가 할 수 있습니다. 모든 코드는 소스 및 바이너리 호환성 측면에서 해당 변경 사항과 호환됩니다.

자동 속성 이 아니기 때문에 기본값을 지정할 수 있으며 실제로 읽기 전용 인 자동 속성 (예 : 가져 오기 도구가없는 속성)은 없습니다. 가장 가까운 곳은 개인 설정 도구가있는 공용 getter입니다.

public string Name { get; private set; } 

많은 상황에서 충분히 유사하지는 않습니다.

+3

또는 짧은 "자동 속성";) –

0

궁극적으로,이 인스턴스에서는 동일한 것으로 작동합니다. 차이점은 get/setting에 규칙을 적용하고자 할 때입니다.이 경우 개인/보호 된 변수를 사용하고 공용 속성 뒤에 숨길 필요가 있습니다.

2

첫 번째 것은 표준 속성입니다. 값을 저장하는 필드를 정의해야합니다. 두 번째 필드는 auto-implemented property이며 C# 3.0 이상에서만 사용할 수 있습니다.

0

아니요 사실, 짧은 버전 (public string Name { get; set; })을 사용하면 컴파일러에서 속성의 개인 필드를 자동으로 생성합니다.