AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Eigene Objekte in Funktionen

Ein Thema von Jakane · begonnen am 22. Apr 2018 · letzter Beitrag vom 4. Mai 2018
Antwort Antwort
Jakane

Registriert seit: 1. Jun 2012
Ort: Ansbach
13 Beiträge
 
Delphi 5 Standard
 
#1

Eigene Objekte in Funktionen

  Alt 22. Apr 2018, 19:45
Delphi-Version: 10 Seattle
Hallo liebe Delphi-Helfer

Habe mal wieder ein kleines Problem, was mir aber sehr auf die Nerven geht

Ich habe eine Funktion:
Code:
function TOpenForm.Liste(const pcFormulartyp: TFormulartyp; var pcObjekt: TObjekt): Boolean;
Genutzt wird die Funktion wie folgt:
Code:
procedure TForm.ActionExecute(Sender: TObject);
var
  cObjekt: TArtikelgroesse;
begin
  if not OpenForm.Liste(ftArtikelgroesse, TObjekt(cObjekt)) then
    Exit;

...
Artikelgroesse und viele viele andere sind von TObjekt abgeleitet.
Code:
type
  TArtikelgroesse = class(TObjekt)
Statt bei jedem Aufruf "TObjekt(cObjekt)" zu nutzen um es dann im Endformular wieder mit "TArtikelgroesse(cObjekt)" umzuwandeln,
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Eigene Objekte in Funktionen

  Alt 22. Apr 2018, 19:48
Der Cast TObjekt(cObjekt) ist nicht notwendig.
Markus Kinzler
  Mit Zitat antworten Zitat
Jakane

Registriert seit: 1. Jun 2012
Ort: Ansbach
13 Beiträge
 
Delphi 5 Standard
 
#3

AW: Eigene Objekte in Funktionen

  Alt 22. Apr 2018, 19:55
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"
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.014 Beiträge
 
Delphi 12 Athens
 
#4

AW: Eigene Objekte in Funktionen

  Alt 22. Apr 2018, 19:58
Zitat:
OpenForm selbst gibt das Objekt nur an das entsprechende Formular weiter und tut selbst nichts damit.
Warum dann VAR, wenn es nur durchgereicht aber nicht geändert wird?

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?


Der Cast TObjekt(cObjekt) ist nicht notwendig.
Bei einem IN-Parameter stimmt das, aber bei einem VAR/OUT-Parameter?
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.


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.

function TOpenForm.Liste<T>(const pcFormulartyp: TFormulartyp; out pcObjekt: T): Boolean;

function TOpenForm.Liste<T: object>(const pcFormulartyp: TFormulartyp; out pcObjekt: T): Boolean;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (22. Apr 2018 um 20:01 Uhr)
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#5

AW: Eigene Objekte in Funktionen

  Alt 4. Mai 2018, 09:31
Hm, in den Beiträgen steht häufig "TObjekt".
Muss es nicht "TObject" heißen?

lg Caps
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  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 12:40 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