![]() |
AW: Designfrage: Liste selber schreiben? Oder von TList oder TList<T> ableiten?
Günther hat am Samstag aufgepasst ;)
|
AW: Designfrage: Liste selber schreiben? Oder von TList oder TList<T> ableiten?
Oh ja. Jetzt brauche ich nur noch diese Clean Code-Armbändchen. Oder ich lasse mir CLEAN CODE so auf die Finger tätowieren.
|
AW: Designfrage: Liste selber schreiben? Oder von TList oder TList<T> ableiten?
Zitat:
![]() Zitat:
Zitat:
Zitat:
Zitat:
|
AW: Designfrage: Liste selber schreiben? Oder von TList oder TList<T> ableiten?
Zitat:
![]() PS: Die beiden mittleren Zitate waren von mir, werden aber Uwe zugeschrieben. Verrückte Welt. Wenigstens haftet er jetzt juristisch für alle daraus entstehenden Schäden. |
AW: Designfrage: Liste selber schreiben? Oder von TList oder TList<T> ableiten?
Zitat:
Zitat:
|
AW: Designfrage: Liste selber schreiben? Oder von TList oder TList<T> ableiten?
Zitat:
|
AW: Designfrage: Liste selber schreiben? Oder von TList oder TList<T> ableiten?
Das Buch 'Clean Code' ist wirklich zum empfehlen. Die deutsche Version ist sehr gut geschrieben und verständlich. Gehört ins Regal wie früher Donald Knuth.
|
AW: Designfrage: Liste selber schreiben? Oder von TList oder TList<T> ableiten?
Zitat:
|
AW: Designfrage: Liste selber schreiben? Oder von TList oder TList<T> ableiten?
Zitat:
Dürfte ich dich eventuell aber noch einmal um ein Beispiel für diese Delegation der Implementation von Interfaces bitten? :) Ich find irgendwie nix, dass ich so wirklich verstehe. :oops: |
AW: Designfrage: Liste selber schreiben? Oder von TList oder TList<T> ableiten?
Kurzfassung:
Delphi-Quellcode:
Langfassung:
// Delegiert das Krachmachen an einen TKrachmacher
TWurstfabrik = class(TInterfacedObject, IKrachmacher) private var myKrachmacher: IKrachmacher; protected property krachDelegate: IKrachmacher read myKrachmacher implements IKrachmacher; public constructor Create(); end;
Delphi-Quellcode:
Syntaxmäßig ein bisschen lang.
program Project2;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; type IKrachmacher = interface ['{CB618B3C-8057-4349-8CA3-8047907671A8}'] procedure macheKrach(); end; TKrachmacher = class(TInterfacedObject, IKrachmacher) public procedure macheKrach(); end; // Delegiert das Krachmachen an einen TKrachmacher TWurstfabrik = class(TInterfacedObject, IKrachmacher) private var myKrachmacher: IKrachmacher; protected property krachDelegate: IKrachmacher read myKrachmacher implements IKrachmacher; public constructor Create(); end; { TKrachmacher } procedure TKrachmacher.macheKrach; begin case Random(3) of 0: WriteLn('<Ratter, ratter, quietsch>'); 1: WriteLn('*entweichender Dampf*'); 2: WriteLn('*heulende Sirene*'); end; end; { TWurstfabrik } constructor TWurstfabrik.Create(); begin inherited Create(); myKrachmacher := TKrachmacher.Create(); end; var myKrachmacher: IKrachmacher; begin try myKrachmacher := TWurstFabrik.Create(); myKrachmacher.macheKrach(); myKrachmacher.macheKrach(); myKrachmacher.macheKrach(); except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; ReadLn; end.
Delphi-Quellcode:
kann man nur auf (eigentlich überflüssige) Properties anwenden, nicht direkt auf Felder.
implements
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:20 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 by Thomas Breitkreuz