![]() |
class oparator implicit funktioniert nicht (Bug??)
ich versteh das nicht, den String kann ich wunderbar zuweisen, aber nicht die Variable vom Typ TDateTime
Wieso ??? ist das ein Compilerbug oder mach ich was falsch ?
Delphi-Quellcode:
type
TIBZeit = record private Value : TDateTime; public class operator implicit(Zeit : TDateTime) : TIBZEit; class operator implicit(a : TIBZeit) : TDateTime; class operator implicit(a : TIBZEit) : String; end; implementation {$R *.dfm} class operator TIBZeit.implicit(Zeit : TDateTime) : TIBZeit; begin result.value := Zeit; end; class operator TIBZeit.implicit(a : TIBZeit) : TDateTime; begin result := a.Value; end; class operator TIBZeit.Implicit(a : TIBZeit) : String; begin result := DateTimeToStr(a.value); end; //============================================================================== procedure TForm1.Button1Click(Sender: TObject); var d : TDateTime; Zeit : TIBZEit; st : String; begin Zeit := now; st := Zeit; d := Zeit; /// geht nicht end; |
Re: class oparator implicit funktioniert nicht (Bug??)
hmm .. weiß das denn wirklich niemand ? ist doch ein ziemlich wichtiges Grundproblem ?
Habe ich irgendeinen Compilerschalter übersehen ? Versteh das nicht ! |
Re: class oparator implicit funktioniert nicht (Bug??)
Delphi-Quellcode:
Nun, ich kann jetz mal wieder total daneben liegen, aber
TIBZeit = record
private Value : TDateTime; public class operator implicit(Zeit : TDateTime) : TIBZEit; class operator implicit(a : TIBZeit) : TDateTime; class operator implicit(a : TIBZEit) : String; end; so wie ich das vor langer Zeit mal gelernt habe können records nur statische Feldtypen arbeiten. So in der Art:
Delphi-Quellcode:
Grüße
TIBTeit = record
value : TDateTime; end; Klaus |
Re: class oparator implicit funktioniert nicht (Bug??)
Zitat:
|
Re: class oparator implicit funktioniert nicht (Bug??)
Tja, cool oder verwirrend.
Da bleibe ich doch noch ein Weilchen bei Delphi6 ;o) Grüße Klaus |
Re: class oparator implicit funktioniert nicht (Bug??)
Zitat:
Zitat:
![]() Uli. |
Re: class oparator implicit funktioniert nicht (Bug??)
Ein wenig OT:
Da habe ich dann mal eine Frage wo ist denn dann der prinzipielle Unterschied zwischen records und Objects? Ist das ganze dann eher mir einer Class in Java zu vergleichen? Grüße Klaus |
Re: class oparator implicit funktioniert nicht (Bug??)
New-style records können nur statische Methoden haben, während objects weiterhin auch late-bound-Methoden haben können *glaub*
edit: Genauer: objects unterstützen Vererbung, records nicht |
Re: class oparator implicit funktioniert nicht (Bug??)
ähm... dass records funktionen haben können, wär mir neu, aber das sind doch hier operatoren! und das wurde ja extra eingeführt, dass man in recordtypen (afaik aber nicht in klassen sprich objekttypen) die operatoren benutzen kann.
warum das beispiel nicht funktioniert, kann ich aber ncihtr sagen. Im übrigen ist "funktioniert nicht" keine befriedigende fehlermeldung ;) Nervt der COmpiler? kommen falsche ergbnisse raus? oder was? |
Re: class oparator implicit funktioniert nicht (Bug??)
Zitat:
|
Re: class oparator implicit funktioniert nicht (Bug??)
Stimmt, aber das is mir eben als erstes eingefallen, der Rest kam erst später^^
|
Re: class oparator implicit funktioniert nicht (Bug??)
Zitat:
Wäre etwas sinnlos, nur Operatoren zu unterstützen, da es im Endeffekt auch nur Methoden sind. BTT: Auch wenn das Beispiel mit C# anstandslos läuft *g*, macht es IMHO eher wenig Sinn. Der TIBZeit-DateTime-Operator sollte mit einer stinknormalen Property und das Gegenstück mit einem Konstruktor ersetzt werden. Der dritte Operator muss dann von TDateTime selbst implementiert werden. Falls die Borländer die Implementation nicht erweitert haben, Pech ;) . Helper Records gibt es ja AFAIK nicht. Allgemein sollte man wohl so wenig implizite Operatoren wie möglich verwenden oder auf einen Bugfix hoffen. |
Re: class oparator implicit funktioniert nicht (Bug??)
Zitat:
|
Re: class oparator implicit funktioniert nicht (Bug??)
Also nochmal zur Sicherheit, ich rede von Win32, nicht .Net
den String kann ich doch auch problemlos "bestücken" Warum kann man dann eine Variable von einem anderen Typ nicht zuweisen Umgekehrt funktioniert es schließlich auch. Zeit := d; // das geht Zitat:
er mein: Incompatible types: 'TDateTiem' and 'TIBZeit' |
Re: class oparator implicit funktioniert nicht (Bug??)
Hallo stoxx
geht es denn so? d := Zeit as TDateTime; Grüße der nichtsahnende Klaus |
Re: class oparator implicit funktioniert nicht (Bug??)
Zitat:
Ausserdem wäre das Quark und nicht Sinn und Zweck einer impliciten Typumwandlung im Sinne von class operatoren. um das zu umgehen gibts ja auch eine property like in .NET
Delphi-Quellcode:
somit geht es d := Zeit.ToDateTime;
property ToDateTime : TDateTime read Value;
Aber das ist ja nicht Sinn und Zweck der Übung ! und der Quellcode wird mir zu unübersichtlich, um sowas will man sich ja keine Gedanken machen ! Darum gehts ja gerade ! |
Re: class oparator implicit funktioniert nicht (Bug??)
Delphi-Quellcode:
type
TIBZeit = record private Value : TDateTime; public class operator implicit(Zeit : TDateTime) : TIBZEit; class operator implicit(a : TIBZeit) : TDateTime; class operator implicit(a : TIBZEit) : String; end; implementation {$R *.dfm} class operator TIBZeit.implicit(Zeit : TDateTime) : TIBZeit; begin result.value := Zeit; end; class operator TIBZeit.implicit(a : TIBZeit) : TDateTime; begin result := a.Value; end; class operator TIBZeit.Implicit(a : TIBZeit) : String; begin result := DateTimeToStr(a.value); end; //============================================================================== procedure TForm1.Button1Click(Sender: TObject); var d : TDateTime; Zeit : TIBZEit; st : String; begin Zeit := now; st := Zeit; d := Zeit; /// geht nicht end; isch habe mir gerade mal die Trial von Delphi 2007 rungergeladen .. und das Beispiel geht jetzt ... coole Sache ....
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var d : TDateTime; Zeit : TIBZEit; st : String; begin Zeit := now; d := Zeit; showmessage(Zeit); Showmessage(DateTimeToStr(d)); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:07 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