class 的 member function的生命 |
尚未結案
|
s07452
一般會員 發表:20 回覆:16 積分:7 註冊:2003-11-17 發送簡訊給我 |
|
shaofu
高階會員 發表:5 回覆:136 積分:103 註冊:2003-01-07 發送簡訊給我 |
引言: 一般 class 的 data member 需要 object 先 create 後才能使用 但 member function 卻不需要 create 也可以呼叫使用? 請問: 1.這時候的member function是以何種狀態存在呢? 2.是否以此種未create便呼叫member function的方式是應該盡量避免的作法? 3.(續2)或者此時member function視同一般的proc/func ?請參考這篇: http://forum.vclxx.org/topic.php?TOPIC_ID=22627&FORUM_ID=18&CAT_ID=4&Topic_Title=Class+method+%A9M+Instance+method+%2C+%A9%5F%A9%C7%A9%5F%A9%C7%21&Forum_Title=Talk 應該沒會錯意吧 |
bbtw
一般會員 發表:2 回覆:31 積分:16 註冊:2003-07-11 發送簡訊給我 |
這裡我想提出一個問題,物件的精神.
因為Delphi大部分都是Open source所以我們調用物件裡的function經常可以判斷是否會照成程式的問題, 相對的我們卻違反物件的精神.物件的封裝就是為了保全物件本身的安全.這一點在C中會經常碰到問題.
其實這不是一種絕對,我是偏向於把功能函式(沒有物件問題的)獨立抽成函式庫,當需要建立一個物件時,盡量用繼承去解決,不然就把函式庫的一部分protect到物件中.
這樣豈不是程式會變得龐大? 沒錯,但這是使用物件所需要的代價. PS:某些C的DLL函式庫經常要先用到Initial功能, 這就是規則之一, 調用此DLL所有function都必須先執行此類似指令,不然可能出現未知的問題.在某些狀況下,此點無法克服.
|
s07452
一般會員 發表:20 回覆:16 積分:7 註冊:2003-11-17 發送簡訊給我 |
引言: 請參考這篇: http://forum.vclxx.org/topic.php?TOPIC_ID=22627&FORUM_ID=18&CAT_ID=4&Topic_Title=Class+method+%A9M+Instance+method+%2C+%A9%5F%A9%C7%A9%5F%A9%C7%21&Forum_Title=Talk 應該沒會錯意吧 >>< face="Verdana, Arial, Helvetica"> 沒錯、跟這串很像、但他們討論的好像更深?阿 XD (這邊也還是請問一下好囉?) 簡單舉例:例如宣告一個 TA= class(TObjext) public constructor Create; procedure p1; end; var A: TA; 但其他地方,可以"不需要"經過 A:= TA.create; 此一敘述 卻也可以直接呼叫 A.p1; 所以才會想請問: 1.是否這是不正確的呼叫用法? 2.這樣可以用,是以怎樣的方式存在呢? 看了那串討論串才注意到:「class method」與「instance method」 以前都沒在寫 class method 的阿 ^^a 能否順便賜教?(感謝) |
shaofu
高階會員 發表:5 回覆:136 積分:103 註冊:2003-01-07 發送簡訊給我 |
引言:引言: 請參考這篇: http://forum.vclxx.org/topic.php?TOPIC_ID=22627&FORUM_ID=18&CAT_ID=4&Topic_Title=Class+method+%A9M+Instance+method+%2C+%A9%5F%A9%C7%A9%5F%A9%C7%21&Forum_Title=Talk 應該沒會錯意吧 >>< face="Verdana, Arial, Helvetica"> 沒錯、跟這串很像、但他們討論的好像更深?阿 XD (這邊也還是請問一下好囉?) 簡單舉例:例如宣告一個 TA= class(TObjext) public constructor Create; procedure p1; end; var A: TA; 但其他地方,可以"不需要"經過 A:= TA.create; 此一敘述 卻也可以直接呼叫 A.p1; 所以才會想請問: 1.是否這是不正確的呼叫用法? 2.這樣可以用,是以怎樣的方式存在呢? 看了那串討論串才注意到:「class method」與「instance method」 以前都沒在寫 class method 的阿 ^^a 能否順便賜教?(感謝)上面的討論串應該很清楚了.. 1. 可以用, 但不建議用, 因為可能 Complier 換了, 行為就不一樣 2. 這個問做 complier 的人吧 :P 我還是別多加揣測 > 另外.. 剛看了一下 |
s07452
一般會員 發表:20 回覆:16 積分:7 註冊:2003-11-17 發送簡訊給我 |
後來再試驗又發現:
type TA= class(TObject) public procedure p1; end; TB= class(TObject) public procedure p2; end; procedure SomeProc; var A: TA; B: TB; implementation procedure SomeProc; begin A.p1; //會error, 請賜教 end; procedure TA.p1; begin B.p2; //在未create B之前,仍可執行;就是小弟之前的疑問處啦 end; procedure TB.p2; begin DoSomething; end;但倘若將原 TA 的部分修改成這樣: TA= class(TObject) public class procedure p1; end;則在 procedure SomeProc; begin A.p1; //可正常使用 end;請賜教, 感激 |
shaofu
高階會員 發表:5 回覆:136 積分:103 註冊:2003-01-07 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |