문제

나는 대부분의 사람들이 다음과 같은 클래스에서 멤버 변수를 사용하는 것을 보았습니다.

string _foo;
public string foo { get { return _foo; }; private set { _foo = value}; }

그런데 그것과 이것의 차이점은 무엇입니까?

public string foo { get; private set; }
도움이 되었습니까?

해결책

간단한 경우와 같은 간단한 경우 이벤트 또는 무언가를 발생시키는보다 복잡한 사례에서 가져 오기 및 설정에 추가 코드가 필요하므로 멤버 ex가 필요합니다.

private string _name;
public string Name
{
   get{ return _name; }
   set
   {
      SomeHandler("Name", value);
      _name = value;
   }
}
.

다른 팁

속성 구현이 실제로 가져오기 및 설정 외에는 아무것도 수행하지 않는 한 차이는 매우 미미합니다.이를 사용하는 이유는 다음과 같습니다.

  • C# 3.0 이전의 레거시 코드(자동 속성이 추가되었습니다.그만큼 public string Name { get; set; } 통사론.
  • 어느 시점에서 getter/setter의 구현을 변경해야 할 것으로 예상됩니다.
  • 일부 사용자 정의 직렬화에 대한 요구 사항.
  • 어떤 이유로든 코드의 기본 필드를 사용합니다.좋은 예는 지원 필드를 다음과 같이 사용하는 것입니다. ref 어떤 메소드에 대한 매개변수.여기에는 기본 Interop에서 값을 사용하는 것과 같은 작업도 포함됩니다(GCHandle 등.).
  • 단순한 사용자 선호.나는 지원 필드를 수동으로 지정하는 것을 좋아하기 때문에 일반적으로 자동 속성을 사용하지 않습니다.
  • 사용하여 readonly 자동 속성을 사용하는 경우 백업 필드가 불가능합니다.

이것은 빙산의 일각에 불과합니다.어떤 이유로든 리플렉션을 사용하여 누군가가 액세스할 수 있도록 필드를 명시적으로 선언해야 하는 등 이상한 이유도 많습니다.

"자동 속성"이 도입되기 전에 Prouerties에 대해 일부 "백업 필드"를 사용해야합니다.대부분의 경우 Prouerties가 아래의 예와 같이 값을 "백업 필드"로 반환하거나 값을 설정합니다.

public string Name
{
   get { return _name; }
   set { _name=value; }
}
.

'자동 속성'이 도입되어 '백업 필드'를 무시할 수 있습니다 (또는 우리는 하나를 공급할 필요가 없습니다).이는 귀하의 디자인이 위의 예와 같지 않은 경우 대부분 적합하지만 값을 검색하거나 값을 설정하기 전에 사용자 정의 논리의 '종류'를 시행 해야하는 경우, 우리는 여전히 '좋은 옛 디자인'을 따라야합니다 (즉,백킹 필드)

다른 시나리오는 다양한 이점을 제공합니다.

string _FirsName;   
string _LastName;   

public string FullName 
{ 
   get 
   { 
      return _FirsName + _LastName;
   }
   set; 
} 

public string ReverseName 
{ 
   get 
   { 
      return _LastName + ", " + _FirsName;
   }
   set; 
}
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top