문제

다음과 같은 간단한 클래스 설정이있는 경우 :

class MyClass
{
    private string _myName = string.Empty;

    public string MyName
    {
        get
        {
            return _myName;
        }
    }

    public void DoSomething()
    {
        // Get the name...
        string name = string.Empty;

        name = _myName;

        // OR

        name = MyName;

        // ...and do something with it...
    }
}

공공 재산 또는 데이터 구성원은 무엇을 사용해야합니까?

분명히이 예에서는 동일한 변수를 참조하기 때문에 차이가 없습니다. 그러나 공공 재산의 실제 사용은 어떻습니까?

일반적으로 공개 속성은 거의 수행하지 않으며,이 경우 전화해도 괜찮습니까? 아니면 사람들이 내부 클래스 참조에 의해 호출되어서는 안되는 공개 속성에 많은 기능을 투자합니까?

디버거에서 검사하면 예상치 못한 결과를 수행 할 수 있기 때문에 다른 게시물에서 속성에 많은 기능을 두지 않는 것에 대한 무언가를 보았습니다. 그게 사실인가요?

도움이 되었습니까?

해결책

속성을 사용하십시오 - 세터 내에 캡슐화 될 수있는 논리는 클래스 자체 내에서도 적용해야합니다. getters and setters 내에 논리가 없다면 필드 자체를 사용하는 것이 안전하지 않습니다. 어느 시점에서든 해당 필드에 대한 액세스에 대한 논리를 추가하려면 훨씬 더 리팩토링해야합니다.

다른 팁

나는 당신이 재산을 일반적인 관행으로 언급해야한다고 생각합니다. 이 특정한 예에서는 실제로 큰 차이를 만들지 않지만 Get/Set 액세서는 속성을 잡을 때 조금 더 많은 작업을 수행 할 수있는 능력을 제공합니다. 예를 들어, 우리 속성의 많은 부분 "Get"액세서가 더 복잡한 데이터 구조 내에서 조회를 수행하거나 아무것도 정의되지 않은 경우 기본값을 설정합니다. 수업의 나머지 부분 이이 논리를 이용할 수 있도록 속성을 사용하는 습관을 만듭니다. 우리는 그것에 대해 너무 열심히 생각할 필요가 없기 때문에 연습을 일반화하려고 노력합니다.

기본 데이터 구성원에게 직접 액세스하려는 사례가있을 수 있지만, 이는 특정한 이유가있는 의식적인 결정이며 예외가되는 경향이 있습니다.

읽기 전용 상황을 쉽게 처리하기 때문에 속성을 선호하며 필요한 기본 검증으로 쉽게 포장 할 수 있습니다.

내부 변수의 값을 반환하는 경우 변수를 공개적으로 공개합니다. 그렇게하지 않습니다. 나는 항상 값의 시청 또는 변화에 응답하여 무언가를하고 싶을 때 항상 공개 속성을 사용했습니다 - 즉, 데이터베이스에 쓰고, 다른 것을 설정하고 (예제의 두 번째 부분에서와 같이) 다른 것을 설정했습니다.

당신이 묻는 질문은 수업 내에서 일어나는 일이 이러한 이벤트를 트리거하기 위해 원하는지 여부입니다. 그렇다면 외부 발신자와 같은 방식으로 속성을 통해 값에 액세스하십시오. 값을 읽으려면 내부 변수를 사용하십시오.

귀하의 질문에 답하기 위해, 잠재적 인 부작용을 고려하면 어느 쪽이든 해를 입히는 데 해를 끼치 지 않습니다.

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