程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 接口與類的區別

接口與類的區別

編輯:Delphi
來自Delphi Help,關鍵字Interface types: overview

  接口和類一樣,只能在程序或單元的最外層被聲明(也就是interface section,也就是全局可見的),不能在過程或函數中聲明。接口類型的聲明格式如下:
  type interfaceName = interface (ancestorInterface)  //關鍵字interface
     ['{GUID}']   //全局唯一標識符
   memberList    //成員列表
   end;
  其中(ancestorInterface) 和['{GUID}'] 是可選的,接口聲明和類相似,但是有如下的約束:
  1,memberList只能包含方法和屬性。字段在接口中是不允許的。
  2,因為接口沒有字段,屬性的read和write指定的必須是方法。
  3,所有接口的成員都是公開的(public)。可見性指定(private,protected等)和存儲指定(如stored, default, nodefault)都不允許。(但是一個數組屬性可以帶關鍵字default,請看末尾的說明)
  4,接口沒有構造器和析構器。它不能被實例化,除了通過類來實現它的方法。
  5,方法不能被聲明成virtual,dynamic,abstract或者override。因為接口不實現它自己的方法,這些指定是沒有意義的。
  請看一個接口聲明的例子:
  type
    IMalloc = interface(IInterface)
      ['{00000002-0000-0000-C000-000000000046}']
      function Alloc(Size: Integer): Pointer; stdcall;
      function Realloc(P: Pointer; Size: Integer): Pointer; stdcall;
      procedure Free(P: Pointer); stdcall;
      function GetSize(P: Pointer): Integer; stdcall;
      function DidAlloc(P: Pointer): Integer; stdcall;
      procedure HeapMinimize; stdcall;
  end;
  在一些接口聲明中,關鍵字interface被dispinterface代替。答案是這(還有dispid,read only,write only指定)和特殊平台有關,在Linux編程中不使用。
  
  還有幫助以外的個人一些見解:接口也用來解決多重繼承帶來的混亂問題。Delphi中一個派生類只能繼承一個類,但同時能繼承多個接口。
  
  PS: 關於數組屬性的釋疑,同樣來自Delphi Help, 關鍵字Array properties
  請先看例子:
      property Strings[Index: Integer]: string  ...; default;
  這樣也我們就可以用object[index]來代替object.property[index];但是也要注意,象這樣的屬性只能存在一個,不然大家也知道會發生什麼事情了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved