Einzelnen Beitrag anzeigen

DSCHUCH

Registriert seit: 6. Jun 2007
Ort: Dresden
185 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

Zugriff auf procedure und funktionen nicht instanziierter Klassen / Objekte

  Alt 11. Feb 2013, 20:56
Delphi-Version: XE
Hallo allerseits, ich bin heute nach vielen Jahren Softwareentwicklung mal wieder aus allen Wolken gefallen. Ich habe gelernt: (in Delphi?) kann auf alle Funktionen/Proceduren einer Klasse (variable) zugegriffen werden, egal ob instanziiert oder nicht.

ich habe etwas recherchiert und hier ist es auch ganz gut erklärt, wobei die erklärung am ende heißt: es ist in delphi so, da constructor und destructor.... : http://stackoverflow.com/questions/8...freeing-things

jedenfalls heißt dies, ich kann jede procedure einer klasse starten, egal ob die klasse instanziiert wurde, oder nicht. erstelle ich zB eine

Delphi-Quellcode:
procedure myform.ButtonClick;
...
myClass.doSomething(TMyInputClass.Create(Edit1.Text));


procedure TmyClasss.doSomething(InputKlasse : TMyInputClass);
begin
 If InpuKlasse.Stauts1 then
    Result:='X'
   else
    Result:=Self.Y
end;
kann ich mir nicht sicher sein, das object auf das ich zugreife überhaupt instanziiert ist, weil funktionen funktionen in bestimmten zuständen trotzdem durchlaufen werden. somit wird mir jetzt auch klar wieso man soviele "schwachsinnige" fehlermeldungen erhält, welche an nicht zuordenbaren stellen ausgelöst werden. je nachdem ob "zufällig" auf eine Variable des Objects zugegriffen wird, erhalte ich eine Fehlermeldung und ansonsten nicht.

ist dies in anderen Sprachen auch so? für mich war bisher immer ein paradigma: ich kann nur auf elemente einer instanziierten Klasse zugreifen. (ausnahmen sind zB "class procedure", "class var").

insbesondere beim schliessen einer Anwendung ist das ja interessant: je nachdem welcher finalization abschnitt zuerst durchlaufen wird, bzw. wie die erstellungsreihenfolge und somit freigabereihenfolge ist, habe ich unterschiedliche zustände und erhalte fehlermeldungen von "klassen", die vor "ewigkeiten" freigegeben wurden nur, weil zufällig eine reihe von proceduren/properties aufeinandergetroffen ist, welche nicht nachvollziehbar ist und die fehlermeldung von ganz woanders herführt, wo ein NIL-zeiger ist, der sozusagen trotzdem ausgeführt wird?!

somit ist ja auch sogleich ein stacktrace alla eurekalog/madexcept teilweise unbrauchbar. habe ich in meinem stacktrace 10 unterschiedliche klassen, ist nicht nachvollziehbar welche davon nun tatsächlich nil war, da ja "blind" alles ausgelöst wird bis eben "zufällig" auf eine lokale klassenvariable zugegriffen wird.
  Mit Zitat antworten Zitat