文档章节

Delphi 的接口(2) - 第一个例子

涂孟超
 涂孟超
发布于 2014/09/26 15:31
字数 505
阅读 3
收藏 0

第一个例子的操作实况录像: Interface_Test.rar

代码文件:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  end;

  IMyInterface1 = interface
    function Func1: Integer;
    function Func2: Integer;
  end;

  IMyInterface2 = interface
    procedure Proc1;
    procedure Proc2;
  end;

  TMyClass1 = class(TInterfacedObject, IMyInterface1, IMyInterface2)
  public
    procedure Proc1;
    procedure Proc2;
    function Func1: Integer;
    function Func2: Integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TMyClass1 }

function TMyClass1.Func1: Integer;
begin
  ShowMessage('IMyInterface1.Func1');
  Result := 0;
end;

function TMyClass1.Func2: Integer;
begin
  ShowMessage('IMyInterface1.Func2');
  Result := 0;
end;

procedure TMyClass1.Proc1;
begin
  ShowMessage('IMyInterface2.Proc1');
end;

procedure TMyClass1.Proc2;
begin
  ShowMessage('IMyInterface2.Proc2');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  c: TMyClass1;
begin
  c := TMyClass1.Create;

  c.Func1;
  c.Func2;

  c.Proc1;
  c.Proc2;

  c.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i1: IMyInterface1;
begin
  i1 := TMyClass1.Create;
  i1.Func1;
  i1.Func2;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  i2: IMyInterface2;
begin
  i2 := TMyClass1.Create;
  i2.Proc1;
  i2.Proc2;
end;

procedure TForm1.Button4Click(Sender: TObject);
var
  c: TMyClass1;
  i1: IMyInterface1;
  i2: IMyInterface2;
begin
  c := TMyClass1.Create;

  i1 := c;
  i1.Func1;
  i1.Func2;

  i2 := c;
  i2.Proc1;
  i2.Proc2;

//  c.Free; {}
end;

end.

 
 
 
 
 

 

 

  

示例注释(现在应该知道的):

{
  1、接口命名约定 I 起头, 就像类从 T 打头一样.

  2、接口都是从 IInterface 继承而来; 若是从根接口继承, 可省略.

  3、接口成员只能是方法、属性, 没有字段.

  4、接口成员都是公开的, 不需要 private、protected、public、published 等任何访问限制.

  5、因为接口只声明、无实现, 也用不到继承与覆盖相关的修饰(virtual、dynamic、abstract、override).

  6、一个接口可以从另一个接口继承, 但不能从多个接口继承; 不过 Delphi.Net 已支持接口的多继承了.

  7、一个类可以实现多个接口: TMyClass = class(父类, 接口1, 接口2, ...)  end;

  8、不过实现接口的类有多么丰富, 接口只拥有自己声明的成员.

  9、实现接口的类一般继承于 TInterfacedObject, 直接从 TObject 继承会增加一些麻烦而重复的工作.

  10、接口在用完后会自释放, 并同时释放拥有它的类; 这很方便, 但同时带来很多问题.
}


本文转载自:http://www.cnblogs.com/del/archive/2009/06/05/1496582.html

涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
UniDAC使用教程(四):数据类型映射

下载UniDAC最新版本 Universal Data Access Components (UniDAC)是一款通用数据库访问组件,提供了多个数据库的直接访问,如针对Windows的Delphi, C++Builder, Lazarus (以及 Free Pascal) ,...

电池盒
01/31
14
0
delphi fastMM 使用方法简介

delphi fastMM 使用方法简介 在 http://sourceforge.net/projects/fastmm 中可以下载到最新 stable 的 FastMM,当前推荐的是 4.62,主要特点包括: 1、彻底实现了 Borland 的内存管理器,可以...

vga
2014/08/26
1K
0
不在乎y/RTXCPluginForDelphiSDK

======= #RTXCPluginForDelphiSDK ##Delphi开发RTX插件 (Delphi XE6) 当初开发只是好奇, 所以去研究了下, 花了两天的时间翻译了原C++ SDK到Delphi 目录结构及祥细情况 Demo NotetipsGroup 一...

不在乎y
2014/11/23
0
0
Delphi调用 C# 写的webservice

Delphi调用 C# webservice总结 用delphi的THTTPRIO控件调用了c#写的webservice。 下面是我调试时遇到的一些问题: 1:导入wsdl文件:file--new----other----webservice---WSDLimporter---输入...

vga
2014/11/25
447
0
Delphi、PChar和Char数组的比较

Delphi、PChar和Char数组的比较   string和Char数组都是一块内存, 其中存放连续的字符. string保存具体字符的内存对用户是透明的, 由Delphi管理它的分配, 复制和释放, 用户不能干预(其实也...

技术小甜
2017/11/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

查看线上日志常用命令

cat 命令(文本输出命令) 通常查找出错误日志 cat error.log | grep 'nick' , 这时候我们要输出当前这个日志的前后几行: 显示file文件里匹配nick那行以及上下5行 cat error.log | grep -C ...

xiaolyuh
34分钟前
5
0
六、Java设计模式之工厂方法

工厂方法定义: 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 类型:创建型 工厂方法-使用场景: 创建对象需要大量重复的代码 ...

东风破2019
41分钟前
5
0
win服务器管理遇到的一系列问题记录

有些小伙伴在使用iis7远程桌面管理工具的时候总是会遇到一系列的问题,下面就是为大家介绍一下服务器日常管理过程中出现的问题及我的解决办法和心得。希望能帮到大家。   拒绝服务器重新启...

1717197346
48分钟前
6
0
flutter 剪切板 复制粘贴

复制粘贴功能 import 'package:flutter/services.dart'; Clipboard.setData(ClipboardData(text:_text));Clipboard.getData;...

zdglf
51分钟前
4
0
如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?

面试题 如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题? 面试官心理分析 这个是肯定的,用 MQ 有个基本原则,就是数据不能多一条,也不能少一条,不能多,就是前面说的重复消费...

米兜
51分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部