fellow99說(shuō): delphi的接口的意義是不是跟C++和java的不同呢?
IInterface1 = interface
end;
IInterface2 = interface(IInterface1)
PRocedure method();
end;
TClass1 = class(TInterfacedObject, IInterface2)
......
end;
首先,編譯器不承認(rèn)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;
想想沒(méi)有道理, kbs說(shuō)在D7中是可以的,我決定在D5中試一試。
試驗(yàn)的結(jié)果是,在D5中第一個(gè)問(wèn)題是不存在的,第二個(gè)問(wèn)題的,改 obj 的聲明為:
var
obj: TClass1;
就可以了。因?yàn)門Object 是不能 as 為 IInterface2 的,因?yàn)樗亩x中并沒(méi)有從 IInterface2 繼承。
據(jù)我看來(lái),接口的意義不僅體現(xiàn)在語(yǔ)法上,更多的是應(yīng)用方式:聲明功能而不是實(shí)現(xiàn),可以有各種不同的實(shí)現(xiàn)。應(yīng)用的場(chǎng)合是有預(yù)想到的多個(gè)實(shí)現(xiàn)。如 ADO、dbExpress、JDBC 的驅(qū)動(dòng)程序,由于數(shù)據(jù)庫(kù)類別的不同,將有不同的實(shí)現(xiàn)。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注