2010-07-08 3 views
4

개인 변수에 직접 액세스하지 않고 개체의 속성을 정의하면 어떤 이점이 있습니까? 대신Public 속성 정의

:

public class A 

    private _x as integer = 0 

    Public property X() as integer 
     Get 
      return _x 

     End Get 
     Set(ByVal value As integer) 
      _x = value 
     End Set 
    End Property 

end class 

우리는 다음을 수행 할 수없는 이유 :

public class A 

    public _x as integer = 0 

end class 

이점은 무엇입니까

?

+1

가능한 중복 항목 : http://stackoverflow.com/questions/1272521/propertywith-no-extra-processing-vs-public-field, http://stackoverflow.com/questions/1180860/c-public-fields- 대 자동 속성, http://stackoverflow.com/questions/111461/auto-implemented-getters-and-setters-vs-public-fields, http://stackoverflow.com/questions/1277572/should-i- public-properties-and-private-fields-or-public-fields-for-data, http://stackoverflow.com/questions/3069901/properties-vs-fields-need-help-grasping-the-uses- of-properties-over-fields 및 더 많은 것. –

+0

:) 그래, 나는 또한 중복을 발견했다 ... 어쨌든 그것을 가리키는 thnx – KoolKabin

답변

5

하나의 이점은 필드가 아니라 바인딩 목적으로 클래스의 속성을 찾습니다. 따라서 _x 필드를 직접 노출하면 왜 프레임 워크가 예상대로 값을 설정하지 않는지 궁금해 할 때 약간의 두통이 발생할 것입니다.

또한 캡슐화로 인해 호출 코드가 필드와 상호 작용할 때 발생할 수있는 것을 변경할 수 있습니다. 속성 getter/setter 뒤에 필드를 숨기면 값이 변경 될 때 트리거링, 다른 내부 상태를 업데이트하거나 구현을 완전히 변경하여 자식 객체에 대한 래핑 호출과 같은 추가 작업을 수행 할 수 있습니다.

+0

+1 이것은 VB6가 틀림없이 .Net보다 나은 점 중 하나이다. VB6에서 직접 노출 된 필드는 속성과 똑같이 작동합니다. 나중에 비헤이비어를 추가해야하는 경우 필드를 속성으로 변경할 수 있으며 아무 것도 중단되지 않습니다. 필드와 속성의 차이점은 왜 우리는 자동으로 구현 된 clunky 속성을 가지고 있는지입니다. – MarkJ

1

주된 이유는 나중에 ABI (응용 프로그램 바이너리 인터페이스)를 변경하지 않고 동작 (로깅, 유효성 검사, 데이터베이스 백엔드 등)을 속성에 추가 할 수 있다는 것입니다. 필드로 정의한 다음 비헤이비어를 추가하려면 속성 (또는 메소드)으로 변경해야합니다. 둘 중 하나는 다른 코드를 재 컴파일해야한다.