![]() |
Re: Object in Variable sichern?
Zitat:
|
Re: Object in Variable sichern?
Ok, dann bin ich erstmal glucklitsch :-D
Vielen Dank für die Antworten !! :hello: |
Re: Object in Variable sichern?
Moin nochmal ...
Öhm so ganz scheint das aber noch nicht zu gehen. Wenn ich folgendes schreibe:
Delphi-Quellcode:
Dann müsste ich doch mittels LastObject auf Funktionen von SpectraII zugreifen können oder nicht?
LastObject := SpectraII;
Weil das bräuchte ich auch ... Das funktioniert aber so nicht, denn ich bekomme den Fehler "[Fehler] DeviceUtils.pas(1023): Undefinierter Bezeichner: 'IsLogData'" Der Aufruf war:
Delphi-Quellcode:
Wie kriege ich das denn hin das LastObject.IsLogData funktioniert?
LastObject.IsLogData(Data);
|
Re: Object in Variable sichern?
Nein, Du kannst nur auf die Methoden und Eigenschaften der Basisklasse (hier: TObject) zugreifen.
Abhilfe schafft ein Typecasting:
Delphi-Quellcode:
Daher der Tipp mit der Basisklasse und den virtuellen Methoden.
TSpectraII(LastObject).IsLog(Data);
|
Re: Object in Variable sichern?
Ah ok. Das hilft mir weiter.
Vielen Dank ! |
Re: Object in Variable sichern?
LastObject ist als TObject deklariert. Der Compiler kann also nicht wissen, dass deine eigene Klasse dahintersteckt. Du musst also entweder einen Typecast machen:
Delphi-Quellcode:
ein weicher cast ist übrigens meist vorzuziehen, dabei wird eine überprüfung vorgenommen, ob auch wirklich das richtige objekt vorliegt.
TSpectraII(LastObject).IsLog(Data); //hart
(LastObject as TSpectraII).IsLog(Data); //weich ansonsten solltest du eine basisklasse definieren, die diese methode bereits enthält, wie rwachtel geschrieben hat. das geht so:
Delphi-Quellcode:
das schlüsselwort "virtual" besagt, dass die methode in einer nachfolgerklasse überschrieben werden kann, "abstract", dass sie in dieser Klasse nicht implementiert (=ausprogrammiert) wird.
type
TDevice = class {abstract} (TObject); //class abstract funktioniert ab Delphi 2005 public function IsLogData: Boolean; virtual; abstract; end; überschrieben wird sie dann so:
Delphi-Quellcode:
override sorgt dafpr, dass der aufruf von IsLogData nicht auf die abstrakte Methode des vorgängers prallt, sondern auf die tatsächliche klasse umgeleitet wird.
type
TSpectraII = class(TDevice) public function IsLogData; override; end; |
Re: Object in Variable sichern?
Zitat:
|
Re: Object in Variable sichern?
Zitat:
|
Re: Object in Variable sichern?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:49 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