다른 게터 스타일 사이의 C #의 차이점
때로는 getter의 속성에 약어가 표시됩니다. 예를 들어 두 가지 유형이 있습니다.
public int Number { get; } = 0
public int Number => 0;
그 둘 사이에 차이점이 있으면 누군가 말해 줄 수 있습니까? 그들은 어떻게 행동합니까? 둘 다 읽기 전용입니까?
예, 둘 다 읽기 전용이지만 차이가 있습니다. 첫 번째 필드에는 생성자가 실행되기 전에 0으로 초기화되는 백업 필드가 있습니다. 일반 읽기 전용 필드와 마찬가지로 생성자에서만 값을 변경할 수 있습니다 . 게터 자체는 단지 필드의 값을 반환합니다.
두 번째 항목에서는 getter가 필드를 포함하지 않고 매번 0을 반환합니다.
따라서 자동으로 구현 된 속성 또는 식 본문 멤버를 전혀 사용하지 않으려면 다음과 같은 이점이 있습니다.
첫 번째 버전
private readonly int _number = 0;
public int Number { get { return _number; } }
두 번째 버전
public int Number { get { return 0; } }
차이점에 대한보다 명확한 예는 다음과 같습니다.
public DateTime CreationTime { get; } = DateTime.UtcNow;
public DateTime CurrentTime => DateTime.UtcNow;
단일 객체를 생성하면 객체 생성시 CreationTime
초기화 된 읽기 전용 필드에 저장되므로 해당 속성은 항상 동일한 결과를 제공합니다. 그러나 CurrentTime
속성에 액세스 할 때마다 DateTime.UtcNow
평가 될 수 있으므로 잠재적으로 다른 결과를 얻을 수 있습니다.
한 가지 차이점은 0
개체를 만들 때나 속성을 사용할 때를 평가할 때입니다 .
DateTime 속성을 사용하면 더 잘 볼 수 있습니다.
class SomeTestClass
{
public DateTime Start { get; } = DateTime.Now;
public DateTime Now => DateTime.Now;
}
Start
속성 동안 (인스턴스가 생성 될 때의) 동시에 복귀 계속 Now
변화가 현재 시간을 반영하기 위하여.
설명 :
첫 번째 버전 ( "시작")은 생성자가 덮어 쓸 수도있는 초기 값을 제공합니다. 따라서 이것은 한 번만 평가됩니다.
두 번째 버전 ( "Now")은이 속성의 "getter"가 될 식을 제공합니다. 따라서 이것은 속성을 읽을 때마다 평가됩니다. 생성자가 덮어 쓸 수있는 지원 필드도 없습니다.
이들은 C # 6 언어 기능입니다.
첫 번째 예
public int Number { get; } = 0
첫 번째 예는 getter-only auto 속성 입니다. 게터 전용 자동 속성의 지원 필드는 암시 적으로 읽기 전용으로 선언됩니다.
두 번째 예
public int Number => 0;
두 번째 예는 속성 유사 함수 멤버의 표현식 본문입니다 . get
키워드 는 없습니다 . 표현식 본문 구문을 사용하면 암시됩니다.
둘 다 읽기 전용입니다.
참고 URL : https://stackoverflow.com/questions/46047721/difference-in-c-sharp-between-different-getter-styles
'development' 카테고리의 다른 글
문자열 배열을 ArrayList로 변환 (0) | 2020.06.08 |
---|---|
iOS Swift 앱의 배경보기에 그라디언트를 적용하는 방법 (0) | 2020.06.08 |
Nokogiri 설치 실패 -libxml2가 없습니다 (0) | 2020.06.08 |
ASP.NET에서 페이지를 어떻게 새로 고치나요? (0) | 2020.06.08 |
Android 앱에서 Facebook 페이지를여시겠습니까? (0) | 2020.06.08 |