fellow99說:<!--StartFragment --> delphi的接口的意義是不是跟C++和Java的不同呢?
delphi的接口的意義是不是跟C++和Java的不同,怎麼我這樣不行的呢:
IInterface1 = interface
end;
IInterface2 = interface(IInterface1)
procedure method();
end;
TClass1 = class(TInterfacedObject, IInterface2)
......
end;
首先,編譯器不承認TClass1是IInterface1的派生,一定要寫成TClass1 = class(TInterfacedObject, IInterface2, IInterface1)才可以。
接著,這樣子也不行:
function xxx(): IInterface2;
var
obj: TObject;
begin
obj := TClass1.Create;
result := obj as IInterface2; //不行
result := IInterface2(obj); //也不行
end;
想想沒有道理,<!--StartFragment --> kbs說在D7中是可以的,我決定在D5中試一試。
試驗的結果是,在D5中第一個問題是不存在的,第二個問題的,改 obj 的聲明為:
var
obj: TClass1;
就可以了。因為TObject 是不能 as 為 IInterface2 的,因為它的定義中並沒有從 IInterface2 繼承。
據我看來,接口的意義不僅體現在語法上,更多的是應用方式:聲明功能而不是實現,可以有各種不同的實現。應用的場合是有預想到的多個實現。如 ADO、dbExpress、JDBC 的驅動程序,由於數據庫類別的不同,將有不同的實現。