AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Object in Variable sichern?

Ein Thema von moelski · begonnen am 17. Aug 2006 · letzter Beitrag vom 17. Aug 2006
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von rwachtel
rwachtel

Registriert seit: 26. Aug 2004
Ort: Köln
530 Beiträge
 
RAD-Studio 2010 Pro
 
#11

Re: Object in Variable sichern?

  Alt 17. Aug 2006, 14:06
Zitat von moelski:
Aha, also funktioniert das so wie ich es gemacht habe? [...]
Ja.
Robert Wachtel
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#12

Re: Object in Variable sichern?

  Alt 17. Aug 2006, 14:07
Ok, dann bin ich erstmal glucklitsch

Vielen Dank für die Antworten !!
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#13

Re: Object in Variable sichern?

  Alt 17. Aug 2006, 14:11
Moin nochmal ...

Öhm so ganz scheint das aber noch nicht zu gehen.

Wenn ich folgendes schreibe:
LastObject := SpectraII; Dann müsste ich doch mittels LastObject auf Funktionen von SpectraII zugreifen können oder nicht?
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:
LastObject.IsLogData(Data); Wie kriege ich das denn hin das LastObject.IsLogData funktioniert?
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von rwachtel
rwachtel

Registriert seit: 26. Aug 2004
Ort: Köln
530 Beiträge
 
RAD-Studio 2010 Pro
 
#14

Re: Object in Variable sichern?

  Alt 17. Aug 2006, 14:17
Nein, Du kannst nur auf die Methoden und Eigenschaften der Basisklasse (hier: TObject) zugreifen.

Abhilfe schafft ein Typecasting: TSpectraII(LastObject).IsLog(Data); Daher der Tipp mit der Basisklasse und den virtuellen Methoden.
Robert Wachtel
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#15

Re: Object in Variable sichern?

  Alt 17. Aug 2006, 14:17
Ah ok. Das hilft mir weiter.

Vielen Dank !
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#16

Re: Object in Variable sichern?

  Alt 17. Aug 2006, 14:23
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:
TSpectraII(LastObject).IsLog(Data); //hart
(LastObject as TSpectraII).IsLog(Data); //weich
ein weicher cast ist übrigens meist vorzuziehen, dabei wird eine überprüfung vorgenommen, ob auch wirklich das richtige objekt vorliegt.

ansonsten solltest du eine basisklasse definieren, die diese methode bereits enthält, wie rwachtel geschrieben hat. das geht so:

Delphi-Quellcode:
type
  TDevice = class {abstract} (TObject); //class abstract funktioniert ab Delphi 2005
  public
    function IsLogData: Boolean; virtual; abstract;
  end;
das schlüsselwort "virtual" besagt, dass die methode in einer nachfolgerklasse überschrieben werden kann, "abstract", dass sie in dieser Klasse nicht implementiert (=ausprogrammiert) wird.

überschrieben wird sie dann so:

Delphi-Quellcode:
type
  TSpectraII = class(TDevice)
  public
    function IsLogData; override;
  end;
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.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#17

Re: Object in Variable sichern?

  Alt 17. Aug 2006, 21:18
Zitat von rwachtel:
Abhilfe schafft ein Typecasting: TSpectraII(LastObject).IsLog(Data);
Er hat mehrere unterschiedliche Klassen in LastObject - das ist in so fern richtig gefährlich einen harten Typecast zu empfehlen - das ist mehr als gefährlich sowas als Antwort zu posten! Harter Typecast wäre ok, wenn vorher der Klassentyp mit dem IS Operator überprüft wurde. Oder halt ein weicher Typecast, dieser liefert NIL, wenn die Klasse nicht stimmt - da er selber nochmal einen Vergleich mit IS vornimmt.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#18

Re: Object in Variable sichern?

  Alt 17. Aug 2006, 21:57
Zitat von Muetze1:
Oder halt ein weicher Typecast, dieser liefert NIL, wenn die Klasse nicht stimmt - da er selber nochmal einen Vergleich mit IS vornimmt.
So funktioniert der Operator in anderen Sprachen, under Anderem C#, in Delphi jedoch wird eine EInvalidCast-Exception geworfen.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#19

Re: Object in Variable sichern?

  Alt 17. Aug 2006, 23:22
Zitat von Khabarakh:
Zitat von Muetze1:
Oder halt ein weicher Typecast, dieser liefert NIL, wenn die Klasse nicht stimmt - da er selber nochmal einen Vergleich mit IS vornimmt.
So funktioniert der Operator in anderen Sprachen, under Anderem C#, in Delphi jedoch wird eine EInvalidCast-Exception geworfen.
Sorry, stimmt, mein Fehler. So manchmal kommt man doch schon durcheinander...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 03:03 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