深入delphi编程理解之接口(一)接口与类的异同及接口的声明和实现
2021-01-16 03:14
标签:ati src rri 不同 函数 int virt 过程 需要 一、抽象类与接口的异同 接口简单的理解可认为是一个抽象类,我们先定义一个抽象类和接口来对比之间的异同,代码如下: 上面定义了一个接口IFormattedNumber和抽象类TFormattedNumber,从delphi方法上来说,都不能直接实例化,接口是通过类来实现的,而抽象类则是通过其派生类来实现其具体的功能。抽象类与接口的不同我理解有以下几点: (一)、接口通过Interface关键字定义,而类则通过Class关键字定义,接口以“I”前缀命名,抽象类则“T”前缀命名; (二)、接口直接或者间接派生自IUnKnown,而类则派生自TObject; (三)、接口不能直接范围,只能是public,但不要声明; (四)、接口不能声明变量,只能包含函数或者过程; (五)、接口声明的函数和过程从概念上讲是virtual类型,但不能直接使用virtual关键。 接口定义好后就不要修改,如果需要修改,一般的做法是定义新接口,这种做法的目的是保证调用者因为修改接口,而修改调用程序。如果需要增加功能,可以直接从父接口直接派生,如为IFormattedNumber增加SetValue(AValue:Integer)过程我们可以以下代码实现声明: 二、接口的声明和实现 接口声明和实现很简单,请看下面代码: 接口只是声明功能的地方,具体由类来实现的,到这里我们理解"接口简单的理解可认为是一个抽象类"这句话了吧!以上代码delphi编译会提示下面错误,至于原因我们在下一节进行学习理解。 深入delphi编程理解之接口(一)接口与类的异同及接口的声明和实现 标签:ati src rri 不同 函数 int virt 过程 需要 原文地址:https://www.cnblogs.com/LifeStartPoint/p/12230850.html type
IFormattedNumber = interface //定义接口
function FormattedString: string;
end;
TFormattedNumber = class //定义抽象类
public
function FormattedString: string; virtual; abstract;
end;
type
IFormattedNumber2 = Interface(IFormattedNumber)
procedure SetValue(AValue);
end;
unit Unit2;
interface
uses
SysUtils;
type
IFormattedNumber = interface //接口声明
[‘{F9E8F5DE-781B-4B5B-B78A-0F88CF50E53F}‘] {GUID,Alt+Shift+G快捷键生成}
function FormattedInteger: string;
end;
TFormattedNumber=class(TObject,IFormattedNumber) //实现接口类
private
FValue:Integer;
public
constructor Create(AValue:Integer);
destructor destroy;override;
function FormattedInteger: string; //实现接口函数FormattedInteger;
end;
implementation
constructor TFormattedNumber.Create(AValue:Integer);
begin
inherited Create;
FValue:=AValue;
end;
destructor TFormattedNumber.destroy;
begin
inherited destroy;
end;
function TFormattedNumber.FormattedInteger:string;
begin
Result:=IntToStr(FValue);
end;
end.
文章标题:深入delphi编程理解之接口(一)接口与类的异同及接口的声明和实现
文章链接:http://soscw.com/index.php/essay/42535.html