我是想把類和介面單元分開成兩個單元 然后只要參考介面單元呼叫函式
類單元
unit Un_Class;
interface
uses System.Classes,Un_Interface;
type
TTest=class(TInterfacedObject,ITest)
public
function getdate(value:string):string;overload;
function getvalue:string;overload;
end;
implementation
{ TTest }
function TTest.getdate(value:string):string;
begin
Result:=value
end;
function TTest.getvalue: string;
begin
Result:='fffff';
end;
end.
介面單元
unit Un_Interface;
interface
uses System.Classes;
type
ITest=interface(IInterface)
['{4F3260EB-99D2-47E4-89BE-7D8862CB05F7}']
function getdate(value:string):string;
function getvalue:string;
end;
implementation
end.
最后在主視窗呼叫
uses Un_Interface;
procedure TForm1.Button1Click(Sender: TObject);
var aa:ITest ;
begin
ShowMessage(aa.getvalue);
end;
執行會出現地址錯誤。 請問怎么整呢?
uj5u.com熱心網友回復:
你的介面沒有實作類! 所以執行會出現地址錯誤uj5u.com熱心網友回復:
var aa:ITest ;你的aa總得有個東西來賦值才能呼叫吧
uj5u.com熱心網友回復:
這是實作類 Un_Class單元。aa怎么賦值?uj5u.com熱心網友回復:
aa := TTest.create as ITest ;uj5u.com熱心網友回復:
報謙未能深入研究。uj5u.com熱心網友回復:
aa := TTest.create as ITest ; 試了下加上這句再呼叫介面函式正常有個問題 得要參考實作類單元 那怎么實作實作類單元的函式是怎么實作的別人是看不到的呢?
uj5u.com熱心網友回復:
你在介面單元寫一個函式數啊如 getITest:itest
begin
result:= TTest.create as ITest ;
end;
uj5u.com熱心網友回復:
介面必須要實作別人才能使用,你自己可以在內部做一個介面工廠比如叫InterfaceFactory,然后其他的介面都注冊到這個工廠保存起來,然后可以通過此工廠來獲得介面,而也可以不將你的實作暴露給別人,工廠通過QueryInterface來獲得這個介面轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/94521.html
標籤:網絡通信/分布式開發
上一篇:求教執行緒相關問題
