2014-07-09 2 views
3

ReSharper를 사용하여 C# 코드베이스를 정리하는 작업을 해왔습니다. 저는 공용 속성과 함께 모델 클래스에서 개인 필드를 사용했습니다. 그러나, 나는 단순히 뒷받침 필드가없는 속성을 가져 와서 자동 속성으로 변환 할 수 있다는 것을 알게되었습니다. 이것들은 모델 클래스입니다. 개체 내에 데이터에 영향을 줄 수있는 메소드가 없습니다. 자동 속성을 사용하는 것이 더 낫습니까?메서드가없는 클래스에 비공개 필드가 필요합니까?

편집 :이 꽤 많은 코드 스타일의 문제이다 "백업 필드"

public class Gizmo 
{ 
    //this is what I call the "backing" field, only because it's "behind" the 
    //publicly-accessible property and you access it through the property 
    private Int32 _count; 

    //and this is the property, of course 
    public Int32 Count 
    { 
     get { return _count; } 
     set { _count = value; } 
    } 
} 
+0

당신이 "더지지 필드가없는 속성"무엇을 의미합니까 될 것이다라고? 여기에 예제를 주었다면 혼란이 줄어들 것입니다 ... –

답변

4

는 속성이 get;set 간단 포함하면 더 나은 단지, 당신은 단지 "자동 속성을"사용할 수있는 자동 등록

을 사용하는 것입니다. 필자가 잘못하지 않았다면 컴파일러는 백그라운드에서 개인용 백업 필드를 만듭니다.

귀하의 부동산에서 이전에 일종의 유효성 검사를하고 있다면, set 다음은 의미가 백업 필드 (비 자동)와 속성을 사용할 수있게하기 전에

이 예는

private string name; 

public string MyName { 
    get { 
     return name; 
    } 
    set { 
     name = (value == null) 
      ? "Anonymous" : value; 
    } 
} 
2

의 예를 포함합니다. 따라서 프로젝트 또는 솔루션 전체에서 모델 속성에 대한 표준을 가져야합니다. 자동 속성으로 인해 귀하의 의도가 더욱 명확 해지는 것을 발견 하셨다면 꼭 사용하십시오. 을 일관되게 사용하십시오..

4

방법은 여기에 관계가 없습니다. 당신의 재산이있는 경우 : 다른 코드가 private 필드를 사용하는 경우

public int Foo { get; set; } 

, 당신은 단지를 사용하도록 변경할 수 있습니다

private int foo; 
public int Foo 
{ 
    get { return foo; } 
    set { foo = value; } 
} 

을 그리고 그것은 절대적으로는로 그 설정하는 의미가 대신 속성.

+0

좋아, 나는 당신을 비난하고 싶습니다. @jon하지만 이것은 완전히 맞지 않습니다 :) 만약 당신이 setter에서 어떤 종류의 논리를 필요로한다면 (OP 예) 뒷자리가 필요합니다. – GETah

+0

@GETah : OP에는 * 예제가 * 없습니다 * (논리가없는 속성의 예) 속성이 있으면 * 특별히 말했습니다. 예, 속성에 논리가있는 경우 명시적인지지 필드가 필요하지만 여기에 해당하는 표시가 없습니다. –

+0

@ GETah : (필자는 OP가 뒷받침 필드없이 속성에 대해 이야기하는 부분을 발견하지 못했습니다. 거기에 어떤 일이 일어나고 있는지 명확하지 않습니다 ... OP가 예를들 수 있다면 좋을 것입니다. 지금.) –