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.