Pergunta

Como no título.Por que o Pilha classe precisa de um método para retornar uma referência do objeto superior?Sempre me disseram que os métodos sugerem que há alguma computação envolvida e que objetos simples deveriam ser retornados com propriedades. Peek() O método não tem parâmetros e no nível do código é (eu acho) uma operação simples.

A questão é:existe uma razão específica para isso?Algum comportamento oculto que afeta o desempenho?

EDITAR: Não conheço a implementação da classe, mas por exemplo.se o método usar o enumerador abaixo, iterar até o último elemento muitas vezes seria imprudente.Por outro lado, se for um único IList, então não deverá ter nenhum impacto maior no desempenho.

Foi útil?

Solução

Espeça é um verbo, então no meu livro Peek() deve ser um método.No entanto, com um nome diferente, também poderia ser uma propriedade.

Lembre-se de que qualquer propriedade tenha associado a obter e / ou definir métodos, então você acabaria com um método de qualquer maneira.

Outras dicas

Eu entendo a pergunta como "por que é um método, não uma propriedade".

Um motivo pode ser consistência - todos os métodos de acesso são realmente métodos.É totalmente uma questão de styl, porque não vejo motivos para não tê-lo como uma propriedade, de uma perspectiva de código puro.

A documentação não menciona exatamente o que a coleção é realmente usada para lidar com a pilha, mas basicamente não há outra maneira mais eficiente de lhe dar acesso a apenas o "top" dessa coleção.Também não sabemos se o "top" é mesmo o primeiro ou último elemento, é possível que a pilha mantenha a faixa de qual elemento é o "top" e realmente não exclui os membros popped (pelo menos nem toda vez que elessão popped) para evitar ter que mover todos os outros elementos (novamente, assumindo que eles estão usando uma estrutura semelhante a uma matriz, em vez de uma estrutura semelhante a uma lista relacionada).

Eu diria que como o valor não é uma propriedade do Stack em si, mas como resultado da avaliação do conteúdo atual da pilha, na minha opinião, um método é mais adequado que uma propriedade.

E como C.Evenhuis menciona em a resposta dele, Olhadinha é um verbo, então um método é mais lógico.E como peek é a terminologia comum para essas operações em pilhas, faz mais sentido usá-la do que usar um termo novo/diferente apenas para usar uma propriedade.

Concordo, poderia ser uma propriedade como TopItem ou algo assim, porque inicialmente faz sentido, mas lançaria uma exceção ou retornaria nulo se vazio?As propriedades não devem lançar exceções, de acordo com MSDN.

De Referência de origem da pilha, você verá o código envolvido para lançar uma exceção específica.

    // 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];
    }

Isso agora difere de como o conceito de propriedade acima seria tratado.Então, um contra o outro.

Documentação de propriedade adicionada por edição.E não a resposta vencedora, mas fornecendo mais explicações sobre a lógica de por que não é uma propriedade.

Isso é encapsulamento, é a finalidade é restringir o acesso a um componentes de objetos: http://en.wikipedia.org/wiki/encapsulation_(object-oriented_programming)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top