3, 对于没有使用Tlist来管理的接口引用。对于接口的引用要用下面的方法手动置为nil:Pointer(IntfRef):= nil;
另外,TInterfacedObject也实现了IInterface的三个方法。所以从它继承也可以省去自己实现这三个方法的麻烦。但是它的_Release是这样实现的:
function TInterfacedObject._Release: Integer;
begin
Result := InterlockedDecrement(FRefCount);
if Result = 0 then
Destroy;
end;
我们前边说过,接口引用的置nil会调用接口的_Release,所以有可能会把对象给释放掉,我当时可是被它吓了一跳,多亏我没用过它。也就是这样实现下比从TComponent继承带来更大的麻烦。除非特殊用途,不建议使用。
上面对接口的所有讨论,只限于普通使用的语言级的接口,没有讨论Com+接口。Delphi的这些诡异的接口的实现,和它是从Com+接口发展而来是有很大关系的,也就是由于背负了过重的历史包袱而作出的妥协的结果。
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/