Delphi-Quellcode:
var
MySomeThingObject : ISomeThing;
begin
MySomeThingObject := TMyDoSomething.Create;
if Supports(MySomeThingObject, IInteger) then
begin
ShowMessage('IInteger wird voll unterstützt!!!');
end;
end;
... und laut Doku ist das Objekt damit auch zerstört und damit kann man diese Variante nicht verwenden...
Lesen und
verstehen der Doku sind zwei Paar Schuhe!
Was unter der Überschrift "Warnung" als kryptischer 53 Wörter Satz steht, heißt nicht weiter als:
"Pass ja auf wenn du Interface- mit Objektreferenzen mischt, dass kann nämlich ganz schön in die Hose gehen wenn du mit Supports arbeitest."
Auch hier gilt: Nicht die Supports-Funktion ist schlecht oder fehlerhaft, sondern der Programmierer hat einen Fehler gemacht!
Um beim Beispiel zu bleiben, das hier funktioniert so wie es soll:
Delphi-Quellcode:
var
MySomeThingObject : ISomeThing; // <--- das ist so richtig
begin
MySomeThingObject := TMyDoSomething.Create;
if Supports(MySomeThingObject, IInteger) then
begin
ShowMessage('IInteger wird voll unterstützt!!!');
end;
MySomeThingObject.DoSomeThing;
end;
Während das hier schief geht, wenn in DoSomeThing auf objekteigene Werte zugegriffen wird, denn die sind dann schon freigeben und genullt:
Delphi-Quellcode:
var
MySomeThingObject : TMyDoSomething; // <--- da ist die entscheidene Stelle, Fehler!!!
begin
MySomeThingObject := TMyDoSomething.Create;
if Supports(MySomeThingObject, IInteger) then
begin
ShowMessage('IInteger wird voll unterstützt!!!');
end;
MySomeThingObject.DoSomeThing;
end;