문제

참고:이 아니었을 때 시작 C#.으로 2014 년 지식,내가 진실하게 말할 수 있는 자동 특성은 최고 중 하나는 것이 이제까지 일어났 C#언어입니다.

나를 만드는 데 사용됩 내 속성을를 사용하여 C#에서 민간과 공공 분야:

private string title;
public string Title
{
    get { return title;  }
    set { title = value;  }
}

지금 .NET 3.0,우리가 자동 속성:

public string Title { get; set; }

이것이 더 많은 철학/주관적 질문,하지만 어떤 이유가 있습을 사용하여 이동성을 제외하고 절약에서 다섯 개의 코드의 라인을 위해 각 분야?나 개인적인 불만은 그 속성이 숨어있는 물건이 내게서부터 나는 큰 팬의합니다.

사실,이 숨겨진 프라이빗 필드는지도 보여 디버거에서는 확인을 받는 사실 get/set 기능이 아무것도 할 수 없습니다.하지만 내가 원하는 경우 실제로 구현하는 일부터 구 논리,시작하는 명령을 사용할 수 있습니다 민간/공공 쌍 anyway.

내가 참조 하는 혜택을 많이 저장 코드(한 대 여섯 노선)을 잃지 않고 이를 변경하는 기능이터 구 논리,나중에 하지만 다시 내가 이렇게 단순히 선언 공용 분야는"공공 string Title"필요없이의{얻;set;}블록,따라서도 절약 코드입니다.

그래서 나는 무엇을 놓치까요?왜 사람이 실제로 사용하려는 자동 속성?

도움이 되었습니까?

해결책

우리는 그들 모두를 사용하여 시간에 쌓 오버플로우가 발생합니다.

당신은 또한에 관심이있을 수 있습니다 토론의 속성에 대공개 변수.이럴 때는 정말 무엇이 반응하는,그리고 이러한 목적을 위해,그것은 좋아요.

다른 팁

그렇다,그것은 저장 코드입니다.그것은 마일을 쉽게 읽을 때 당신이 그들의 부.그들은 빠를 작성하고 유지하기 쉽습니다.저장 코드를 항상 좋은 목표입니다.

다르게 설정할 수 있습 범위:

public string PropertyName { get; private set; }

도록 편리한 시설을 이용하실 수 있습야만 변경 내부 클래스입니다.이것은 정말 변경할 수 없으로 액세스할 수 있습니다 개인 세터를 통해 반영합니다.

로의 C#6 을 만들 수도 있습니다 사실 readonly 속성-즉불변의 속성을 변경할 수 없는 외부의 생성자:

public string PropertyName { get; }

public MyClass() { this.PropertyName = "whatever"; }

에서 컴파일하는 시간이 될 것이다:

readonly string pName;
public string PropertyName { get { return this.pName; } }

public MyClass() { this.pName = "whatever"; }

에서 변경할 수 없는 클래스의 많은 구성원이 많은 여분의 코드입니다.

세 개의 큰 단점을 사용하는 대신 필드 속성:

  1. 할 수 없습니다 바인딩하여야하는 반면 당신이 할 수있는 시설
  2. 시작하는 경우 사용 분야,당신은 수상(쉽게)변경이 그들에게 제공
  3. 몇 가지 추가할 수 있는 특성을 제공할 수 있는 추가 필드

나 개인적으로 사랑하는 자동 속성입니다.어떤 잘못을 저장 라인의 코드?당신이 원하는 경우에 물건을 필요한 것입 또는 세터,아무 문제가 없으로 변환하기 위해 정상적인 속성이다.

당신이 말한 대로 사용할 수 있고 필드를 원하는 경우 추가 논리를 나중에 그들에게 당신이 그들을 변환하는 특성.하지만 이는 현재 문제와 어떤 사용의 반사(및 아마도 다른 곳?).

또한 속성을 설정할 수 있는 다른 대한 액세스 수준 getter 및 세터는 당신과 함께 할 수 없습니다.

나는 그것과 같 var 키워드를 사용합니다.문제를 개인적인 선호도에 따라 다릅니다.

에서 비얀 이후,창조자의 C++:

내가 좋아하지 않는 클래스를 많이 얻고 설정 기능.는음을 나타내는 경우가 많습니다 그것은 없어야 되는 클래스에서는 첫 번째 장소입니다.그것은 데이터 구조입니다.면 그것은 정말로 데이터 구조,그것은 데이터 구조입니다.

그리고 당신은 무엇을 알고 있는가?말합니다.얼마나 자주 당신은 단순히 감싸는 프라이빗 필드에 설정,실제로 아무것도 하지 않고 내 get/set 간단하기 때문에,그것은"객체 지향"일을 하는 것입니다.이 마이크로소프트의 문제에 대한 해결책;그들은 기본적으로 공공 분야는 바인딩할 수 있습니다.

한 가지 아는 것 같이 언급은 어떻게 자동 속성은 불행하게도 유용하지 않습에 대한 불변의체(일반적으로 변경할 수 없는 구조체).기 때문에 당신이 정말로 해야 하:

private readonly string title;
public string Title
{
    get { return this.title; }
}

(필에서 초기화 생성자를 통해 전달되는 매개변수,그리고 다음을 읽기 전용입니다.)

그래서 이것은 이점을 통해 단순 get/private set autoproperty.

난 항상 만들기 속성을 대신 대중의 필드에 사용할 수 있기 때문에 속에서 인터페이스에 정의,사용할 수 없습니다 공용 분야에서 인터페이스를 정의합니다.

자동 특성은 많은 마술로 다른 아무것도에서는 C#.일단 당신이 그것에 대해 생각의 점에서 컴파일하려 IL 보다는 오히려 그것은을 확대되고 일반 C#산 그 첫 번째는 훨씬 덜 마술보다는 많이 다른 언어로 구성 합니다.

내가 사용하는 자동 속성의 모든 시간입니다.전 C#3 내가 못에 방해되는 모든 입력하고 공개 변수를 대신 합니다.

에는 이렇게 할 수있:

public string Name = "DefaultName";

을 이동하는 기본값으로 생성자와 속성입니다.루:-(

내 생각에는 어떤 구문은 직관적 인을 감소 라인의 코드입니다.

이러한 종류의 특징은 무엇이 같은 언어 Ruby 그래서 강력한(그리고 다이내믹한 특징하는 데도 도움을 줄 초과하는 코드).

루비했이 모두 함께로:

attr_accessor :my_property
attr_reader :my_getter
attr_writer :my_setter

만 문제가 있으로 그들은 그들이 멀리 가지 않는 충분합니다.동 릴리스의 컴파일러는 자동적인 속성이 추가되는 부분적인 방법입니다.왜 그들이 이 두 가지가 넘어요.간단한"부분에서<PropertyName>변경된 것"이러한 일들이 정말 정말 유용합니다.

그것은 간단하고,짧은 그리고 만들려는 경우 실제 구현을 내 숙박 시설의 몸이 어딘가에 선,그것은 당신을 형식의 외부 인터페이스입니다.

간단합니다.

여기서 한가지 유의할 사항은,나의 이해,이 문법 설 C#3.0 끝을 의미하는 IL 컴파일러에 의해 생성은 동일합니다.나는에 대해 동의를 피하는 마술,하지만 모두 같은,적은 라인을 위해 같은 일이 일반적으로 좋은 것입니다.

내 생각에,당신은 항상 사용하여 자동 속성을 대신 대중 필드가 있습니다.는 말했다,여기에 타협:

로 시작하는 내장 필드를 사용하는 이름 지정 규칙을 사용한 제공합니다.당신이 먼저 하나

  • 액세스해야 하는 필드의 외부에서 어셈블리 또는
  • 를 첨부해야 논리를 get/set

이렇:

  1. 이름 바꾸기 분야
  2. 이 비공개
  3. 추가 공용성

클라이언트 코드를 사용하지 않을 변경해야합니다.

언젠가는 하지만,시스템 성장할 것입니다 당신은 분해 별도 어셈블리로 여러 솔루션입니다.할 때 일어나는,모든 노출된 필드를 다시 올 것이다 당신을 괴롭힐 때문에,제프로 언급하고, 변화하는 공장을 공개 숙박 시설은 깨고 API 의 변화.

내가 사용하는 CodeRush,그것보다 더 빨리 자동 속성입니다.

이렇게하려면:

 private string title;
public string Title
{
    get { return title;  }
    set { title = value;  }
}

필요 여덟 키니다.

글로 코드 조각을 자동 재산의 이름이 같은 것이 일곱 키 입력에서 전체;)

@도메:나는 그것을 얻지 않는다..할 수 없는 이렇게 자동 속성?:

public string Title { get; }

public string Title { get; private set; }

이것이 무엇을 말하는가?

내 가장 큰 불만을 가진 자동 특성은 그들이 설계 시간을 절약하지만 저는 종종 찾아 나는 그들을 확장하기 위하여 전체 불어 속성이다.

What VS2008 제 자동 폭발-시설 리팩터링.

사실 우리는 우 필드 캡슐화 리팩터링은 내가 일하는 방법을 더 빨리 사용중 필드가 있습니다.

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