Frage

Wie im Titel.Warum funktioniert das? Stapel Klasse benötigt eine Methode, um eine Referenz des obersten Objekts zurückzugeben?Mir wurde immer gesagt, dass Methoden darauf hindeuten, dass ein gewisser Rechenaufwand erforderlich ist und dass stattdessen einfache Objekte mit Eigenschaften zurückgegeben werden sollten. Peek() Die Methode hat keine Parameter und auf Codeebene ist sie (glaube ich) eine einfache Operation.

Die Frage ist:Gibt es dafür einen bestimmten Grund?Gibt es verstecktes Verhalten, das sich auf die Leistung auswirkt?

BEARBEITEN: Ich kenne die Klassenimplementierung nicht, aber z.B.Wenn die Methode den unten stehenden Enumerator verwendet, wäre es unklug, mehrmals bis zum letzten Element zu iterieren.Andererseits, wenn es eine Single ist IList, dann sollte es keinen größeren Einfluss auf die Leistung haben.

War es hilfreich?

Lösung

Peek ist ein Verb, also in meinem Buch Peek() sollen eine Methode sein.Unter einem anderen Namen könnte es sich jedoch auch um eine Immobilie handeln.

Denken Sie daran, dass jede Eigenschaft über zugehörige Get- und/oder Set-Methoden verfügt, Sie erhalten also in beiden Fällen eine Methode.

Andere Tipps

Ich verstehe die Frage als „Warum ist es eine Methode, keine Eigenschaft?“.

Ein Grund kann die Konsistenz sein – alle Zugriffsmethoden sind tatsächlich Methoden.Es ist völlig eine Frage des Stils, denn aus reiner Code-Perspektive sehe ich keinen Grund, es nicht als Eigenschaft zu verwenden.

In der Dokumentation wird nicht genau erwähnt, welche Sammlung tatsächlich zur Verarbeitung des Stapels verwendet wird, aber im Grunde gibt es keine andere, effizientere Möglichkeit, Ihnen nur Zugriff auf die „Oberseite“ dieser Sammlung zu gewähren.Wir wissen auch nicht, ob das „oben“ überhaupt das erste oder letzte Element ist. Es ist möglich, dass der Stapel verfolgt, welches Element das „oben“ ist, und die entfernten Elemente nicht wirklich löscht (zumindest nicht jedes Mal, wenn sie). werden entfernt), um zu vermeiden, dass jedes zweite Element verschoben werden muss (wiederum unter der Annahme, dass sie eine Array-ähnliche statt einer verknüpften Listenstruktur verwenden).

Ich würde sagen, da der Wert keine Eigenschaft von ist Stack selbst, aber als Ergebnis der Auswertung des aktuellen Inhalts des Stapels ist meiner Meinung nach eine Methode besser geeignet als eine Eigenschaft.

Und als C.Evenhuis erwähnt in seine Antwort, Spähen ist ein Verb, daher ist eine Methode logischer.Und da „peek“ die gebräuchliche Terminologie für diese Operationen auf Stapeln ist, ist es sinnvoller, diese zu verwenden, als einen neuen/anderen Begriff zu verwenden, nur um eine Eigenschaft zu verwenden.

Ich stimme zu, könnte eine Immobilie sein TopItem oder so, weil das zunächst Sinn macht, aber würde es eine Ausnahme auslösen oder null zurückgeben, wenn es leer ist?Eigenschaften sollten keine Ausnahmen auslösen, laut MSDN.

Aus Quellenangabe von Stack, sehen Sie Code, der zum Auslösen einer bestimmten Ausnahme erforderlich ist.

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

Dies unterscheidet sich nun von der Art und Weise, wie das obige Eigentumskonzept gehandhabt würde.Also einer gegen den anderen.

Bearbeiten – Eigenschaftsdokumentation hinzugefügt.Und zwar nicht die überzeugende Antwort, sondern eine weitere Erklärung der Logik, warum es sich nicht um eine Immobilie handelt.

Dies ist eine Kapselung, deren Zweck darin besteht, den Zugriff auf die Komponenten eines Objekts einzuschränken: http://en.wikipedia.org/wiki/Encapsulation_(objektorientierte_programmierung)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top