문제

제목처럼왜 스택 클래스는 상위 객체의 참조를 반환하는 메소드가 필요하십니까?나는 항상 메소드가 일부 컴퓨팅이 관련되어 있고 간단한 객체가 대신 속성으로 반환되어야한다고 제안한다고 들었습니다. Peek() 메서드에는 매개 변수가 없으며 코드 수준에서는 간단한 작업이라고 생각합니다.

문제는:그것에 대한 특별한 이유가 있습니까?성능에 영향을 미치는 숨겨진 동작이 있습니까?

편집: 나는 클래스 구현을 모른다.메서드가 아래에 열거자를 사용하는 경우 마지막 요소로 여러 번 반복하는 것은 현명하지 않습니다.다른 한편으로,만약 IList,그러면 성능에 더 큰 영향을 미치지 않아야 합니다.

도움이 되었습니까?

해결책

픽은 동사입니다.그래서 제 책에서 Peek() 해야 방법이 될 수 있습니다.그러나 다른 이름으로 그것은 또한 속성이 될 수 있습니다.

모든 속성은 가져 오기 및/또는 설정 메소드와 관련이 있으므로 어느 쪽이든 메소드로 끝날 것입니다.

다른 팁

나는 그 질문을"왜 그것이 속성이 아닌 방법인가"로 이해합니다.

한 가지 이유는 일관성 일 수 있습니다-모든 액세스 방법은 실제로 방법입니다.나는 순수한 코드 관점에서 그것을 속성으로 갖지 않을 이유가 없기 때문에 완전히 스타일의 문제입니다.

설명서에는 실제로 스택을 처리하는 데 사용되는 컬렉션이 정확히 언급되어 있지 않지만 기본적으로 해당 컬렉션의"맨 위"에만 액세스 할 수있는 더 효율적인 방법은 없습니다.우리는 또한"상단"이 첫 번째 또는 마지막 요소인지 알 수 없으며 스택이 어떤 요소가"상단"인지 추적하고 다른 모든 요소를 이동할 필요가 없도록(적어도 팝업 될 때마다)팝 된 멤버를 실제로 삭제하지 않을 수 있습니다(다시 말하면 링크 된 목록과 같은 구조가 아닌 배열과 같은 구조를 사용하고 있다고 가정합니다).

가 속성가 니라 내가 말 것니다 Stack 자체,하지만 스택의 현재 내용을 평가 한 결과,내 의견으로는 방법은 속성보다 더 적합하다.

그리고 씨.에븐하우스는 그의 대답, 동사,그래서 방법은 더 논리적입니다.그리고 픽은 스택에 대한 이 작업에 대한 일반적인 용어이기 때문에 속성을 사용하기 위해 새로운/다른 용어를 사용하는 것이 더 합리적입니다.

나는 동의,같은 속성이 될 수 있습니다 TopItem 또는 그것이 무의미한 의미가 있기 때문에,그러나 그것은 예외를 던지거나 비어있는 경우 널을 반환 할 것입니까?속성은 예외를 던져서는 안됩니다, 에 따르면.

에서 스택의 소스 참조,당신은 특정 예외를 던져 관련된 코드를 볼 수 있습니다.

    // Returns the top object on the stack without removing it.  If the stack
    // is empty, Peek throws an InvalidOperationException.
    public virtual Object Peek() {
        if (_size==0)
            throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EmptyStack"));
        Contract.EndContractBlock();
        return _array[_size-1];
    }

이것은 이제 위의 속성 개념이 어떻게 처리되는지와 다릅니다.그래서 하나 대 다른.

편집-속성 문서를 추가했습니다.그리고하지 승리 대답,하지만 속성이 아닌 이유에 대한 논리에 대한 추가 설명을 제공.

이 캡슐화,그것의 목적은 객체 구성 요소에 대한 액세스를 제한하는 것입니다: http://en.wikipedia.org/wiki/Encapsulation_(객체 지향 _프로그래밍)

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