深刻delphi編程理解之接口(一)接口與類的異同及接口的聲明和實現

  1、抽象類與接口的異同ide

    接口簡單的理解可認爲是一個抽象類,咱們先定義一個抽象類和接口來對比之間的異同,代碼以下:函數

 type
  IFormattedNumber = interface          //定義接口
    function FormattedString: string;
  end;

  TFormattedNumber = class            //定義抽象類
  public
    function FormattedString: string; virtual; abstract;
  end;                

  上面定義了一個接口IFormattedNumber和抽象類TFormattedNumber,從delphi方法上來講,都不能直接實例化,接口是經過類來實現的,而抽象類則是經過其派生類來實現其具體的功能。抽象類與接口的不一樣我理解有如下幾點:學習

  (一)、接口經過Interface關鍵字定義,而類則經過Class關鍵字定義,接口以「I」前綴命名,抽象類則「T」前綴命名;spa

  (二)、接口直接或者間接派生自IUnKnown,而類則派生自TObject;code

  (三)、接口不能直接範圍,只能是public,但不要聲明;orm

   (四)、接口不能聲明變量,只能包含函數或者過程;blog

  (五)、接口聲明的函數和過程從概念上講是virtual類型,但不能直接使用virtual關鍵。 接口

  接口定義好後就不要修改,若是須要修改,通常的作法是定義新接口,這種作法的目的是保證調用者由於修改接口,而修改調用程序。若是須要增長功能,能夠直接從父接口直接派生,如爲IFormattedNumber增長SetValue(AValue:Integer)過程咱們能夠如下代碼實現聲明:string

type
    IFormattedNumber2 = Interface(IFormattedNumber)
        procedure SetValue(AValue);
    end;

  2、接口的聲明和實現   it

  接口聲明和實現很簡單,請看下面代碼:

 

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編譯會提示下面錯誤,至於緣由咱們在下一節進行學習理解。

相關文章
相關標籤/搜索