Thema: Delphi Umgang mit Interfaces

Einzelnen Beitrag anzeigen

TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#23

AW: Umgang mit Interfaces

  Alt 12. Dez 2013, 08:47
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;
  Mit Zitat antworten Zitat