![]() |
Delphi-Version: 10 Seattle
Eigene Objekte in Funktionen
Hallo liebe Delphi-Helfer :)
Habe mal wieder ein kleines Problem, was mir aber sehr auf die Nerven geht :D Ich habe eine Funktion:
Code:
Genutzt wird die Funktion wie folgt:
function TOpenForm.Liste(const pcFormulartyp: TFormulartyp; var pcObjekt: TObjekt): Boolean;
Code:
Artikelgroesse und viele viele andere sind von TObjekt abgeleitet.
procedure TForm.ActionExecute(Sender: TObject);
var cObjekt: TArtikelgroesse; begin if not OpenForm.Liste(ftArtikelgroesse, TObjekt(cObjekt)) then Exit; ...
Code:
Statt bei jedem Aufruf "TObjekt(cObjekt)" zu nutzen um es dann im Endformular wieder mit "TArtikelgroesse(cObjekt)" umzuwandeln,
type
TArtikelgroesse = class(TObjekt) würde ich gerne einfach nur "cObjekt" übergeben. Bei "ActionExecute(Sender: TObject)" kann der Sender ja auch jedes Objekt sein, was daraus abgeleitet wurde... OpenForm selbst gibt das Objekt nur an das entsprechende Formular weiter und tut selbst nichts damit. Hat jemand Rat? :lol: |
AW: Eigene Objekte in Funktionen
Der Cast
Delphi-Quellcode:
ist nicht notwendig.
TObjekt(cObjekt)
|
AW: Eigene Objekte in Funktionen
Wenn dem so wäre, hätt ich nichts geschrieben.
Wenn ich es weg lasse, bekomme ich eine Fehlermeldung: "[dcc32 Fehler] ArtikelartBearbeitenForm.pas(64): E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen" |
AW: Eigene Objekte in Funktionen
Zitat:
Bei VAR muß ein Wert rein, also mußt du cObjekt im ActionExecute auch initialisieren. Wenn diese Funktion etwas sucht und dann zurück gibt, dann wäre OUT vielleicht eher deine Wahl? Zitat:
Delphi stellt eigentlich sicher, dass immer mindestens der definierte Typ drin ist, aber hier kann nur TObjekt sichergestellt werden. Darum würde ich vermuten, dass die Variable auch nur genau dem TObjekt entsprechen darf.
Delphi-Quellcode:
function TOpenForm.Liste(const pcFormulartyp: TFormulartyp; var pcObjekt): Boolean;
In der Funktion mußt du dann selber böse casten, aber von extern darfst du ALLES rein geben. Wegen dem ALLES kommt war Böses heraus, wenn jemand kein Objekt da rein gibt. Ich würde eher zu Generics raten.
Delphi-Quellcode:
function TOpenForm.Liste<T>(const pcFormulartyp: TFormulartyp; out pcObjekt: T): Boolean;
Delphi-Quellcode:
function TOpenForm.Liste<T: object>(const pcFormulartyp: TFormulartyp; out pcObjekt: T): Boolean;
|
AW: Eigene Objekte in Funktionen
Hm, in den Beiträgen steht häufig "TObjekt".
Muss es nicht "TObject" heißen? lg Caps |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:02 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