나는 XNA에 대한 자습서를 통과하고, 그것은이 코드를 사용로직이 관련되지 않은 경우 왜 속성을 사용합니까?
private int score = 0;
public int Score
{
get { return score; }
set { score = value; }
}
속성을 사용하는 점은 무엇입니까? 왜 public int Score = 0;
을 사용하지 않는 것이 좋을까요?
나는 XNA에 대한 자습서를 통과하고, 그것은이 코드를 사용로직이 관련되지 않은 경우 왜 속성을 사용합니까?
private int score = 0;
public int Score
{
get { return score; }
set { score = value; }
}
속성을 사용하는 점은 무엇입니까? 왜 public int Score = 0;
을 사용하지 않는 것이 좋을까요?
: 그것은 점수 ;-)
을 설정할 수있는 사람을 제한하기 때문에 그것은 아마도 더 나은 실제로 "적은 입력과 같은 일"이다 (그러나 같은public int Score { get; protected set; }
을 속성에 대한
몇 가지 이유 (이상 공공 멤버 변수) :
속성이 게터에 대한 가시성을 설정 허용 설정 ter를 개별적으로 표시합니다.
속성은 인터페이스에서 지정할 수 있습니다. (당신은 바로 ... 인터페이스에 대한 프로그램입니다 ;-) 속성 및 멤버 변수 ABI의 (응용 프로그램 바이너리 인터페이스 나누기 사이
스위칭 : 예에 대한 재 컴파일이 필요합니다). 그러나 기존 속성의 구현은 ABI를 위반하지 않고 다시 정의 할 수 있습니다.
속성에 중단 점을 설정할 수 있습니다. 때때로 아주 편리합니다. 당신이 구현 세부 사항을 노출 필드는 공공 만듦으로써
"캡슐화"
. 미래에 "득점"은 반환 될 단순한 값이 아니라 계산 결과이므로 추상 "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.
가장 큰 이유는 논리를 포함하는 리팩토링의 용이성을위한 것입니다. 필드에서 속성으로 변경하면 get 및 set 접근자가 실제로 메서드이기 때문에 참조하는 어셈블리에서 다시 컴파일해야합니다. pst의 주석에서 알 수 있듯이 get 및 set에 다른 액세스 한정자 (예 : protected set
)를 지정할 수도 있습니다. 자동 속성을 사용하면 일반적으로 속성 대신 필드를 사용하는 것이 거의 없습니다 (가독성 또는 기타 이유로).
미래에 논리를 추가해야하는 경우 공개 입력란을 통해 자동 속성을 사용해야합니다. –
@ ryansworld10 I * never * (글쎄, 아마도 한 번은 ... ;-) Public Member Variables를 사용했습니다. 그래서 노출면을 더 잘 제어 할 수 있습니다. 데이터를 내부적으로 이름을 변경하거나 할 때 중요하지 않습니다. 표면은 동일하게 유지됩니다. 리팩토링이 훨씬 쉬워졌습니다. –