Frage

In .NET, wenn eine Klasse ein Element enthält, das ein Klassenobjekt ist, sollte das Mitglied als Eigenschaft oder mit einem Verfahren ausgesetzt werden?

War es hilfreich?

Lösung

Wenn alles, was Sie tun, ist eine Objektinstanz auszusetzen, die dem Zustand des aktuellen Objekts relevant ist, dass Sie eine Eigenschaft verwenden sollten.

Es sollte ein Verfahren verwendet werden, wenn Sie eine gewisse Logik, die mehr als den Zugriff auf ein im Speicher Objekt tut und diesen Wert zurückkehrt oder wenn Sie eine Aktion durchführen, die eine breite Wirkung auf den Zustand des aktuellen Objekts hat.

Andere Tipps

Sie sollten verwenden, um Eigenschaften für alles, was konzeptionell den Zustand des Objekts darstellt, solange seine Retrieval nicht teuer genug Operation, die Sie vermeiden sollten es wiederholt verwendet wird.

MSDN :

  

Klassenbibliothek Designer müssen oft entscheiden zwischen der Klasse, als eine Eigenschaft oder eine Methode zu implementieren. Im Allgemeinen stellen Methoden Aktionen und Eigenschaften repräsentieren Daten. Verwenden Sie die folgenden Richtlinien, um Ihnen zwischen diesen Möglichkeiten zu wählen.

     
      
  • eine Eigenschaft verwenden, wenn das Element ein logisches Daten Mitglied ist. In den folgenden Elementdeklarationen, Namens- ist eine Eigenschaft, weil es ein logisches Mitglied der Klasse ist.

    public string Name
    get 
    {
        return name;
    }
    set 
    {
        name = value;
    }
    
  •   
  • ein Verfahren verwenden, wenn:

         
        
    • Die Operation ist eine Umwandlung, wie Object.ToString.
    •   
    • Die Operation ist teuer genug, dass man den Benutzer kommunizieren will, dass sie in Betracht ziehen sollten das Ergebnis Caching.
    •   
    • Beziehen eines Eigenschaftswert den get-Accessor verwendet würde eine beobachtbare Nebenwirkung haben.
    •   
    • zweimal das Mitglied Aufruf in Folge zu unterschiedlichen Ergebnissen.
    •   
    • Die Reihenfolge der Ausführung ist wichtig. Beachten Sie, dass die Eigenschaften einer Art sollte in der Lage sein und eingestellt werden abgerufen in beliebiger Reihenfolge.
    •   
    • Das Mitglied ist statisch, sondern einen Wert zurückgibt, der geändert werden kann.
    •   
    • Das Element gibt ein Array. Eigenschaften, die Arrays zurückgeben können sehr irreführend sein. Normalerweise ist es notwendig, eine Kopie des internen Array zurück, so dass der Benutzer nicht einen internen Zustand ändern kann. Dies, gepaart mit der Tatsache, dass ein Benutzer leicht annehmen kann es sich um eine indizierte Eigenschaft ist, führt zu einer ineffizienten Code. Im folgenden Codebeispiel erzeugt jeder Aufruf der Methoden Eigenschaft eine Kopie des Arrays. Als Ergebnis 2n + 1 Kopien des Arrays werden in der folgenden Schleife erstellt werden.

      Type type = // Get a type.
      for (int i = 0; i < type.Methods.Length; i++)
      {
         if (type.Methods[i].Name.Equals ("text"))
         {
            // Perform some operation.
         }
      }
      
    •   
  •   
     

Das folgende Beispiel zeigt die korrekte Verwendung von Eigenschaften und Methoden.

    class Connection
    {
       // The following three members should be properties
       // because they can be set in any order.
       string DNSName {get{};set{};}
       string UserName {get{};set{};}
       string Password {get{};set{};}

       // The following member should be a method
       // because the order of execution is important.
       // This method cannot be executed until after the 
       // properties have been set.
       bool Execute ();
    }

Das ist irrelevant für die Sache.

Es sollte eine Eigenschaft sein, wenn der Wert einige Details über den Zustand des Objekts ist.

Es sollte Methode sein, wenn es eine Aktion auf dem Objekt führt.

Property. Eine Eigenschaft ist im Grunde nur eine ‚billige‘ Methode. Erste oder einen Verweis auf ein Objekt Einstellung ist ziemlich billig.

Nur um klären, sind Eigenschaften in der Regel soll den internen Zustand eines Objekts repräsentieren. Allerdings sagt die Umsetzung eines Mitglieds als eine Eigenschaft oder eine Methode der Benutzer, wie teuer der Anruf wahrscheinlich sein.

Eigenschaften lesen und Werte Instanzen innerhalb einer Klasse zugeordnet werden.

Methoden etwas tun, mit den zur Klasse zugeordneten Daten.

Übersicht

Im allgemeinen Eigenschaften Speicher von Daten für ein Objekt, wie Name und Methoden sind Aktionen, ein Objekt aufgefordert werden kann, durchzuführen, wie Verschieben oder anzeigen . Manchmal ist es nicht klar, welche Klasse Mitglieder Eigenschaften sein sollten und welche Methoden sein sollten - das Item Methode einer Sammlung Klasse (VB) speichert und Daten abruft und können als indizierte Eigenschaft implementiert werden. Auf der anderen Seite wäre es auch sinnvoll sein, zu implementieren Artikel als Methode.

Syntax

Wie ein Klassenmitglied wird verwendet werden, könnte auch ein bestimmender Faktor sein, ob es als eine Eigenschaft oder eine Methode dargestellt werden soll. Die Syntax für Informationen aus einer parametrisierten Eigenschaft Abrufen ist nahezu identisch mit der Syntax für ein Verfahren als eine Funktion implementiert eingesetzt. Jedoch ist ein solcher Wert ist die Syntax für die Modifizierung ist etwas anders.

Wenn Sie das Mitglied einer Klasse als Eigenschaft implementieren, müssen Sie ändern es Wert ist auf diese Weise:

ThisObject.ThisProperty (Index) = NewValue

, wenn die Teilnehmer, als ein Verfahren implementiert wird, wobei der Wert verändert werden muß modifiziert ein Argument verwendet:

ThisObject.ThisProperty (Index, NewValue)

Fehler

Ein Versuch, einen Wert in eine schreibgeschützte Eigenschaft zuweisen wird eine andere Fehlermeldung als ein ähnlicher Aufruf einer Methode zurück. Korrekt implementiert die Teilnehmer zurückgeben Fehlermeldungen, die zu interpretieren leichter sind.

ich verwirrt über die Verwendung von Eigenschaften und Methoden vor. Aber jetzt bin ich mit dieser Regel nach MSDN-Richtlinie :

Methoden repräsentieren Aktionen und Eigenschaften Daten darstellen. Eigenschaften sollen wie Felder verwendet werden, was bedeutet, dass Eigenschaften nicht rechnerisch komplex sein sollten oder Nebenwirkungen. Wenn es nicht die folgenden Richtlinien verstoßen, sollten Sie eine Eigenschaft verwenden, sondern als ein Verfahren, weil weniger erfahrenen Entwickler Eigenschaften leichter finden können.

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