unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls; type
  //测试接口
  ITest = interface
    function GetName: string;
  end;   //接口实现类
  TTest = class(TInterfacedObject, ITest)
  public
    function GetName: string;
  end;   //测试窗体
  TForm4 = class(TForm)
    btn1: TButton;
    mmo1: TMemo;
    procedure btn1Click(Sender: TObject);
  end; var
  Form4: TForm4; implementation {$R *.dfm} { TTest } function TTest.GetName: string;
begin
  Result := 'igaoshang.cnblogs.com'
end; //点击测试按钮
procedure TForm4.btn1Click(Sender: TObject);
var
  LTestObj: TTest;
  LTestInf: ITest;
  LObj1, LObj2: TObject;
  LInf1, LInf2: ITest;
begin
  //创建接口对象
  LTestObj := TTest.Create;
  mmo1.Lines.Add('LTestObj地址:' + IntToHex(Integer(Pointer(LTestObj)),));
  //给接口赋值
  LTestInf := LTestObj;
  //将接口转为Obj
  LObj1 := TObject(LTestInf);     //将接口对象地址赋值给了LObj1,但丢失了接口信息
  mmo1.Lines.Add('LObj1地址:' + IntToHex(Integer(Pointer(LObj1)),));   //LTestObj地址 = LObj1地址
  LObj2 := TObject(Pointer(LTestInf));  //保留了接口信息,但生成了新的指针
  mmo1.Lines.Add('LObj2地址:' + IntToHex(Integer(Pointer(LObj2)),));
  //将Obj转为接口
  //LInf1 := ITest(Pointer(LObj1));       //无法转换了,丢失了接口信息
  //mmo1.Lines.Add(LInf1.GetName);
  LInf1 := ITest(TTest(LObj1));           //可以这样转换
  mmo1.Lines.Add(LInf1.GetName);
  LInf2 := ITest(Pointer(LObj2));         //可以将对象直接转换成接口
  mmo1.Lines.Add(LInf2.GetName);
end; end.

最新文章

  1. js方法入参或局部变量和全局变量重名,用来赋值全局变量会失败
  2. 简约的ASP.NET 系统框架,提供源码。
  3. PetaPoco 使用总结(一)
  4. task 限制任务数量(转自msdn)
  5. pajax
  6. 认识Swift
  7. .NET和java的RSA互通,仅此而已
  8. iOS NSNotificationCenter(消息机制)
  9. 9种CSS3炫酷图片展开预览展示动画特效
  10. HTML编码
  11. oracle 之路目录
  12. Quartz1.8.5例子(五)
  13. windows下端口被占用的解决方法
  14. RabbitMQ基本示例,轮询机制,no_ack作用
  15. 【Core内存】.NET Core 2.0中使用MemoryCache
  16. 为什么SQL用UPDATE语句更新时更新行数会多3行有触发器有触发器有触发器有触发器有触发器有触发器
  17. 以英雄联盟的方式建模,谈对依赖注入(DI)的理解以及Autofac的用法(一)
  18. 前端框架之Vue(6)-列表渲染
  19. Volley 结合GSON或FastJson用法
  20. Spring框架引入

热门文章

  1. maya的卡通渲染
  2. Jenkins - 持续集成环境搭建
  3. "****" is not translated in zh, zh_CN.的解决方法
  4. Eclipse利用Axis2插件构建Web Service并测试
  5. your local repository contains non-ascii
  6. data process for large scale datasets
  7. sublime Text3 编写java
  8. IIS 发布 异常信息 AspNetInitClrHostFailureModule 的解决办法
  9. MyBatis笔记
  10. wgsim说明