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.

TObject、Pointer、Interface的转换的更多相关文章

  1. golang - interface的作用

    多态.struct 可以赋值给 interface.interface 可以转换成子接口,或者 struct. 请看go中的一段的源代码: listener, _ := net.Listen(&quo ...

  2. 从零搭建Spring Cloud Gateway网关(三)——报文结构转换

    背景 作为网关,有些时候可能报文的结构并不符合前端或者某些服务的需求,或者因为某些原因,其他服务修改报文结构特别麻烦.或者需要修改的地方特别多,这个时候就需要走网关单独转换一次. 实现 话不多说,直接 ...

  3. Delphi -- Compiler helper for initializing/finalizing variable

    it CompilerhelperForInitializingFinalizingVariable; interface { Compiler helper for initializing/fin ...

  4. Go学习笔记01-语言

    1.1 变量 Go 是静态类型语言,不能在运行期改变变量类型.使用关键字 var 定义变量,自动初始化为零值.如果提供初始化值,可省略变量类型,由编译器自动推断. var x int var f fl ...

  5. Go语言学习之6 反射详解

    1.反射: 定义: 反射就是程序能够在运行时检查变量和值,求出它们的类型.                   可以在运行时动态获取变量的相关信息                   Import ( ...

  6. Golang的反射reflect深入理解和示例

    编程语言中反射的概念 在计算机科学领域,反射是指一类应用,它们能够自描述和自控制.也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examin ...

  7. [golang]golang 汇编

    https://lrita.github.io/2017/12/12/golang-asm/#why 在某些场景下,我们需要进行一些特殊优化,因此我们可能需要用到golang汇编,golang汇编源于 ...

  8. golang(11) 反射用法详解

    原文链接:http://www.limerence2017.com/2019/10/14/golang16/ 反射是什么 反射其实就是通过变量动态获取其值和类型的一种技术,有些语言是支持反射的比如py ...

  9. Go反射

    一.引入 不同语言的反射模型不尽相同,有些语言还不支持反射.<Go 语言圣经>中是这样定义反射的: Go 语言提供了一种机制在运行时更新变量和检查它们的值.调用它们的方法,但是在编译时并不 ...

随机推荐

  1. iOS应用性能调优好文mark

    http://www.cocoachina.com/ios/20150408/11501.html

  2. Your build settings specify a provisioning profile with the UUID, no provisioning profile

    在Archive项目时,出现了“Your build settings specify a provisioning profile with the UUID “”, however, no suc ...

  3. linux-命令-ls

    一.命令介绍: ls命令是linux常用的命令之一.ls用来打印当前目录的文件清单或指定目录的文件清单,也可以查看到文件的基本权限和隐藏文件. 二.命令格式: ls [OPTION]... [FILE ...

  4. Android自定义权限和使用权限

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 自定义权限,主要用于保护被赋予权限的组件.如无权限与有权限,正如public与private的对类保 ...

  5. 解决Tomcat7“At least one JAR was scanned for TLDs yet contained no TLDs”问题

    解决Tomcat7“At least one JAR was scanned for TLDs yet contained no TLDs”问题 2013-12-05 21:58:00|  分类: t ...

  6. ThinkPHP 自动验证相关注意

    1.假如加入了表单令牌的话,表单的各种名与对应Model字段一致,不然报坑爹的令牌错误. 2.假如加入了表单令牌的话,Create只能采用默认的POST数据创建数据对象,不然又是坑爹的令牌错误. 3. ...

  7. c# DllImport 找不到指定模块

    两年前的一个项目,基于身份证阅读器的开发,之前都是在公司电脑上开发维护等,今天有需要用到自己的笔记本,只有vs2008和mysql5.5,以为足够,兴致勃勃的拿到客户那里现场解决问题,F5运行程序,程 ...

  8. 个人Web工具箱&资源整理(1)

    很久就想把使用的工具及收藏的资源整理一番:一是为了传达博客社区的理念:资源共享,而是方便自己及团队快速获取. 学习资源: 首推两个入门级在线参考网站. 1 w3c school. 2 Runoob.c ...

  9. PLS-00306错误

    ORA-06550: line 1, column 7:PLS-00306: wrong number or types of arguments in call to 'P'ORA-06550: l ...

  10. haslayout

    什么是 haslayout ? haslayout 是Windows Internet Explorer渲染引擎的一个内部组成部分.在Internet Explorer中,一个元素要么自己对自身的内容 ...