Einzelnen Beitrag anzeigen

Fingolfin

Registriert seit: 8. Okt 2003
62 Beiträge
 
#1

Interfaces in DotNet ganz anders?

  Alt 1. Dez 2004, 20:33
Hi, ich arbeite mich gerade mit Delphi 2005 in DotNet ein und mir ist da etwas aufgestoßen.

Früher (in Win32) hat man interfaces üblicherweise ja so verwendet:

Code:
  ITest = interface
    procedure DoSomething;
  end;

  TTest = class(TInterfacedObject, ITest)
  public
    constructor Create;
    destructor Destroy; override;
    procedure DoSomething;
  end;

var
  FTest: ITest;

procedure InterfaceErzeugen;
begin
  FTest := TTest.Create;
  FTest.DoSomething;
end;

procedure Interfacefreigeben;
begin
  FTest := nil;
end;
Dabei führte das nilen der Interfacereferenz zur Freigabe, es wurde also in diesem Fall das Destroy von TTest aufgerufen.

Unter Delphi 2005 passiert das nicht. Das nilen nilt zwar die Interface-Referenz, der Destructor wird aber überhaupt nicht berührt.

Ich habe jetzt schon Sachen wie

Code:
var
  FTest: TTest;
procedure Irgendwas;
begin
  FTest := TTest.Create;
  FTest.DoSomething;
  FTest.Free;
end;
getestet und die haben anscheinend ohne Probleme funktioniert. Dabei ist doch gerade die Mischung von Object- und Interfacereferenzen das absolut böse "ohoh" in Delphi Win32.

Kann mich da mal jemand aufklären bitte? Bin sehr verwirrt.

Vielen Dank schonmal.
  Mit Zitat antworten Zitat