用接口关联对象的生命周期(二)

简介: //接上次讨论 //测试代码如下 procedure TForm1.btnRaiseTestClick(Sender: TObject); var   lvIntf2: ITest;   lvVIList: TVIList; begin   lvVIList := TVIList.

//接上次讨论

//测试代码如下

procedure TForm1.btnRaiseTestClick(Sender: TObject);
var
  lvIntf2: ITest;
  lvVIList: TVIList;
begin
  lvVIList := TVIList.Create(false); //不使用List管理接口对象生命周期
  try

    //+1
    lvVIList.Add('abc', TTestIntfObject.Create);

    //+1 +1
    lvIntf2 := (lvVIList.GetInterfaceByKey('abc') as ITest);
    lvIntf2.DoWork;
    raise Exception.Create('raise error');
  finally
    //-1
    lvVIList.Remove('abc');
    lvVIList.Free;
  end;
end;

//经过上次讨论局部的接口变量在函数执行完毕时会进行隐含如下赋值

lvIntf2:=nil;

lvTempIntf:=nil;  //lvTempIntf为假想的接口是一个IInterface类型。因为 as会产生一个临时的接口

//经过上上述代码跟踪测试即使raise后,局部接口变量仍然会得到隐含的赋值

//但是对象不会隐含执行lvVIList.Free,可能也执行了lvVIList:=nil;(无法证实,猜想),在整个应用程

//序退出的时候会执行Free,但是这样是不可控制的

目录
相关文章
|
4月前
将生命周期方法添加到类中
将生命周期方法添加到类中
|
5月前
|
安全 编译器 程序员
25 C++ - 动态对象创建
25 C++ - 动态对象创建
29 0
|
6月前
|
设计模式 Java 开发者
Spring框架中JavaBean的生命周期及单例模式与多列模式
Spring框架中JavaBean的生命周期及单例模式与多列模式
82 0
|
7月前
|
弹性计算 JavaScript 开发工具
对象和接口-1:对象类型
本实验将介绍TypeScript中的对象类的基本语法
28 0
|
存储 安全 Java
|
Java Spring 容器
Spring框架:第三章:对象的生命周期及单例bean生命周期的11个步骤
Spring框架:第三章:对象的生命周期及单例bean生命周期的11个步骤
|
XML 缓存 Java
SpringBean(配置、实例化、作用域、生命周期、装配方式)
SpringBean(配置、实例化、作用域、生命周期、装配方式)
129 0
SpringBean(配置、实例化、作用域、生命周期、装配方式)
|
Java 开发者 容器
对象生命周期|学习笔记
快速学习对象生命周期
72 0
对象生命周期|学习笔记
|
算法 Java 编译器
如何理解对象赋值给接口的操作(关键在对象!)
如何理解对象赋值给接口的操作(关键在对象!)
如何理解对象赋值给接口的操作(关键在对象!)
|
安全 Java
注解和反射12.动态创建对象执行方法
注解和反射12.动态创建对象执行方法

热门文章

最新文章