![]() |
D8: Typprüfung
Hallo,
im aktuellen Entwickler habe ich folgenden Source gefunden:
Delphi-Quellcode:
Der scheint mir doch etwas myteriös. Man beachte folgende Zeile
procedure TWinForm.Button1_Click(sender: System.Object; e: System.EventArgs);
var aDoc : IHTMLDocument2; aAr : Array of TObject; begin If Sender=Button1 then begin aDoc:=AxWebBrowser.Document as IHTMLDocument2; SetLength(aAr,1); aAr[0]:='<html>Das ist ein [b]Test[/b]</html>'; aDoc.writeln(aAr); end; // If Sender=Button1 then end;
Delphi-Quellcode:
Hier wird einem TObject eine Stringkonstante zugewiesen. Bis einschließlich D7 ist das undenkbar.
aAr[0]:='<html>Das ist ein [b]Test[/b]</html>';
Jetzt vermute ich, dass unter D8 auch die .NET Maxime "Alles ist ein Objekt" gilt. Damit wird '<html>Das ist ein Test</html>' als Objekt betrachtet. Damit wäre die Welt der Typprüfung wieder im Lot. Ist meine Vermutung richtig ? |
Re: D8: Typprüfung
Die Zuweisung an eine Property wird ja bei Interfaces immer auf eine Setter-Methode abgebildet.
Moeglicherweise gibt es nun mehrere ueberladenen Setter und einer davon wandelt den String in ein Objekt. Ansonsten koennen auch fruehere Delphi-Versione ein paar Tricks. Die Zuweisung eines Strings an ein TGUID z. B. |
Re: D8: Typprüfung
Ein String ist in D8 auch ein Object (irgendwo im System. - Namespace).
Aus diesem Grund geht das. Du hast also in aAr[0] nun ein Objekt vom Typ String. Das ist - wenn man Java kennt - nichts neues. Problematisch wird nun nur die Überprüfung:
Delphi-Quellcode:
Daher musst Du bei solchen Sachen, die auf TObject gecastet werden erst eine Konvertierung in einen String machen. Verwendest Du direkt den String, so sind dort die Typumwandlungen beim Vergleich bereits implementiert.
aAr[0]:='<html>Das ist ein [b]Test[/b]</html>';
aAr[1]:='<html>Das ist ein [b]Test[/b]</html>'; if aAr[0] = aAr[1] then ShowMessage('Diese Meldung wird nie kommen,') else ShowMessage('denn die Strings wind zwar gleich, aber es ist nicht das gleiche Objekt!'); |
Re: D8: Typprüfung
Zitat:
Delphi-Quellcode:
If aAr[0].ToString=aAr[1].ToString then
ShowMessage('Yes') else ShowMessage('No'); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:43 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