全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1871
推到 Plurk!
推到 Facebook!

請問多型與繼承在此情況下應如何選用

答題得分者是:william
whyzn
中階會員


發表:46
回覆:149
積分:54
註冊:2002-06-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-01-06 20:38:39 IP:61.223.xxx.xxx 未訂閱
我用一台 pc 經過四個 com Port 分別監控四台機器, 對機器流通的 I/O 資料很相近(機器位址和控制點數不同) 為了日後維護的考慮 我想用一支程式來解決(免得每次都得同時修改四支程式) 因為 I/O 須在背景執行,所以我有想到 Thread,並用 多型的方式 作 Constructor ,但是目前我僅學會 Create 時可以因為參數(個數或型態)不同而產生不同的 thread,但在此例中 ,我實在想不出如何讓參數分出不同的 thread (因為 thread 的 create 好像不接受 const 參數) 至於 繼承 則未有實作經驗 煩請學長們指導一下, Thanks a lot. ●○○○○○●○○○○○● 竹密不妨水過,山高無礙雲飛
------
●○○○○○●○○○○○●
竹密不妨水過,山高無礙雲飛
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-01-07 09:44:26 IP:147.8.xxx.xxx 未訂閱
Do you mean overloading the constructor? e.g.
TMyObj = class
public
    constructor Create; overload;
    constructor Create(AOwner: TObject); overload;
end;
BTW, why do you want to use const in the 參數? Are you going to pass a double/string to it? Since const will pass by reference (i.e. 4 bytes pointer), I don't think it helps in passing parameter whose size is <= 4 bytes (e.g. integer, pointer, objects, etc.)
whyzn
中階會員


發表:46
回覆:149
積分:54
註冊:2002-06-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-01-07 17:52:22 IP:61.223.xxx.xxx 未訂閱
是這樣的, 因為四個 Port 的 I/O 都很類似,只差別每部機器的偵測點數不同 以及機器位址(每台機器兩個位址)不同,所以程式的內容也很相近, 所以我原先的想法是,用一支 Thread 分別 constructor Create(AOwner: TObject); overload; 四次與之對應 但為了讓 constructor 區分出四個,所以想用傳入參數的不同來達到目的 不過這樣好像只對 參數(個數或型態) 不同才有用 所以這種情況應如何作才能發揮效益呢 (不管是程式的維護或機器的及時監控) 如果我把相同部分寫在最上層 然後再用四個 thread 繼承下來作不同的部分,這樣會比較單純嗎 ? 因為繼承的實作我沒經驗,請學長再指導一下, Thanks a lot. ●○○○○○●○○○○○● 竹密不妨水過,山高無礙雲飛
------
●○○○○○●○○○○○●
竹密不妨水過,山高無礙雲飛
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-01-07 23:21:33 IP:210.3.xxx.xxx 未訂閱
Could it be easier in using a field for this purpose? e.g.
constructor Create(AOwner: TObject; ID: integer);
begin
    inherited Create(AOwner);
    FID := ID;
    case FID of
        0: begin
        end;
        1: begin
        end;
        2: begin
        end;
        3: begin
        end;
    else
        begin
        end;
    end;
end;
And you could use ID in other methods...
whyzn
中階會員


發表:46
回覆:149
積分:54
註冊:2002-06-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-01-08 11:35:17 IP:61.223.xxx.xxx 未訂閱
謝謝 William 可是這樣變成只用一個程序要控制四個 Port 對於 timing 要稍加留意之控制程式是否會無法應付 ●○○○○○●○○○○○● 竹密不妨水過,山高無礙雲飛
------
●○○○○○●○○○○○●
竹密不妨水過,山高無礙雲飛
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-01-08 11:52:37 IP:147.8.xxx.xxx 未訂閱
I am lost..... I was thinking you are going to implement a thread class to control a single port at a time, so creating 4 instances of the thread to control 4 ports... or do you mean create a common base class? e.g. TBase = class; TPortA = class(TBase); TPortB = class(TBase); TPortC = class(TBase); TPortD = class(TBase);
whyzn
中階會員


發表:46
回覆:149
積分:54
註冊:2002-06-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-01-08 13:57:59 IP:61.223.xxx.xxx 未訂閱
I am lost..... I was thinking you are going to implement a thread class to control a single port at a time, so creating 4 instances of the thread to control 4 ports... 是的,我是想這樣 ●○○○○○●○○○○○● 竹密不妨水過,山高無礙雲飛
------
●○○○○○●○○○○○●
竹密不妨水過,山高無礙雲飛
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-01-08 14:30:23 IP:147.8.xxx.xxx 未訂閱
May I ask you what is the problem > <>< face="Verdana, Arial, Helvetica">引言: I am lost..... I was thinking you are going to implement a thread class to control a single port at a time, so creating 4 instances of the thread to control 4 ports... 是的,我是想這樣 ●○○○○○●○○○○○● 竹密不妨水過,山高無礙雲飛
whyzn
中階會員


發表:46
回覆:149
積分:54
註冊:2002-06-16

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-01-08 19:38:32 IP:61.223.xxx.xxx 未訂閱
我是想建立四個 Thread 但是因為四個 Thread 要處理的動作大同小異 為了日後維護方便,所以我想把相同的部分先寫成 baseThread 然後再用 OverLoad 的方式分別建立底下的各個 Thread 現在是想不出什麼方式來定 constructor Create(參數); overload; 因為參數好像只對 (個數或型態) 不同才能分別建出 Thread 還是我搞昏了 ???? ●○○○○○●○○○○○● 竹密不妨水過,山高無礙雲飛
------
●○○○○○●○○○○○●
竹密不妨水過,山高無礙雲飛
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-01-09 10:29:17 IP:147.8.xxx.xxx 未訂閱
Like this?
TBaseThread = class(TThread);
TThread1 = class(TBaseThread);
TThread2 = class(TBaseThread);
TThread3 = class(TBaseThread);
TThread4 = class(TBaseThread);    var
    T1,T2,T3,T4: TBaseThread;
{...}
T1 := TThread1.Cretae(False);
T2 := TThread2.Cretae(False);
T3 := TThread3.Cretae(False);
T4 := TThread4.Cretae(False);
whyzn
中階會員


發表:46
回覆:149
積分:54
註冊:2002-06-16

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-01-10 12:01:40 IP:61.223.xxx.xxx 未訂閱
Wa, Ha. Thank you very much ! Mr. William. That's a good idea too. Thanks again. ●○○○○○●○○○○○● 竹密不妨水過,山高無礙雲飛
------
●○○○○○●○○○○○●
竹密不妨水過,山高無礙雲飛
系統時間:2024-04-26 12:55:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!