AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fluent Interface - keine Vererbung möglich?

Ein Thema von hschmid67 · begonnen am 29. Okt 2017 · letzter Beitrag vom 2. Nov 2017
Antwort Antwort
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#1

AW: Fluent Interface - keine Vererbung möglich?

  Alt 29. Okt 2017, 15:09
Der Begriff "Fluent Interface" war mir zwar nicht bekannt, aber nach der Betrachtung des Wikipedia-Artikels würde ich sagen, dass es nicht geht, ohne den Source Code zu ändern.

Unter Delphi könntest du dir aber ggf. mit einem class helper behelfen. Auch wenn ich class helper eher als Hack ansehe, nicht zuletzt weil man maximal einen helper pro Klasse haben kann. Außerdem kann man glaube ich keinen neuen Felder hinzufügen, nur (nicht-virtuelle) Methoden.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.196 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Fluent Interface - keine Vererbung möglich?

  Alt 29. Okt 2017, 21:39
Was du suchst ist "Koviarianz bei Rückgabetypen" - Also dass die Rückgabe von TuEtwas() in Vererbungsrichtung weiter eingeschränkt werden kann: Während TKlasseA.TueEtwas() ein TKlasseA zurückgibt könnte TKlasseB.TuEtwas() doch ein TKlasseB zurückgeben da TKlasseB doch nur eine Unterklasse von TKlasseA ist.

In Delphi leider nicht möglich
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.117 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Fluent Interface - keine Vererbung möglich?

  Alt 30. Okt 2017, 07:59
TuEtwas sieht irgendwie aus wie ein halber Konstruktor (der ja immer sich selbst zurückgibt), aber das geht auch nicht, weil ein Konstruktor eine class function ist, oder?
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.196 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Fluent Interface - keine Vererbung möglich?

  Alt 30. Okt 2017, 08:29
TuEtwas() wird sich selbst zurückgeben. Ein Beispiel in der Delphi-Bibliothek ist der TStringBuilder:

Delphi-Quellcode:
myStringBuilder := TStringBuilder.Create();
try
   myStringBuilder
      .Append('Hallo Welt')
      .AppendLine()
      .Append(42)
      .Replace('Hallo', 'Tschüss')
      .AppendLine();

   someText = myStringBuilder.ToString();
finally
   myStringBuilder.Destroy();
end;
  Mit Zitat antworten Zitat
hschmid67

Registriert seit: 2. Jul 2012
Ort: Weilheim i. Obb.
75 Beiträge
 
Delphi 12 Athens
 
#5

AW: Fluent Interface - keine Vererbung möglich?

  Alt 31. Okt 2017, 18:07
Danke für Eure Antworten - Es scheint also so, dass ich mit meinen Vermutungen recht hatte, und eine Vererbung nicht möglich ist. Schade!

Aber danke für's Mitdenken!

Viele Grüße
Harald
Harald Schmid
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.196 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Fluent Interface - keine Vererbung möglich?

  Alt 31. Okt 2017, 18:28
Je nachdem was du vorhast würde ich es aber, wie vorgeschlagen, mit class helper machen. Solange man es nicht übertreibt...
  Mit Zitat antworten Zitat
hschmid67

Registriert seit: 2. Jul 2012
Ort: Weilheim i. Obb.
75 Beiträge
 
Delphi 12 Athens
 
#7

AW: Fluent Interface - keine Vererbung möglich?

  Alt 31. Okt 2017, 18:32
Ja, danke nochmal für den Hinweis. Vielleicht sollte ich doch mal drüber nachdenken?! Ich habe die Class Helper eigentlich als "unbrauchbar" für mich eingestuft und grundsätzlich abgetan. Da man nur einen Helper verwenden kann und in größerem Code meiner Meinung nach keinen Überblick darüber behalten kann, welcher Helper denn ggf. aktiv wird, schien es mir kein brauchbares Programmiermittel und daraus resultierend kein guter Code zu sein... Aber, vielleicht sollte ich doch nochmal unvoreingenommen dran gehen?

Viele Grüße
Harald Schmid
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz