Pregunta

Como en el título.¿Por qué el Pila ¿La clase necesita un método para devolver una referencia del objeto superior?Siempre me han dicho que los métodos sugieren que hay algo de computación involucrada y que los objetos simples deberían devolverse con propiedades. Peek() El método no tiene parámetros y, a nivel de código, es (creo) una operación simple.

La pregunta es:¿Hay alguna razón específica para eso?¿Algún comportamiento oculto que afecte el rendimiento?

EDITAR: No conozco la implementación de la clase, pero f.e.Si el método utiliza el enumerador a continuación, no sería prudente iterar hasta el último elemento muchas veces.Por otro lado si es un solo IList, entonces no debería tener ningún impacto mayor en el rendimiento.

¿Fue útil?

Solución

Peek es un verbo, así que en mi libro Peek() debería ser un método.Sin embargo con otro nombre también podría ser una propiedad.

Recuerde que cualquier propiedad tiene métodos get y/o set asociados, por lo que terminará con un método de cualquier manera.

Otros consejos

Entiendo la pregunta como "¿Por qué es un método, no una propiedad?".

Una razón puede ser la coherencia: todos los métodos de acceso son en realidad métodos.Es totalmente una cuestión de estilo, porque no veo ninguna razón para no tenerlo como propiedad, desde la perspectiva del código puro.

La documentación no menciona exactamente qué colección se usa realmente para manejar la pila, pero básicamente no existe otra forma más eficiente de brindarle acceso solo a la parte "superior" de esa colección.Tampoco sabemos si la "parte superior" es siquiera el primer o el último elemento, es posible que la pila realice un seguimiento de qué elemento es la "parte superior" y en realidad no elimine los miembros extraídos (al menos no cada vez que aparecen) para evitar tener que mover todos los demás elementos (nuevamente, asumiendo que están usando una estructura similar a una matriz en lugar de una lista vinculada).

Yo diría que como el valor no es una propiedad del Stack en sí, sino como resultado de evaluar el contenido actual de la pila, en mi opinión, un método es más adecuado que una propiedad.

Y como C.Evenhuis menciona en su respuesta, Ojeada es un verbo, por lo que un método es más lógico.Y como peek es la terminología común para estas operaciones en pilas, tiene más sentido usarla que usar un término nuevo/diferente solo para usar una propiedad.

Estoy de acuerdo, podría ser una propiedad como TopItem o algo así porque eso tiene sentido inicial, pero ¿arrojaría una excepción o devolvería un valor nulo si está vacío?Las propiedades no deben generar excepciones, según MSDN.

De Referencia fuente de la pila, verá el código involucrado para generar una excepción 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];
    }

Esto ahora difiere de cómo se manejaría el concepto de propiedad anterior.Entonces uno contra el otro.

editar: documentación de propiedad agregada.Y no es la respuesta ganadora, sino que proporciona una explicación más detallada sobre la lógica de por qué no es una propiedad.

Esto es encapsulación, su propósito es restringir el acceso a los componentes de un objeto: http://en.wikipedia.org/wiki/Encapsulation_(programación_orientada a objetos)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top