線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2831
推到 Plurk!
推到 Facebook!

如何強迫繼承該class的 abstract method必需要實作

答題得分者是:Kingron
SnP
一般會員


發表:11
回覆:19
積分:6
註冊:2003-03-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-07-21 08:45:58 IP:202.154.xxx.xxx 訂閱
小弟遇到一個問題 ,delphi的parent class abstract method若繼承的class沒去實作
,都不會發生錯誤 , 但對於繼承該class而言,怎麼知道有哪些abstract method需要實做呢?
還是有其他設計方式可以補強

Thanks

Norman
Kingron
中階會員


發表:1
回覆:51
積分:60
註冊:2005-09-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-07-24 17:23:03 IP:61.143.xxx.xxx 訂閱
父类无法知道子类是否继承并实作。
子类必须继承并实作,否则在实例化的时候产生Abstract Error。

你可以更改设计,利用Event来实现。例如原来设计:
TClassA=class
private
procedure DoDo;
protected
procedure DoSomething(Obj: SomeObject); virtual; abstract;
end;
...
procedure TClassA.DoDo;
begin
DoSomething;
end;
可以更改设计为:
TOnDoSomething = procedure (Obj: SomeObject) of object;
TClassA=class
private
FOnDoSomething: TOnDoSomething;
procedure DoDo;
protected
procedure DoSomething(Obj: SomeObject); virtual; abstract;
publish
property OnDosomething: TOnDoSomething read FOnDosomething write FOnDosomething;
end;
...
procedure TClassA.DoDo;
begin
if Assigned(FOnDoSomething) then FDoSomething(Obj);
end;

但上面的方法有很多的限制,你可以考虑一下你的设计。其实要求子类必须继承并实作即可,你的设计没有问题的。这是面向对象的基本要求。
------
超级猛料:http://kingron.delphibbs.com
SnP
一般會員


發表:11
回覆:19
積分:6
註冊:2003-03-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-07-24 22:27:33 IP:211.76.xxx.xxx 訂閱
因為通常子類在撰寫時,若編譯器沒有產生錯誤 幫忙判斷,容易發生少實作abstract method
造成困擾
編輯記錄
SnP 重新編輯於 2007-07-24 22:28:04, 註解 無‧
Kingron
中階會員


發表:1
回覆:51
積分:60
註冊:2005-09-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-07-24 23:14:32 IP:125.89.xxx.xxx 訂閱
的确有这个问题。
但是不能因为儿子没有继承老子的的喝酒的特点,就不让儿子活下去吧?

===================引 用 SnP 文 章===================
因為通常子類在撰寫時,若編譯器沒有產生錯誤 幫忙判斷,容易發生少實作abstract method
造成困擾
------
超级猛料:http://kingron.delphibbs.com
SnP
一般會員


發表:11
回覆:19
積分:6
註冊:2003-03-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-07-25 08:51:31 IP:202.154.xxx.xxx 訂閱
這情況需實做一個空的method就可避免
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-07-25 17:43:23 IP:61.64.xxx.xxx 訂閱
這就是設計該 class 的設計者的責任,必須將其所設計的 class 寫一份說明
指出哪些是 abstract method
Delphi 的說明都有指出,你只要有用心看過,就會知道,例如 TString 與 TStringList,TString 就有指出哪些是 abstract method

===================引 用 SnP 文 章===================
小弟遇到一個問題 ,delphi的parent class abstract method若繼承的class沒去實作
,都不會發生錯誤 , 但對於繼承該class而言,怎麼知道有哪些abstract method需要實做呢?
還是有其他設計方式可以補強

Thanks

Norman
SnP
一般會員


發表:11
回覆:19
積分:6
註冊:2003-03-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-07-25 20:34:11 IP:211.76.xxx.xxx 訂閱
嗯 我了解了 感謝大家幫忙解答 :)
系統時間:2017-10-24 17:36:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!