問題:
書中寫到:
--------------------
類的引用是一種類型,它不是對對象的引用,也不是對類的引用,
而是對類的類型的引用。類的引用類型定義了引用變量的類型。
假設用戶定義了一個類:
type
CMyClass=class
...
end
下面定義一個新類的引用類型,與下面的類相關:
type
MyClassRef=calss of CMyClass
這樣就聲明了兩個類型的變量:
aClassRef:MyClassRef;
aObject:CMyClass;
其中第一個變量引用一個對象,第二個引用類:
aClassRef=CMyClass;
aObject=CMyClass.Create;
--------------------
這一段我看不明白,請各位解釋一下。謝謝
來自:Pipi., 時間:2002-2-8 23:13:00, ID:916427
另外舉一個例子吧,比如我可以寫一個函數
type TControlClass = class of TControl;
procedure insert_control(cls:TControlClass);
begin
obj;=cls.Create(Application);
把obj放進form
end;
調用的時候,如果是 insert_control(TEdit) 那麼放進form的是一個編輯框
如果是 insert_control(TButton) 那麼放進form的是一個按鈕
謝復雜一點就是
var ctl:TControlClass;
ctr:=TEdit;
insert_control(ctl)
------------------------------
注意上面我們用到TButton和TEdit它們都有共同的祖先TControl
我們定義一個基類,然後通過傳遞不同的子類,那麼一個函數只寫一次就實現不同的效果
來自:Holyowl, 時間:2002-2-8 23:26:00, ID:916440
類引用的用途就是創建在編譯器無法確定的對象,舉個列子:
Type
TControlCls = Class of TControl;
function CreateComponent(ControlCls: TControlCls): TControl;
begin
result:=ControlCls.Create(Form1);
...
end;
調用時如:
CreateComponent(TMemo);//創建TMemo對象
CreateComponent(TEdit);//創建TEdit對象
來自:renrf, 時間:2002-2-9 0:07:00, ID:916478
謝謝,
我書上的例子怎樣理解呢?
來自:Pipi., 時間:2002-2-9 0:29:00, ID:916503
你書上的例子就更簡單了,根本沒講到實際的用途
就是出現aClassRef的地方你把它看成CMyClass好了
來自:testnet, 時間:2002-2-16 1:17:00, ID:923102
提前提前,我還沒看明
Type
TControlCls = Class of TControl;
function CreateComponent(ControlCls: TControlCls): TControl;
begin
result:=ControlCls.Create(Form1);
...
end;
function CreateComponent(ControlCls: TControl): TControl;
begin
result:=ControlCls.Create(Form1);
...
end;
上面這兩個東東的結果不是一樣嗎?有會什麼差別??我只注重結果
來自:Pipi., 時間:2002-2-16 1:26:00, ID:923112
當然不同了
來自:beta, 時間:2002-2-16 2:34:00, ID:923171
to testnet:
將你的兩個函數名分別改為 CreateComponent1 和 CreateComponent2
你象這樣編譯一下:
CreateComponent1(TEdit);
CreateComponent2(TEdit);
看出 結果 上的差別了吧?
來自:beta, 時間:2002-2-16 2:35:00, ID:923172
前者要求傳入一個 類, 而後者要求傳入一個 對象(類的實例)
來自:beta, 時間:2002-2-16 2:43:00, ID:923174
前一個函數將創建你傳入的類的一個實例,而後一個函數,沒有意義吧.
來自:Jhdandcl, 時間:2002-2-16 10:53:00, ID:923281
上面都說得較清楚了,
type
MyClassRef=calss of CMyClass //表示MyClassRef為指向CMyClass或其父類的指針.
來自:leasun, 時間:2002-2-16 11:37:00, ID:923316
類的引用就像指向類的指針一樣
來自:testnet, 時間:2002-2-16 12:41:00, ID:923408
這個特性不錯
來自:xiangya, 時間:2002-2-21 1:33:00, ID:931109 | 編輯
沒有說清楚![:D]看看這裡的解釋:
准確的說,這是一種編譯器提供的原始二次識別的方法.
"我定義很多的類,當然,他們是一個系統的,然後,我把它們統統成為某某類,
當你需要某個類或者類的實例(通常是後者)的時候,你就告訴我那個類的名稱,
然後,我就給你那個類,或者類的實例"其實這也不清楚,在後面,
"你是一個豬,豬類,他是一個馬,馬類,我是一個頭人,人類,"
好了,"我們這些類都統統稱為動物類"(實際生活中有動物類嗎[?]沒有!
都是抽象出來的概念)那麼,動物類的實例我們稱為某個動物,
現在,屠宰場要買一個動物,好!到底是要一個豬呢,還是一個馬嗎[?]反正不會是一頭人啦.
這樣,我們送去一個豬類或者馬類(記住,這是類型),不管如何,屠宰場就會得到一個動物.
最後,某個人類的實例就有得吃了[:D]
好好想想,然後對照下面,
Type
TControlCls = Class of TControl;
function CreateComponent(ControlCls: TControlCls): TControl;
//這裡是在問"你是給我送個馬類還是豬類呢[?]"
//結果呢,下面的代碼送了一個窗口類[:)]
begin
result:=ControlCls.Create(Form1);
...
end;
function CreateComponent(ControlCls: TControl): TControl;
//在問,你要那一個豬[?]
//答:我要窗口1的那個豬[^]
begin
result:=ControlCls.Create(Form1);
...
end;
好了,這下沒有明白的話,那真是豬.[:)]
最後一種表達:
你需要什麼樣的類型,那好,你告訴我你要的類型,我給建一個這樣的對象出來。
[:(!][:(!]聲明,千萬不要誤會,我沒有罵人,我想這樣說,您的印象非常之深刻,更好理解.