Was sind gute Anwendungen für Klasse Helfer?
Delphi (und wahrscheinlich eine Menge anderer Sprachen) hat Klasse Helfer. Diese bieten eine Möglichkeit zum hinzufügen von zusätzlichen Methoden zu einer existierenden Klasse. Ohne eine Unterklasse.
Also, was sind gute Anwendungen für Klasse Helfer?
InformationsquelleAutor Toon Krijthe | 2008-10-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mit Ihnen:
Methoden hinzufügen, die TStrings-Klasse, so kann ich mit den gleichen Methoden in mein abgeleiteten Listen und im TStringList-Objekt.
Zu vereinfachen den Zugriff auf record-Felder und entfernen Gießen.
InformationsquelleAutor gabr
Zuerst war ich etwas skeptisch über die Klasse Helfer. Aber dann Las ich einen interessanten blog-Eintrag und jetzt bin ich davon überzeugt, dass Sie tatsächlich nützlich.
Zum Beispiel, wenn Sie zusätzliche Funktionalität, die für eine vorhandene Instanz der Klasse, und aus irgendeinem Grund sind Sie nicht in der Lage, ändern Sie die vorhandene Quelle. Sie können eine Klasse erstellen Helfer, um diese Funktionalität hinzuzufügen.
Beispiel:
Jedes mal, verwenden wir nun eine Instanz (eine Unterklasse von) TStrings, und TStringsHelper ist im Rahmen. Wir haben Zugriff auf die Methode IsEmpty.
Beispiel:
Hinweise:
KLASSE Helfer können Erben von einer anderen KLASSE Helfer, so können Sie - in-Effekt - mehrere KLASSE Helfer aktiv zur gleichen Zeit (aber Sie müssen wissen, jeder andere, und Sie können so nur eine kontinuierliche "string" - KLASSE Helfer aktiv, dh. wenn Sie Helper1, und Helper2 erbt von Helper1, und Helfer3 erbt von Helper2, dann können Sie nicht nur Helfer3 aktiven (ohne einige Direktiven für bedingte Kompilierung), muss aber alle drei Helfer im scope - Sie können nur Helper1, nur Helper1+Helper2 oder alle drei gleichzeitig aktiv - keine Helper1+Helfer3).
InformationsquelleAutor Toon Krijthe
Diese klingt sehr viel, wie erweiterungsmethoden in C#3 (und VB9). Die beste Verwendung die ich gesehen habe für Sie die extensions zu
IEnumerable<T>
(undIQueryable<T>
), mit LINQ arbeiten gegen beliebige Sequenzen:(oder was auch immer, natürlich). All dies ist machbar, weil die Erweiterung Methoden können Sie effektiv Kette zusammen Aufrufe von statischen Methoden, die den gleichen Typ wie Sie zurückkehren.
Welche Delphi-version du redest, das hatte Klasse Helfer seit dem Jahr 2000? Ich erinnere nur an das Lesen über Sie, wenn Sie waren in Delphi 2007 eine non-breaking release. Das war 6 Jahre nach dem Jahr, die Sie behaupten, dass Delphi hatte.
Klasse Helfer wurden Hinzugefügt Delphi in Delphi 8 (die erste version von Delphi für .NET).
Hast du auch das patent, die Unfähigkeit, für mehr als ein Helfer gleichzeitig aktiv sein?
InformationsquelleAutor Jon Skeet
Sind Sie sehr nützlich für plugins. Zum Beispiel, sagen wir Ihr Projekt definiert eine bestimmte Struktur der Daten und es ist gespeichert auf CD in einer bestimmten Weise. Aber dann ein anderes Programm hat etwas sehr ähnlich, aber die Daten-Datei ist unterschiedlich. Aber Sie wollen nicht, aufblasen Ihrer EXE-Datei mit einer Reihe von import-code für ein feature, dass viele Benutzer nicht brauchen, um zu verwenden. Sie können ein Plug-in framework und Importeure setzen in einem plugin arbeiten würde wie diese:
Und definieren Sie dann den Konverter. Eine Einschränkung: eine Klasse Helfer ist nicht eine Klasse Freund. Diese Technik funktioniert nur, wenn es möglich ist, komplett die Einrichtung eines neuen TMyClass Objekt durch seine öffentlichen Methoden und Eigenschaften. Aber wenn Sie können, es funktioniert wirklich gut.
InformationsquelleAutor Mason Wheeler
Das erste mal, ich erinnere mich, zu erleben, was Sie fordern "Klasse Helfer" war, während das lernen Objective C. Kakao (Apple ' s Objective-C framework) verwendet, die sogenannten "Kategorien."
Einer Kategorie können Sie eine vorhandene Klasse erweitern, indem Sie hinzufügen Sie eigene Methoden ohne Unterklassen. In der Tat Kakao ermutigt Sie, Unterklassen vermeiden, wenn möglich. Oft macht es Sinn, Unterklasse, aber oft kann es vermieden werden, mit Hilfe von Kategorien.
Ein gutes Beispiel für die Verwendung einer Kategorie in Kakao ist das, was heißt "Schlüssel-Wert-Code (KVC)" und "Key-Value-Observing (KVO)."
Diesem system umgesetzt wird anhand von zwei Kategorien (NSKeyValueCoding und NSKeyValueObserving). Diese Kategorien definieren und implementieren Sie Methoden, die Hinzugefügt werden können, um jede Klasse, die Sie möchten. Zum Beispiel Kakao fügt hinzu: "Konformität" zu KVC/KVO mithilfe dieser Kategorien hinzufügen von Methoden zu NSArray wie:
NSArray-Klasse weder eine Erklärung noch eine Implementierung dieser Methode. Jedoch, durch die Verwendung der Kategorie. Sie können rufen Sie diese Methode auf jeden NSArray-Klasse. Sie sind nicht erforderlich, um eine Unterklasse NSArray zu gewinnen KVC/KVO-Konformität.
Verwendung dieser Technik erleichtert das hinzufügen von KVC/KVO-Unterstützung für Ihre eigenen Klassen. Java-Schnittstellen ermöglichen Ihnen das hinzufügen Methodendeklarationen, aber Kategorien können Sie auch hinzufügen, die eigentlichen Implementierungen der vorhandenen Klassen.
InformationsquelleAutor Robert Walker
Als GameCat zeigt, TStrings ist ein guter Kandidat, um zu vermeiden, dass einige schreiben:
Haben Sie jemals brauchen werden, um Zugriff auf multi-line-strings in der registry?
Vereinbart ist, dass ist ein bisschen off. Ich benutze aber Klasse Helfer, die meist im engen Rahmen, so war dies nicht ein Thema gewesen - bis jetzt...
InformationsquelleAutor Uwe Raabe
Ich würde nicht empfehlen, Sie zu nutzen, da lese ich diesen Kommentar:
http://davidglassborow.blogspot.com/2006/05/class-helpers-good-or-bad.html
nicht einmal Hinweise, dies bedeutet, dass die Entwickler haben nun die überprüfung aller Quellen von Drittanbieter-Bibliotheken (nicht nur einmal, sondern für jedes update zu) erkennen "conflict helpers" ...
InformationsquelleAutor mjn
Ich gesehen habe Sie verwendet für die Herstellung von verfügbaren Klassen-Methoden konsistent Klassen: Hinzufügen zu Öffnen/Schließen und ein - /Ausblenden, um alle Klassen, die von einem bestimmten "Typ" anstatt nur Aktive und Sichtbare Eigenschaften.
InformationsquelleAutor Jamo