請問多型與繼承在此情況下應如何選用 |
答題得分者是:william
|
whyzn
中階會員 發表:46 回覆:149 積分:54 註冊:2002-06-16 發送簡訊給我 |
我用一台 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 發送簡訊給我 |
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 發送簡訊給我 |
是這樣的,
因為四個 Port 的 I/O 都很類似,只差別每部機器的偵測點數不同
以及機器位址(每台機器兩個位址)不同,所以程式的內容也很相近,
所以我原先的想法是,用一支 Thread 分別
constructor Create(AOwner: TObject); overload; 四次與之對應
但為了讓 constructor 區分出四個,所以想用傳入參數的不同來達到目的
不過這樣好像只對 參數(個數或型態) 不同才有用 所以這種情況應如何作才能發揮效益呢 (不管是程式的維護或機器的及時監控) 如果我把相同部分寫在最上層
然後再用四個 thread 繼承下來作不同的部分,這樣會比較單純嗎 ? 因為繼承的實作我沒經驗,請學長再指導一下, Thanks a lot. ●○○○○○●○○○○○●
竹密不妨水過,山高無礙雲飛
------
●○○○○○●○○○○○● 竹密不妨水過,山高無礙雲飛 |
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
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 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
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 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
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 發送簡訊給我 |
我是想建立四個 Thread
但是因為四個 Thread 要處理的動作大同小異
為了日後維護方便,所以我想把相同的部分先寫成 baseThread
然後再用 OverLoad 的方式分別建立底下的各個 Thread
現在是想不出什麼方式來定
constructor Create(參數); overload;
因為參數好像只對 (個數或型態) 不同才能分別建出 Thread 還是我搞昏了 ???? ●○○○○○●○○○○○●
竹密不妨水過,山高無礙雲飛
------
●○○○○○●○○○○○● 竹密不妨水過,山高無礙雲飛 |
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |