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

關於物件屬性的呼叫

尚未結案
nick6562
一般會員


發表:26
回覆:19
積分:9
註冊:2004-07-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-31 13:06:28 IP:211.74.xxx.xxx 未訂閱
各位高手: 不好意思,原本是希望這個問題用搜尋的方式,但我不知道該如何用什麼關鍵字... 我的問題是,我要如何能夠在不使用某物件的情況下,而使用該物件的屬性及事件, 謝謝各位...
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-31 15:46:54 IP:218.163.xxx.xxx 未訂閱
nick6562 你好: 搜尋 "RegisterClass", 看看是否有你想要的.
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-31 16:24:55 IP:61.218.xxx.xxx 未訂閱
耶?!理論上除了類別方法外(Class methods),其餘的,如果不你建立該物件的話,是沒有辦法取用物件的方法的. 請問你要做出什麼功能的程式,會有這樣的限制?
nick6562
一般會員


發表:26
回覆:19
積分:9
註冊:2004-07-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-01 09:20:47 IP:211.74.xxx.xxx 未訂閱
引言: 耶?!理論上除了類別方法外(Class methods),其餘的,如果不你建立該物件的話,是沒有辦法取用物件的方法的. 請問你要做出什麼功能的程式,會有這樣的限制?
Dear change.jian: 你好;感謝你的回應,事實上因為我們想已某個元件,可以繼承另一個元件的屬性(即使該元件不存在),所以才會問這個問題...
nick6562
一般會員


發表:26
回覆:19
積分:9
註冊:2004-07-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-01 09:21:30 IP:211.74.xxx.xxx 未訂閱
引言: 耶?!理論上除了類別方法外(Class methods),其餘的,如果不你建立該物件的話,是沒有辦法取用物件的方法的. 請問你要做出什麼功能的程式,會有這樣的限制?
Dear Mickey: 我仍然找不到... Dear change.jian: 你好;感謝你的回應,事實上因為我們想已某個元件,可以繼承另一個元件的屬性(即使該元件不存在),所以才會問這個問題...
william
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-01 12:10:57 IP:147.8.xxx.xxx 未訂閱
引言: 你好;感謝你的回應,事實上因為我們想已某個元件,可以繼承另一個元件的屬性(即使該元件不存在),所以才會問這個問題...< face="Verdana, Arial, Helvetica"> Inherts from 不存在的元件 < >< > Or you want to implement interface???
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-09-01 12:12:15 IP:61.218.xxx.xxx 未訂閱
可以再說明的詳細一點嗎?或舉個例子說明一下
引言:
引言: 耶?!理論上除了類別方法外(Class methods),其餘的,如果不你建立該物件的話,是沒有辦法取用物件的方法的. 請問你要做出什麼功能的程式,會有這樣的限制?
Dear change.jian: 你好;感謝你的回應,事實上因為我們想已某個元件,可以繼承另一個元件的屬性(即使該元件不存在),所以才會問這個問題... < face="Verdana, Arial, Helvetica">
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-09-03 00:54:18 IP:211.162.xxx.xxx 未訂閱
不好意思,小弟插個花,一點淺見,還請先進們指正:    物件就包含在Class中,先來看看Class吧:Class是一個包含FieldMethodProperty(Event)三種成員的構造體.而物件既是Class的實例,是使用constructors(通常用Create)來生成的一個記憶體塊。當銷毀一個物件使用destructors(通常用Destory). 再來看看Method吧,從幾個觀點來看 1從調用者的角度 ①普通方法 ②類方法(Class Method) 不同點:普通方法只能被類實例(既物件)調用,而類方法不但可以被物件調用,還可以直接被類調用。eg:

......
  TOneObject = class
  class procedure ClassProc;  //聲明一個類方法ClassProc。方法是在最前面加上關鍵字Class
  procedure OneProc;          //聲明一個普通方法OneProc
  end;
......    implementation    {$R *.dfm}
......    class procedure TOneObject.ClassProc;
begin
  ShowMessage('ClassProc類方法');
end;    procedure TOneObject.OneProc;
begin
  ShowMessage('OneProce普通方法');
end;    procedure TForm1.Button1Click(Sender: TObject);
var
  OneObj: TOneObject;
begin
  TOneObject.ClassProc;                  //類方法可以直接被類調用
  OneObj := TOneObject.Create;           //Create本身也是個類方法
  OneObj.ClassProc;                      //物件也能調用類方法
  OneObj.OneProc;                        //普通物件只能被物件調用
  OneObj.Free;
end;
2從調用機制上來看: ①靜態方法 ②虛方法 ③純虛方法 不同點時:靜態方法沒有任何的修飾詞,而虛方法需要用關鍵字virtualdynamic來實做(需要在子類中對虛方法進行覆蓋時,使用關鍵字override),eg:

......
  TParent = class                                //父類
    procedure OneProc; virtual;
    function  OneFun:   Boolean;  dynamic;
  end;      TChild  = class(TParent)                       //子類
    procedure OneProc;  override;
    function  OneFun:   Boolean;  override;
  end;    ......
implementation    {$R *.dfm}
......    procedure TParent.OneProc;              //父類
begin
  ShowMessage('TParent的OneProc');
end;    function  TParent.OneFun: Boolean;
begin
  Result := False;
end;    procedure TChild.OneProc;                //子類,注意這裏開始用虛方法進行覆蓋
begin
  inherited;                             //調用父類的OneProc代碼,這句顯示的結果是'TParent的OneProc'
  ShowMessage('TChild的OneProc');
end;    function  TChild.OneFun: Boolean;
begin
  Result := inherited OneFun;            //調用父類的OneFun代碼
  if not Result then
    Result := True;
end;    procedure TForm1.Button1Click(Sender: TObject);
var
  Child: TChild;
begin
  Child := TChild.Create;
  Child.OneProc;
  if Child.OneFun then
    ShowMessage('OneFun return true返回真哦');
  Child.Free;
end;
而純虛方法是虛方法的一種特例,主要特定就是在虛方法後面加上關鍵字abstract,需要注意的是:純虛方法只有聲明部分,沒有實現部分,而虛方法必須有實現部分,那怕只有begin...end而裏面沒有code都行。純虛方法只有在子類覆蓋並實現後才能被調用。 如果一個Class中含有純虛方法(abstract members),那麽這個Class就是abstract class 用來分析純虛方法的最好例子就是TStrings,我們打開TStrings的code,不難發現裏面有許多純虛方法: procedure Clear; virtual; abstract; procedure Delete(Index: Integer); virtual; abstract; 而純虛類是不應該直接用來創建實例的,因爲一旦使用了純虛方法,將抛出異常,而我們很難保證不在某些地方調用純虛方法。所以儘管實例化純虛方法是可以的,但是我們還是要避免。純虛類一般是中間類,實際使用的總是覆蓋實現了純虛方法的字類。這也就是爲什麽我們都是使用TStrings的子類而不使用它本身。 而關於屬性的討論,請參考一下該篇中小弟的相關討論: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=55494 鴨子太囂張,兔子太多嘴,我是bigdog,我很乖 參考文獻 “>人生在勤,不索何獲 <>業精於勤荒於嬉,行成於思毀於隨 <>臨淵羡魚不如退而結網 發表人 -
------
人生在勤,不索何获?
系統時間:2024-05-18 12:42:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!