c # : 게터 / 세터


109

어딘가에서 다음과 같은 것을 보았고 그것이 무엇을 의미하는지 궁금했습니다. 나는 그들이 게터와 세터라는 것을 알고 있지만 문자열 Type이 이와 같이 정의 된 이유를 알고 싶습니다. 도와 주셔서 감사합니다.

public string Type { get; set; }


4
이를 자동 속성이라고합니다. msdn.microsoft.com/en-us/library/bb384054.aspx
Allov

이것은 "Type".NET 유형 인 이라는 속성의 정의입니다 System.string. 더 이상 아무것도 없습니다.
Jon

2
나는 그가 Auto-Property의 이름을 Reflection 클래스 System.Type과 혼동하고 있다고 생각합니다. msdn.microsoft.com/en-us/library/system.type.aspx
eandersson

답변:


178

사람들은되는 속성 자동 구현 (줄여서 자동 등록).

컴파일러는 다음과 같은 간단한 구현에 해당하는 것을 자동 생성합니다.

private string _type;

public string Type
{
    get { return _type; }
    set { _type = value; }
}

2
@barlop을 Google에서 온 사람으로, 단서없이 업데이트해야 할 사항은 무엇입니까? M. Hassans가 무슨 말인지 대답 했나요? 감사.
Aethenosity

1
돌이켜 보면 @Aethenosity 나는 괜찮다고 생각한다 .. 나는 게터 세터의 예를 들어 생각했다. 질문자는 훨씬 더 간결한 getter setter의 유효한 경우를 가지고 있습니다 (1 라이너 / 두 번째 필드 필요 없음). public int b { get { return b * 2; } } 두 번째 필드도 필요하지 않을 수도 있습니다 . 하지만 바디가있는 세터가 있으면 두 번째 필드가 필요하다고 생각합니다. 그리고 이것은 몸이있는 세터를 보여줍니다. 질문자의 원 라이너와 동일하지만.
barlop

2
@Aethenosity에는 setter에 본문이 있지만 =>구문이 있고 반환 키워드가 없을 때 두 번째 필드가 여전히 필요한 C # 7도 있습니다 . 내가 생각했던 것은 아니었지만. 나는 두 번째 필드가 불필요하다는 것을 염두에 두었지만, 이후 두 번째 필드가 때때로 필요하다는 것을 알았습니다. 여기 예제에서 두 번째 필드는 필요하지 않습니다 ( '본문이없는 기본 setter가이 작업을 수행 할 것이므로). 그러나 응답자는 질문자에게 해당 줄이없는 내용을 설명하기 위해 입력했습니다 (세터 본문 및 두 번째 필드). 두 번째 필드가하고있었습니다.
barlop

33

이것은 자동 속성 이며 이에 대한 축약 표기법입니다.

private string type;
public string Type
{
  get { return this.type; }
  set { this.type = value; }
}

4
... 백업 필드에 액세스 할 수 없다는 점을 제외하고.
Vlad

7
... 이것이 backing field 라고 불리는 이유 입니다 .
Teoman Soygul 2011-07-15

5
그럼에도 불구하고 당신은 그것을 <Type>k__BackingField반성 하는 것처럼 볼 수 있어야합니다 .
Vlad

25

C # 6 :

이제 자동 속성을 필드로 선언 할 수 있습니다.

public string FirstName { get; set; } = "Ropert";

읽기 전용 자동 속성

public string FirstName { get;} = "Ropert";

13
public string Type { get; set; } 

하는 것과 다르지 않다

private string _Type;

public string Type
{    
get { return _Type; }
set { _Type = value; }
}

9

이는 컴파일러가 런타임에 지원 필드를 정의 함을 의미합니다. 자동 구현 속성에 대한 구문입니다.

추가 정보 : 자동 구현 속성


5

자동으로 지원되는 속성이며 기본적으로 다음과 같습니다.

private string type;
public string Type
{
   get{ return type; }
   set{ type = value; }
}

4

이를 자동 속성이라고합니다.

http://msdn.microsoft.com/en-us/library/bb384054.aspx

기능적으로 (그리고 컴파일 된 IL 측면에서) 지원 필드가있는 속성과 동일합니다.


1
클래스 내에서 private _type 또는 유형을 계속 참조 할 수 있습니까? 아니면 그냥 Type을 사용합니까?
mikey 2011-07-15

2
아니요,하지만 auto 속성에 대한 수정자를 지정할 수 있습니다. public string Type {get; 개인 세트; }
제프

이 경우 _type에 액세스 할 수 없습니다.
Security Hound 2011

1
따라서이 경우 this.Type = "foo"; 정상이어야하지만 외부 instance.Type = "foo"; 이 자동 소품은 확실히 언어에 도움이되는 추가 기능입니다. 감사.
mikey

1

나는 이것이 오래된 질문이라는 것을 알고 있지만 C # 6이 출시되면서 이제 개인 속성에 대해 이와 같은 작업을 수행 할 수 있습니다.

public constructor()
{
   myProp = "some value";
}

public string myProp { get; }

2
C # 6에서 직접 초기 값을 설정할 수 있습니다. public string myProp {get; } = "일부 값") 생성자없이;
M.Hassan

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.