문제
개인 필드 대신 개인 속성 사용의 차이점은 무엇입니까?
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에 의해 최적화 될 수 있음) 보내기 속성은 직접 주소 액세스 대신 메소드 호출을 나타냅니다.
속성 사용의 주요 장점은 필요한 외부 서명을 변경하지 않고 구현을 변경할 수 있도록하는 것입니다. 이들은 개인적으로 액세스되므로 구현의 변경 사항은 로컬 코드에만 영향을 미칩니다.
개인 회원을 다룰 때는 팀의 컨벤션을 제외하고는 부동산에서 얻은 이점이 없습니다.