ITestInterface = interface(IUnknown)
['{734C54C2-BF68-4140-8DB4-8F1416A0545C}']
function GetName: string;
procedure SetName(const aname: string);
function GetRefCount: integer;
end;
TTestInterfacedList = specialize TFPGInterfacedObjectList<ITestInterface>;
TTestStandardList = specialize TFPGList<ITestInterface>;
TTestObject = class(TInterfacedObject, ITestInterface)
protected
_name: string;
public
function GetName: string;
procedure SetName(const aname: string);
function GetRefCount: integer;
end;
...
procedure TForm1.BtInitInterfacedClick(Sender: TObject);
var
i: integer;
begin
GroupBox2.Enabled := False;
for i := 0 to 15 do
begin
WriteLn('Init: ', _interface1.GetName, ' ', _interface1.GetRefCount);
_test_interfaced_list.Add(_interface1);
end;
BtAdjustInterfaced.Enabled := True;
end;
procedure TForm1.BtAdjustStandardClick(Sender: TObject);
var
interface_cur: ITestInterface;
interface_new: ITestInterface;
i: integer;
begin
for i := 0 to 15 do
begin
WriteLn('Adjust: ', _test_standard_list.Items[i].GetName, ' ',
_test_standard_list.Items[i].GetRefCount);
interface_cur := _test_standard_list.Items[i];
if (i < 8) or (i > 11) then
begin
interface_new := TTestObject.Create;
interface_new.SetName('interface ' + IntToStr(i));
_test_standard_list.Items[i] := interface_new;
end
else
begin
_test_standard_list.Items[i] := _interface1;
end;
interface_cur := nil;
end;
end;
procedure TForm1.BtAdjustInterfacedClick(Sender: TObject);
var
interface_cur: ITestInterface;
interface_new: ITestInterface;
i: integer;
begin
for i := 0 to 15 do
begin
try
WriteLn('Adjust: ', _test_interfaced_list.Items[i].GetName, ' ',
_test_interfaced_list.Items[i].GetRefCount);
interface_cur := _test_interfaced_list.Items[i];
if (i < 8) or (i > 11) then
begin
interface_new := TTestObject.Create;
interface_new.SetName('interface ' + IntToStr(i));
_test_interfaced_list.Items[i] := interface_new;
end
else
begin
_test_interfaced_list.Items[i] := _interface1;
end;
interface_cur := nil;
except
on e: Exception do
begin
WriteLn(e.Message);
raise;
end;
end;
end;
end;
procedure TForm1.BtInitStandardClick(Sender: TObject);
var
i: integer;
begin
GroupBox1.Enabled := False;
for i := 0 to 15 do
begin
WriteLn('Init: ', _interface1.GetName, ' ', _interface1.GetRefCount);
_test_standard_list.Add(_interface1);
end;
BtAdjustStandard.Enabled := True;
end;