![]() |
Delphi-Version: 5
Konstrukt wie on...do für die allgemeine Nutzung?
Ganz grundlegende Frage: Mir gefällt das Konstrukt on...do im except-Block: Prüft, ob die Exception von einem bestimmten Typ ist, und wenn dann erhält man eine Variable von diesem Typ. Gibt es etwas Vergleichbares auch für die Nutzung außerhalb von except? Klar, es gibt
Delphi-Quellcode:
, aber das würde ich gern vermeiden.
if X is Y then with X as Y do
|
AW: Konstrukt wie on...do für die allgemeine Nutzung?
Klingt irgendwie nach Generics.
|
AW: Konstrukt wie on...do für die allgemeine Nutzung?
Zitat:
|
AW: Konstrukt wie on...do für die allgemeine Nutzung?
Zitat:
|
AW: Konstrukt wie on...do für die allgemeine Nutzung?
Bei Interfaces gibt es Supports:
Delphi-Quellcode:
Für Klassen gibt es das m.E. nicht.
if Supports(aIntf, IMyIntf, MyIntf) then
begin MyIntf.DoIt; end; |
AW: Konstrukt wie on...do für die allgemeine Nutzung?
Vielleicht kommt
Delphi-Quellcode:
dem noch am nächsten. Allerdings braucht man dann für jeden Fall eine entsprechend deklarierte Variable. Das ließe sich aber vielleicht wieder über Inline-Variablen lösen. Bleibt aber immer noch ziemlich unelegant:
TValue.TryAsType<T>
Delphi-Quellcode:
var V: TValue := TValue.From<TComponent>(FindComponent('MyName'));
var btn: TButton; if V.TryAsType<TButton>(btn) then begin btn.Click; end; var edt: TEdit; if V.TryAsType<TEdit>(edt) then begin edt.Clear; end; |
AW: Konstrukt wie on...do für die allgemeine Nutzung?
Man kann es aber auch so machen, obwohl ich stark bezweifle, ob das wirklich sinnvoll ist:
Delphi-Quellcode:
try
if Odd(Random(2)) then raise TButton.Create(nil) else raise TEdit.Create(nil); except on instance: TButton do instance.Click; on instance: TEdit do instance.Clear; end; |
AW: Konstrukt wie on...do für die allgemeine Nutzung?
Das nenne ich mal kreativ! Auch wenn es schon deutlich über Missbrauch hinaus geht :lol:
|
AW: Konstrukt wie on...do für die allgemeine Nutzung?
Zitat:
|
AW: Konstrukt wie on...do für die allgemeine Nutzung?
Zumindest bei Funktionsparametern gibt es etwas was du tun kannst:
Delphi-Quellcode:
Weiß nicht ob dir das vllt. weiterhilft.
procedure TForm2.FormCreate(Sender: TObject);
var form: TForm absolute Sender; begin if Sender is TForm then form.Caption := 'Test'; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:56 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