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

class 的 member function的生命

尚未結案
s07452
一般會員


發表:20
回覆:16
積分:7
註冊:2003-11-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-01 11:12:49 IP:61.56.xxx.xxx 未訂閱
一般 class 的 data member 需要 object 先 create 後才能使用 但 member function 卻不需要 create 也可以呼叫使用? 請問: 1.這時候的member function是以何種狀態存在呢? 2.是否以此種未create便呼叫member function的方式是應該盡量避免的作法? 3.(續2)或者此時member function視同一般的proc/func ?
shaofu
高階會員


發表:5
回覆:136
積分:103
註冊:2003-01-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-01 13:30:13 IP:210.243.xxx.xxx 未訂閱
引言: 一般 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-02 09:06:11 IP:61.71.xxx.xxx 未訂閱
這裡我想提出一個問題,物件的精神. 因為Delphi大部分都是Open source所以我們調用物件裡的function經常可以判斷是否會照成程式的問題, 相對的我們卻違反物件的精神.物件的封裝就是為了保全物件本身的安全.這一點在C中會經常碰到問題. 其實這不是一種絕對,我是偏向於把功能函式(沒有物件問題的)獨立抽成函式庫,當需要建立一個物件時,盡量用繼承去解決,不然就把函式庫的一部分protect到物件中. 這樣豈不是程式會變得龐大? 沒錯,但這是使用物件所需要的代價. PS:某些C的DLL函式庫經常要先用到Initial功能, 這就是規則之一, 調用此DLL所有function都必須先執行此類似指令,不然可能出現未知的問題.在某些狀況下,此點無法克服.
s07452
一般會員


發表:20
回覆:16
積分:7
註冊:2003-11-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-02 13:24:03 IP:61.56.xxx.xxx 未訂閱
引言: 請參考這篇: 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-02 14:48:10 IP:210.243.xxx.xxx 未訂閱
引言:
引言: 請參考這篇: 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-02 21:46:28 IP:61.56.xxx.xxx 未訂閱
後來再試驗又發現:
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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-03 15:04:42 IP:210.243.xxx.xxx 未訂閱
引言:
procedure SomeProc;
begin
  A.p1;     //會error, 請賜教
end;
我這邊是正常.. (Delphi6) 不過沒有 Create 會出錯本來就是天經地義的, 這個問題有需要深究下去嗎 不然把
系統時間:2024-05-06 19:15:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!