2012-06-22 5 views
1

나는 XNA에 대한 자습서를 통과하고, 그것은이 코드를 사용로직이 관련되지 않은 경우 왜 속성을 사용합니까?

private int score = 0; 

public int Score 
{ 
    get { return score; } 
    set { score = value; } 
} 

속성을 사용하는 점은 무엇입니까? 왜 public int Score = 0;을 사용하지 않는 것이 좋을까요?

난 그냥 여기에 자동 속성을 사용하는 것이

답변

6

: 그것은 점수 ;-)

을 설정할 수있는 사람을 제한하기 때문에 그것은 아마도 더 나은 실제로 "적은 입력과 같은 일"이다 (그러나 같은

public int Score { get; protected set; } 

을 속성에 대한

몇 가지 이유 (이상 공공 멤버 변수) :

  1. 속성이 게터에 대한 가시성을 설정 허용 설정 ter를 개별적으로 표시합니다.

  2. 속성은 인터페이스에서 지정할 수 있습니다. (당신은 바로 ... 인터페이스에 대한 프로그램입니다 ;-) 속성 및 멤버 변수 ABI의 (응용 프로그램 바이너리 인터페이스 나누기 사이

  3. 스위칭 : 예에 대한 재 컴파일이 필요합니다). 그러나 기존 속성의 구현은 ABI를 위반하지 않고 다시 정의 할 수 있습니다.

  4. 속성에 중단 점을 설정할 수 있습니다. 때때로 아주 편리합니다. 당신이 구현 세부 사항을 노출 필드는 공공 만듦으로써

+0

미래에 논리를 추가해야하는 경우 공개 입력란을 통해 자동 속성을 사용해야합니다. –

+3

@ ryansworld10 I * never * (글쎄, 아마도 한 번은 ... ;-) Public Member Variables를 사용했습니다. 그래서 노출면을 더 잘 제어 할 수 있습니다. 데이터를 내부적으로 이름을 변경하거나 할 때 중요하지 않습니다. 표면은 동일하게 유지됩니다. 리팩토링이 훨씬 쉬워졌습니다. –

2

"캡슐화"

. 미래에 "득점"은 반환 될 단순한 값이 아니라 계산 결과이므로 추상 "GetScore"속성 함수 뒤에 숨김으로써 구현의 세부 사항을 자유롭게 변경할 수 있습니다. 깨는 소비자. 당신은 C#을 3.0의 특성을 가진 자동으로 생성 된 필드를 사용할 수 있습니다

참고 :

public int Score { get; set; } // this will create a hidden field, however all access (even from within the class) must be done by the accessor and mutator methods. 
0

가장 큰 이유는 논리를 포함하는 리팩토링의 용이성을위한 것입니다. 필드에서 속성으로 변경하면 get 및 set 접근자가 실제로 메서드이기 때문에 참조하는 어셈블리에서 다시 컴파일해야합니다. pst의 주석에서 알 수 있듯이 get 및 set에 다른 액세스 한정자 (예 : protected set)를 지정할 수도 있습니다. 자동 속성을 사용하면 일반적으로 속성 대신 필드를 사용하는 것이 거의 없습니다 (가독성 또는 기타 이유로).

관련 문제