delphi接口问题——当类继承自TComponent和TObject

在Delphi中,TComponent类已实现IInterface接口,因此其子类继承接口后无需额外实现引用计数方法。相反,直接继承自TObject的类需自行实现接口的引用计数等方法,或者使用TInterfacedObject。继承TInterfacedObject意味着类的生命周期由接口管理,当接口引用计数为0时,类会自动释放,而TComponent的_Release方法不托管生命周期,需要手动释放。
摘要由CSDN通过智能技术生成

        因为TComponent已经实现了接口IInterface,所以它的子类,继承接口之后不需要再重新实现引用计数之类的方法。而直接继承自TObject的类则没有,所以要实现接口,必须实现IInterface接口中的引用计数等方法,或者可以直接继承system单元中的TInterfacedObject(已经将这些方法实现)。

        但是要注意,XX类如果直接继承自TInterfacedObject类,那么表示XX类的生命周期已经委托给了接口,所以当接口的引用计数为0时,XX类就会跟着释放,不必再重复释放,不让会报错。请看下面代码:

function TInterfacedObject._Release: Integer;
begin
  Result := InterlockedDecrement(FRefCount);
  if Result = 0 then
    Destroy;
end;

        当引用计数为0时,会执行destroy方法将内存释放。

        而TComponent在实现_Release方法时,没有将自己的生命周期托管给接口,所以就算接口引用计数为0,继承自TComponent的类也必须自己释放。看下面代码:

funct
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值