2014-09-18 5 views
0

필자는 친구가 필드와 속성, getters/setter 등을 이해하도록 돕고 자 노력했다. 그는 개인 필드없이 속성을 사용하고 그것이 효과가 있다고 말해 줬어. 나는 이것이 가능하다는 것을 결코 알지 못했고 온라인에서 너무 많이 찾을 수없는 것처럼 보였다.비공개 필드없이 속성을 사용할 때 어떤 일이 일어나는가

public int Number { get; set; } 

대신 : 예를 들어

private int number; 
public int Number 
{ 
    get { return number; } 
    set { number = value; } 
} 

은 (지금까지의 내가 볼 수 있습니다) 작동하는 것 같다,하지만 지금은 다음과 같은 질문이 있습니다

  • 무엇이 일어나고 있습니까?
  • 어떤 방법으로 선호합니까?
  • 장점/단점?

편집 :

난 항상 생각

가 {얻을; 세트; }는 get {return x; } set {x = value; }. 오 잘, 나는 그것을 지금 알고있다. 그러나 문제는 동일하게 유지됩니다. 하나는 다른 것보다 더 잘 고려됩니까? 찬성/반대?

+0

두 번째 코드 블록과 정확히 같은 방식으로 'private int number'는'public int Number {get; 세트; }'. –

+2

당신은'private int number; '를 가질 수도 있고'public int Number {get {return number; } set {number = value; }}' –

+3

나는 자동 속성과 게터 & 세터를 읽고 싶습니다. 자신과 "친구" – MethodMan

답변

1

첫 번째 경우 컴파일러는 속성의 보조 저장소로 자동으로 개인 필드를 만들고 사용자 코드에서 액세스 할 수없는 이름을 지정하고 값을 가져오고 설정하는 메서드를 만듭니다.

코드에서는 앞의 예와 달리 코드를 명시 적으로 수행하고 해당 백킹 필드의 클래스 범위에 유효한 식별자를 생성합니다.

+0

코드의 단일 부분이기 때문에 아무데도 사용되지 않습니다. 클래스입니다. 어딘가에서 사용되도록 편집 할 수는 있지만, 속성과 개인 필드, 속성 및 코드를 둘러싼 코드가 아닌 질문과 관련이 있습니다. – anthonytimmers

+1

@anthonytimmers 코드에서 당신이 ' 다시 두 개의 다른 필드를 만들면 명시 적으로 배킹 스토어가있는 속성을 만들지 않을 것입니다. 내가 말한 것처럼 속성을 설정해도 해당 필드가 설정되지 않고 속성 값을 가져 오지 않으면 필드 값을 가져 오지 못합니다. 거기에 두 개의 필드가 있습니다. 다른 코드가 필드가 아닌 속성에 액세스하면 속성을 사용하는 코드에 영향을 미치지 않거나 영향을받지 않으며 그 반대의 경우도 마찬가지입니다. – Servy

+0

@Servvy 나는 엉망이되었습니다. 편집, 지금 편집하십시오. 혼란을 드려 죄송합니다. – anthonytimmers

관련 문제