Teilen über


Immobiliengestaltung

Hinweis

Dieser Inhalt wird mit Genehmigung von Pearson Education, Inc. aus Framework Design Guidelines: Konventionen, Idiome und Muster für wiederverwendbare .NET-Bibliotheken, 2. Auflage nachgedruckt. Diese Ausgabe wurde 2008 veröffentlicht, und das Buch wurde seitdem in der dritten Ausgabe vollständig überarbeitet. Einige der Informationen auf dieser Seite sind möglicherweise veraltet.

Obwohl Eigenschaften technisch sehr ähnlich wie Methoden sind, unterscheiden sie sich hinsichtlich ihrer Nutzungsszenarien ganz anders. Sie sollten als intelligente Felder betrachtet werden. Sie verfügen über die aufrufende Syntax von Feldern und die Flexibilität von Methoden.

✔️ Erstellen Sie get-only Eigenschaften, wenn der Aufrufer den Wert der Eigenschaft nicht ändern können soll.

Denken Sie daran, dass der Eigenschaftswert geändert werden kann, wenn der Typ der Eigenschaft ein veränderbarer Bezugstyp ist, auch wenn die Eigenschaft nur get-only ist.

❌ STELLEN SIE KEINE SET-ONLY-Eigenschaften oder Eigenschaften bereit, deren Setter eine breitere Zugänglichkeit als der Getter haben.

Verwenden Sie beispielsweise keine Eigenschaften mit einem öffentlichen Setter und einem geschützten Getter.

Wenn der Eigenschaften-Getter nicht bereitgestellt werden kann, implementieren Sie stattdessen die Funktionalität als Methode. Erwägen Sie, den Methodennamen mit Set zu beginnen und dann mit dem fortzufahren, wie Sie die Eigenschaft benannt hätten. Beispielsweise hat AppDomain eine Methode namens SetCachePath anstelle einer set-only-Eigenschaft namens CachePath.

✔️ DO stellt vernünftige Standardwerte für alle Eigenschaften bereit, um sicherzustellen, dass die Standardwerte nicht zu einem Sicherheitsloch oder einem furchtbar ineffizienten Code führen.

✔️ DO lässt die Festlegung von Eigenschaften in beliebiger Reihenfolge zu, auch wenn dies zu einem temporären ungültigen Zustand des Objekts führt.

Es ist üblich, dass zwei oder mehr Eigenschaften mit einem Punkt verknüpft werden, an dem einige Werte einer Eigenschaft aufgrund der Werte anderer Eigenschaften für dasselbe Objekt ungültig sein können. In solchen Fällen sollten Ausnahmen, die sich aus dem ungültigen Zustand ergeben, verschoben werden, bis die miteinander verbundenen Eigenschaften tatsächlich vom Objekt verwendet werden.

Bewahren Sie den vorherigen Wert, wenn ein Eigenschafts-Setter eine Ausnahme auslöst.

❌ VERMEIDEN Sie das Auslösen von Ausnahmen von Eigenschaften-Gettern.

Gettermethoden sollten einfache Vorgänge sein und keine Voraussetzungen haben. Wenn ein Getter eine Ausnahme auslösen kann, sollte es wahrscheinlich neu gestaltet werden, um eine Methode zu sein. Beachten Sie, dass diese Regel nicht für Indexer gilt, bei denen Ausnahmen aufgrund der Überprüfung der Argumente erwartet werden.

Entwurf einer indizierten Eigenschaft

Eine indizierte Eigenschaft ist eine spezielle Eigenschaft, die Parameter aufweisen kann und mit spezieller Syntax aufgerufen werden kann, die der Arrayindizierung ähnelt.

Indizierte Eigenschaften werden häufig als Indexer bezeichnet. Indexer sollten nur in APIs verwendet werden, die den Zugriff auf Elemente in einer logischen Auflistung ermöglichen. Beispielsweise ist eine Zeichenfolge eine Gruppe von Zeichen, und der Indexer auf System.String wurde hinzugefügt, um auf ihre Zeichen zuzugreifen.

✔️ ERWÄGEN SIE die Verwendung von Indexern, um Zugriff auf daten bereitzustellen, die in einem internen Array gespeichert sind.

✔️ ERWÄGEN SIE, Indexer für Typen bereitzustellen, die Sammlungen von Elementen darstellen.

❌ VERMEIDEN Sie die Verwendung von indizierten Eigenschaften mit mehr als einem Parameter.

Wenn für das Design mehrere Parameter erforderlich sind, sollten Sie überdenken, ob die Eigenschaft tatsächlich einen Accessor für eine logische Auflistung darstellt. Wenn dies nicht der Fall ist, verwenden Sie stattdessen Methoden. Erwägen Sie, den Methodennamen mit Get oder Set beginnen.

❌ VERMEIDEN SIE Indexer mit anderen Parametertypen als System.Int32, System.Int64, , System.String, System.Objectoder einer Enumeration.

Wenn für das Design andere Parametertypen erforderlich sind, überprüfen Sie gründlich, ob die API tatsächlich ein Zugriffsobjekt für eine logische Auflistung darstellt. Wenn dies nicht der Fall ist, verwenden Sie eine Methode. Erwägen Sie, den Methodennamen mit Get oder Set beginnen.

✔️ Verwenden Sie den Namen Item für indizierte Eigenschaften, es sei denn, es existiert ein offensichtlich besserer Name (z. B. die Eigenschaft Chars[] von System.String).

In C# werden Indexer standardmäßig als Item bezeichnet. Dies IndexerNameAttribute kann verwendet werden, um diesen Namen anzupassen.

❌ Bieten Sie nicht sowohl einen Indexer als auch Methoden an, die semantisch äquivalent sind.

❌ Stellen Sie nicht mehr als eine Familie überladener Indexer in einem Typ bereit.

Dies wird vom C#-Compiler erzwungen.

❌ Verwenden Sie keine benutzerdefinierten indizierten Eigenschaften.

Dies wird vom C#-Compiler erzwungen.

Ereignisse zur Benachrichtigung über Eigenschaftsänderungen

Manchmal ist es nützlich, ein Ereignis bereitzustellen, das den Benutzer über Änderungen in einem Eigenschaftswert benachrichtigt. `System.Windows.Forms.Control löst beispielsweise ein TextChanged Ereignis aus, nachdem sich der Wert seiner Text Eigenschaft geändert hat.`

✔️ ERWÄGEN Sie das Auslösen von Änderungsbenachrichtigungsereignissen, wenn Eigenschaftswerte in allgemeinen APIs (in der Regel Designerkomponenten) geändert werden.

Wenn es ein gutes Szenario für einen Benutzer gibt, zu wissen, wann eine Eigenschaft eines Objekts geändert wird, sollte das Objekt ein Änderungsbenachrichtigungsereignis für die Eigenschaft auslösen.

Es ist jedoch unwahrscheinlich, dass es den Aufwand wert ist, solche Ereignisse für APIs auf niedriger Ebene wie Basistypen oder Auflistungen auszuheben. Ein solches Ereignis würde zum Beispiel nicht ausgelöst werden, wenn List<T> der Liste ein neues Element hinzugefügt wird und sich die Count Eigenschaft ändert.

✔️ Überlegen Sie, Änderungsbenachrichtigungsereignisse auszulösen, wenn sich der Wert einer Eigenschaft durch äußere Einflüsse ändert.

Wenn sich ein Eigenschaftswert durch einen externen Einfluss ändert (anders als durch das Aufrufen von Methoden am Objekt), melden Ereignisse dem Entwickler, dass der Wert sich ändert und geändert hat. Ein gutes Beispiel ist die Text Eigenschaft eines Textfeld-Steuerelements. Wenn der Benutzer Text in eingibt TextBox, ändert sich der Eigenschaftswert automatisch.

© Teile 2005, 2009 Microsoft Corporation. Alle Rechte vorbehalten.

Nachdruck mit freundlicher Genehmigung von Pearson Education, Inc., aus dem Buch Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition von Krzysztof Cwalina und Brad Abrams, veröffentlicht am 22. Oktober 2008 von Addison-Wesley Professional als Teil der Microsoft Windows Development Series.

Siehe auch