Virtuelle Settermethode... Fachbegriff?
Hi,
Kurze Frage. Ich habe eine Property mit Setter in einer Basisklasse. Nun möchte ich, das abgeleitete Klassen beim setzen/verändern der Property Aktionen ausführen können, also z.B.
Delphi-Quellcode:
Gibt es einen Fachbegriff/Bezeichnung für die Methode 'IstFertigModified'? Oder ist das irgendwie ein Pattern?
TEssen = Class
Private FIstFertig : Boolean; Protected Procedure SetIstFertig (Value : Boolean); Procedure IstFertigModified(); Virtual; public Property IstFertig : Boolean Read FIstFertig Write SetIstFertig; End; TEssenMitAnderen = Class (TEssen) protected Procedure IstFertigModified(); Override; End; Procedure TEssen.IstFertigModified; Begin End; Procedure TEssen.SetIstFertig(Value : Boolean); Begin If Value = FIstFertig Then Exit; FIstFertig := Value; IstFertigModified(); End; Procedure TEssenMitAnderen.IstFertigModified; Begin If EssenIstFertig Then DenAnderen.Bescheidsagen('Essen ist fertig!'); End; |
AW: Virtuelle Settermethode... Fachbegriff?
In .NET läuft das über das INotifyPropertyChanged Interface mit dem PropertyChanged - Event ab:
http://msdn.microsoft.com/en-us/libr...tychanged.aspx Für das ganze Changetracking-Zeig gibts aber keine expliziten Patterns oder Bezeichnungen. Vermutlich kann man hier recht gut mit dem Observer-Pattern arbeiten, aber das ganze ist eigentlich eher dafür gedacht, dass eine fremde Klassen von aussen die entsprechende Klasse beobachtet. Den Setter selber virtual zu machen würde nur gehen, wenn das backing field protected wäre, was aber wieder die Kapselung aufweichen würde. Ich würde tatsächlich eher ein PropertyChanging / PropertyChanged event anbieten, oder dies mittels virtueller methoden nur für abgeleitete Klassen bereitstellen. Wichtig ist nur, dass man das Konzept, wenn man es denn mal einführt, überall gleich implementiert, damit man bei der Wartung nicht zig unterschiedlichen Implementierungen begegnet. |
AW: Virtuelle Settermethode... Fachbegriff?
Hi Phoenix, woher weißt Du, das ich eigentlich C# meine? ;-)
Leider gibt es das INotifyPropertyChanged erst ab .NET 4.0, das wir hier leider noch nicht einsetzen sollen. An Observer hab ich auch gedacht, aber das passt hier nicht, denn die Instanz soll ja selbst reagieren. Ich lasse das also so und denk mir einen Begriff aus (bin grad an der Dokumentation) Danke für die Info. |
AW: Virtuelle Settermethode... Fachbegriff?
Sieht ein bisschen nach Schablonenmethode aus, wobei die natürlich viel allgemeiner gehalten ist.
|
AW: Virtuelle Settermethode... Fachbegriff?
INotifyPropertyChanges erst ab 4.0? Da sagt MSDN aber etwas anderes
http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx Zitat:
|
AW: Virtuelle Settermethode... Fachbegriff?
Und der Link von Phoenix (und die Implementierung in .NET-Listen):
Zitat:
|
AW: Virtuelle Settermethode... Fachbegriff?
Zitat:
Aber davon abgesehen - warum 'noch' kein 4.0er? Das wurde schon im April 2010 released, ist also mit seinen über 2 Jahren auf dem Buckel gefühlt schon Uralt-Technologie. 4.5 steht ja schon vor der Tür (Release im September). |
AW: Virtuelle Settermethode... Fachbegriff?
Zitat:
Die Distributionen für XP > 2.0 sind zu groß. Ach, und XP läuft auch drauf. |
AW: Virtuelle Settermethode... Fachbegriff?
Also ich weiss nicht warum das so kompliziert sein muss; hier der geradelinige und einfache Ansatz:
Delphi-Quellcode:
TEssen = Class
Private FIstFertig : Boolean; Protected Procedure SetIstFertig(Value : Boolean);virtual; public Property IstFertig : Boolean Read FIstFertig Write SetIstFertig; End; TEssenMitAnderen = Class (TEssen) protected Procedure SetIstFertig(Value : Boolean);override; End; Procedure TEssen.SetIstFertig(Value : Boolean); Begin FIstFertig := Value; End; Procedure TEssenMitAnderen.SetIstFertig(Value : Boolean); Begin inherited SetIstFertig(Value); If Value Then DenAnderen.Bescheidsagen('Essen ist fertig!'); End; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz