2012-06-29 7 views
2

내 질문은 "property vs fields"라는 오래된 주제의 일부일 수 있습니다.개인 설정자 또는 개인 필드 및 속성에 대해 자동 구현 속성을 사용하는 것이 좋습니다.

변수가 외부 클래스에 대해 읽기 전용이지만 클래스 내에서 수정해야하는 경우가 있습니다. 나는 두 가지 방법으로 접근 할 수

첫째 :

private Type m_Field; 
public Type MyProperty { get { return m_Field; } } 

둘째 :

public Type MyProperty { get; private set; } 

여러 기사를 읽은 후 (주로 공공 필드 대신 공용 속성을 사용하는 혜택을 적용하는 것이) 내가 그랬어 두 번째 방법이 첫 번째 방법보다 약간의 이점을 가지고 있지만 적은 코드를 작성하면 아이디어를 얻지 못합니다. 나는 어느 것이 프로젝트에서 사용하는 더 나은 실천 (그리고 왜)인지 아니면 단지 개인적인 선택인지에 관심이있다.

아마도이 질문은 SO에 속하지 않으므로 사전에 사과드립니다.

+0

나는 두 번째 것을 진행할 수 있다고 생각한다. – V4Vendetta

답변

2

두 번째 버전은 덜 복잡하지만 덜 유연합니다. 첫 번째 버전을 필요로하고 리팩토링하는 상황에 처할 때까지 두 번째 버전을 사용하는 것이 좋습니다. 변경 사항은 클래스에 로컬이 될 것이므로 너무 걱정하지 마십시오!

일반적으로 코드를 적게 쓰는 것이 좋습니다. 코드가 적을수록 생성하는 버그는 적습니다.

+1

유연성이 떨어지는 예 - 개인 필드에 기본 초기 값을주고 싶다면 처음에만 사용해야한다. – Anchit

+0

두 번째 방법은 어떤면에서 유연성이 떨어 집니까? @Anchit에서는 private 필드와 마찬가지로 생성자에서 기본값을 설정할 수 있습니다. – James

+0

@James, 설정/가져 오기 전에 백업 필드를 사용하여 작업을 수행하려면 백업 필드를 구현해야합니다. 그러나 나중에 쉽게 할 수 있으며 거의 ​​필요하지 않습니다. –

0

디버깅을 위해서는 두 번째가 가장 좋습니다. 그렇지 않으면 필드를 설정 한 각 위치에 구분 기호를 넣어야합니다. 두 번째로 하나의 중단 점을 속성 집합에 추가합니다.

2

두 번째는 꽤 많이 덜 & 깔끔한 코드의 정도로 IMO 항상 두 번째를 사용, 어쨌든 첫 번째로 아래로 컴파일, 같은처럼 보인다.

내가 첫 번째 접근법을 사용하는 유일한 시나리오는 지연적으로 속성을로드하는 경우입니다. 그렇게 내가 더 복잡한 코딩 작업을 수행 할 시간을 사용할 수 있습니다 작성 작기 때문에 개인적으로

private List<string> _items; 
... 

public List<string> Items 
{ 
    get 
    { 
     if (_items == null) 
     { 
      _items = new List<string>(); 
      // load items 
     } 
     return _items; 
    } 
} 
+0

+1, 나는이 모든 시간을 너무! –

+0

이것은 대부분의 사람들에게 마이크로 최적화처럼 보일 수 있지만, 메모리 자원이 제한적인 모바일 장치 용 응용 프로그램을 작성하기 시작할 때 그 역할을합니다. – James

0

나는 두 번째 버전을 선호하는 .... 플러스 내 의견으로는

2

두 번째 버전은 짧은 게으른 개발을 촉진 , 그래서 나는 그것이 보통라고 생각합니다. 예외는 생성자에서 쓰기 액세스 만 발생하는 경우입니다. 그런 다음 필드를 readonly으로 표시 할 수 있으므로 첫 번째 버전을 선호합니다.

관련 문제