| 問題: 書中寫到:--------------------類的引用是一種類型,它不是對對象的引用,也不是對類的引用,而是對類的類型的引用。類的引用類型定義了引用變量的類型。假設用戶定義了一個類: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);beginobj;=cls.Create(application);把obj放進formend;調用的時候,如果是 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;//這里是在問"你是給我送個馬類還是豬類呢[?]"http://結果呢,下面的代碼送了一個窗口類[:)]begin result:=ControlCls.Create(Form1); ...end;function CreateComponent(ControlCls: TControl): TControl;//在問,你要那一個豬[?]//答:我要窗口1的那個豬[^]begin result:=ControlCls.Create(Form1); ...end;好了,這下沒有明白的話,那真是豬.[:)] 最后一種表達: 你需要什么樣的類型,那好,你告訴我你要的類型,我給建一個這樣的對象出來。 [:(!][:(!]聲明,千萬不要誤會,我沒有罵人,我想這樣說,您的印象非常之深刻,更好理解. | 
新聞熱點
疑難解答