AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Virtuelle Settermethode... Fachbegriff?

Virtuelle Settermethode... Fachbegriff?

Ein Thema von Iwo Asnet · begonnen am 3. Aug 2012 · letzter Beitrag vom 3. Aug 2012
Antwort Antwort
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#1

Virtuelle Settermethode... Fachbegriff?

  Alt 3. Aug 2012, 10:50
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:
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;
Gibt es einen Fachbegriff/Bezeichnung für die Methode 'IstFertigModified'? Oder ist das irgendwie ein Pattern?
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.605 Beiträge
 
#2

AW: Virtuelle Settermethode... Fachbegriff?

  Alt 3. Aug 2012, 10:57
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#3

AW: Virtuelle Settermethode... Fachbegriff?

  Alt 3. Aug 2012, 11:32
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.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Virtuelle Settermethode... Fachbegriff?

  Alt 3. Aug 2012, 12:11
Sieht ein bisschen nach Schablonenmethode aus, wobei die natürlich viel allgemeiner gehalten ist.
Uli Gerhardt
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#5

AW: Virtuelle Settermethode... Fachbegriff?

  Alt 3. Aug 2012, 13:03
INotifyPropertyChanges erst ab 4.0? Da sagt MSDN aber etwas anderes
http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx

Zitat:
INotifyPropertyChanged Interface
.NET Framework 2.0
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#6

AW: Virtuelle Settermethode... Fachbegriff?

  Alt 3. Aug 2012, 13:06
Und der Link von Phoenix (und die Implementierung in .NET-Listen):
Zitat:
INotifyPropertyChanged Interface
.NET Framework 4
Egal. Du hast trotzdem Recht. Ich könnte das verwenden.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.605 Beiträge
 
#7

AW: Virtuelle Settermethode... Fachbegriff?

  Alt 3. Aug 2012, 13:07
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.
INotifyPropteryChanged gehört zum Databinding und ist spätestens seit .NET 2.0 drin (wenn nicht vielleicht sogar schon in 1, aber das ist so alt, da kann ich mich nicht mehr dran erinnern). Hier der Link zum 2.0er MSDN Eintrag: http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx

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).
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#8

AW: Virtuelle Settermethode... Fachbegriff?

  Alt 3. Aug 2012, 13:10
Aber davon abgesehen - warum 'noch' kein 4.0er?...
Vorgaben. Die Anwendungen müssen auch auf IPC laufen und deren Flash ist ziemlich mickrig.
Die Distributionen für XP > 2.0 sind zu groß.

Ach, und XP läuft auch drauf.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#9

AW: Virtuelle Settermethode... Fachbegriff?

  Alt 3. Aug 2012, 22:35
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;
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:44 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