문제

개인 필드 대신 개인 속성 사용의 차이점은 무엇입니까?

private String MyValue { get; set; }

// instead of

private String _myValue;

public void DoSomething()
{
   MyValue = "Test";

   // Instead of

   _myValue = "Test";
}

성능 문제가 있습니까? 아니면 단지 이름 지정 컨벤션?

도움이 되었습니까?

해결책

개인 속성을 사용하면 내부 데이터를 추출하여 내부 표현의 변경이 동일한 클래스에서도 구현의 다른 부분에 영향을 줄 필요가 없도록 할 수 있습니다. 개인 분야는이 이점을 제공하지 않습니다. C# 3.0의 자동 속성을 사용하면 개인 또는 공개 필드를 직접 구현할 필요가 거의 없습니다.

다른 팁

속성 (개인, 공공, ...)에서 얻을 수있는 큰 이익은 계산 된 값 대 설정 값을 생성 할 수 있다는 것입니다. 예를 들어

class Person { 
  private DateTime _birthday;
  private int _age { get { return (DateTime.Now - _birthday).TotalYears; }
}

이 패턴의 장점은 변경 사항을 반영하기 위해 N 다른 값에 대해 하나의 값 만 업데이트되어야한다는 것입니다. 이것은 접근성에 관계없이 속성에 해당됩니다. 사유 재산 대 비 개인적인 부동산의 구체적인 이점은 없습니다 (물론 개인 이외의 것 외에는)

당신은 부동산을 비공개로 만들고 싶지 않을 것입니다. 재산이 개인이되기위한 조항은 완전성을 위해서만 제공됩니다. 그리고 귀하의 재산이 단순히 필드의 가치를 얻거나 설정하는 경우 JIT 컴파일러가 감소 할 가능성이 높기 때문에 성능 차이가 없습니다.

다른 대답, 성과, 심만 틱스 및 완성은 개인 분야 대신 개인 속성에 대해 본 유효한 사례가 있습니다.

public class Item
{
    private Item _parent;
    private List<Item> _children;

    public void Add(Item child)
    {
        if (child._parent != null)
        {
            throw new Exception("Child already has a parent");
        }
        _children.Add(child);
        child._parent=this;
    }
}

어떤 이유로 든 부모를 노출시키고 싶지 않지만 검증 점검을 원할 수도 있습니다. 부모가 자녀 중 한 사람에게 자녀로 추가 될 수 있어야합니까?

이를 해결하기 위해이 속성을 만들고 원형 참조를 확인할 수 있습니다.

속성 액세스는 getter/setter를 호출 할 때 (분수 적으로) 느려집니다. 이점은 데이터 검증을 수행 할 수 있으며 예를 들어 보호 할 속성을 변경하면 상속자로 필터링 할 수 있다는 것입니다.

개인 액세스를 처리 할 때는 차이가 매우 작습니다. 예, 성능 히트 (JIT에 의해 최적화 될 수 있음) 보내기 속성은 직접 주소 액세스 대신 메소드 호출을 나타냅니다.

속성 사용의 주요 장점은 필요한 외부 서명을 변경하지 않고 구현을 변경할 수 있도록하는 것입니다. 이들은 개인적으로 액세스되므로 구현의 변경 사항은 로컬 코드에만 영향을 미칩니다.

개인 회원을 다룰 때는 팀의 컨벤션을 제외하고는 부동산에서 얻은 이점이 없습니다.

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