AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi class oparator implicit funktioniert nicht (Bug??)
Thema durchsuchen
Ansicht
Themen-Optionen

class oparator implicit funktioniert nicht (Bug??)

Ein Thema von stoxx · begonnen am 15. Jun 2006 · letzter Beitrag vom 21. Aug 2007
Antwort Antwort
Seite 2 von 2     12   
Dax
(Gast)

n/a Beiträge
 
#11

Re: class oparator implicit funktioniert nicht (Bug??)

  Alt 16. Jun 2006, 14:56
Stimmt, aber das is mir eben als erstes eingefallen, der Rest kam erst später^^
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

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

Re: class oparator implicit funktioniert nicht (Bug??)

  Alt 16. Jun 2006, 15:00
Zitat von DGL-luke:
ähm... dass records funktionen haben können, wär mir neu, [...]
D2006 _ist_ neu .
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.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#13

Re: class oparator implicit funktioniert nicht (Bug??)

  Alt 16. Jun 2006, 15:23
Zitat von Klaus01:
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
Soweit ich das verstanden habe:
  • "class" in Delphi entspricht ungefähr "class" in Java - muss dynamisch alloziert werden, kann virtuelle Methoden haben, erben etc.
  • Die "old-style"-Klassen in Delphi (Schlüsselwort "object") entsprechen eher struct's/class's in C++ - sie können auch auf dem Stack leben (wie Delphi-Records), können virtuelle Methoden haben, erben etc. Sie sind seit anno dunnemals in der Hilfe als deprecated gebrandmarkt, funktionieren aber ganz gut.
  • Die neuen "advanced records" von Delphi sind ähnlich wie diese alten object's, nur das sie weniger Features haben (nix virtuell, nix erben) und nicht funktionieren - s.o.
Uli.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#14

Re: class oparator implicit funktioniert nicht (Bug??)

  Alt 16. Jun 2006, 15:26
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 von DGL-luke:

Im übrigen ist "funktioniert nicht" keine befriedigende fehlermeldung

Nervt der COmpiler? kommen falsche ergbnisse raus? oder was?

er mein: Incompatible types: 'TDateTiem' and 'TIBZeit'
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#15

Re: class oparator implicit funktioniert nicht (Bug??)

  Alt 16. Jun 2006, 15:37
Hallo stoxx
geht es denn so?

d := Zeit as TDateTime;

Grüße
der nichtsahnende Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#16

Re: class oparator implicit funktioniert nicht (Bug??)

  Alt 16. Jun 2006, 15:43
Zitat von Klaus01:
Hallo stoxx
geht es denn so?

d := Zeit as TDateTime;

Grüße
der nichtsahnende Klaus
den as Operator gibt es nur bei Klassen, nicht bei records.
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
    property ToDateTime : TDateTime read Value; somit geht es d := Zeit.ToDateTime;

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 !
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#17

Re: class oparator implicit funktioniert nicht (Bug??)

  Alt 21. Aug 2007, 16:54
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;
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  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 21:37 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