Domanda

Come nel titolo.Perché il Pila la classe ha bisogno di un metodo per restituire un riferimento all'oggetto superiore?Mi è sempre stato detto che i metodi suggeriscono che sono coinvolti alcuni calcoli e che invece gli oggetti semplici dovrebbero essere restituiti con le proprietà. Peek() Il metodo non ha parametri e a livello di codice è (credo) un'operazione semplice.

La domanda è:c'è una ragione specifica per questo?Qualche comportamento nascosto che influisce sulle prestazioni?

MODIFICARE: Non conosco l'implementazione della classe, ma f.e.se il metodo utilizza l'enumeratore sottostante, ripetere più volte l'ultimo elemento non sarebbe saggio.D'altra parte se è single IList, allora non dovrebbe avere un impatto maggiore sulle prestazioni.

È stato utile?

Soluzione

Peek è un verbo, quindi nel mio libro Peek() Dovrebbe essere un metodo.Tuttavia con un nome diverso potrebbe anche trattarsi di un immobile.

Ricorda che a qualsiasi proprietà sono associati metodi get e/o set, quindi ti ritroverai con un metodo in entrambi i casi.

Altri suggerimenti

Capisco la domanda come "Perché è un metodo, non una proprietà".

Uno dei motivi può essere la coerenza: tutti i metodi di accesso sono in realtà metodi.È totalmente una questione di stile, perché non vedo alcun motivo per non averlo come proprietà, dal punto di vista del puro codice.

La documentazione non menziona esattamente quale raccolta viene effettivamente utilizzata per gestire lo stack, ma fondamentalmente non esiste altro modo più efficiente per darti accesso solo alla parte "superiore" di quella raccolta.Inoltre non sappiamo se il "top" sia il primo o l'ultimo elemento, è possibile che lo stack tenga traccia di quale elemento sia il "top" e in realtà non elimini i membri spuntati (almeno non ogni volta che vengono spuntati) per evitare di dover spostare ogni altro elemento (di nuovo, assumendo che stiano usando una struttura simile ad un array piuttosto che ad una lista collegata).

Direi che il valore non è una proprietà di Stack stesso, ma risultato della valutazione del contenuto corrente dello stack, secondo me è più adatto un metodo che una proprietà.

E come C.Evenhuis menziona in la sua risposta, Sbirciare è un verbo, quindi un metodo è più logico.E poiché peek è la terminologia comune per queste operazioni sugli stack, ha più senso usarla piuttosto che usare un termine nuovo/diverso solo per usare una proprietà.

Sono d'accordo, potrebbe essere una proprietà come TopItem o qualcosa del genere perché ha un senso iniziale, ma genererebbe un'eccezione o restituirebbe null se vuoto?Le proprietà non dovrebbero generare eccezioni, secondo MSDN.

Da Riferimento alla fonte di Stack, vedrai il codice coinvolto per generare un'eccezione specifica.

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

Questo ora è diverso da come verrebbe gestito il concetto di proprietà di cui sopra.Quindi uno contro l'altro.

modifica- aggiunta documentazione sulla proprietà.E non è la risposta vincente, ma fornisce ulteriori spiegazioni sulla logica del perché non si tratta di una proprietà.

Questo è l'incapsulamento, il suo scopo è limitare l'accesso ai componenti di un oggetto: http://en.wikipedia.org/wiki/Encapsulation_(programmazione_orientata agli oggetti)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top