理解類引用這種型別 (轉)
問題:
書中寫到: -------------------- 類的引用是一種型別,它不是對的引用,也不是對類的引用,而是對類的型別的引用。類的引用型別定義了引用變數的型別。假設定義了一個類: type CMyClass=class ... end 下面定義一個新類的引用型別,與下面的類相關: type MyClassRef=calss of CMyClass 這樣就宣告瞭兩個型別的變數: aClassRef:MyClassRef; a:CMyClass; 其中第一個變數引用一個物件,第二個引用類: aClassRef=CMyClass; aObject=CMyClass.Create; -------------------- 這一段我看不明白,請各位解釋一下。謝謝
來自:bbs.com/delphibbs/dispu.?username=Pipi." target=_blank>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 我們定義一個基類,然後透過傳遞不同的子類,那麼一個函式只寫一次就實現不同的效果
來自:, 時間: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物件
來自:, 時間:2002-2-9 0:07:00, ID:916478謝謝,我書上的例子怎樣理解呢?
來自:, 時間:2002-2-9 0:29:00, ID:916503你書上的例子就更簡單了,根本沒講到實際的用途 就是出現aClassRef的地方你把它看成CMyClass好了
來自:" target=_blank>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; 上面這兩個東東的結果不是一樣嗎?有會什麼差別??我只注重結果
來自:, 時間:2002-2-16 1:26:00, ID:923112當然不同了
來自:, 時間:2002-2-16 2:34:00, ID:923171to testnet: 將你的兩個函式名分別改為 CreateComponent1 和 CreateComponent2 你象這樣編譯一下: CreateComponent1(TEdit); CreateComponent2(TEdit); 看出 結果 上的差別了吧?
來自:, 時間:2002-2-16 2:35:00, ID:923172前者要求傳入一個 類, 而後者要求傳入一個 物件(類的例項)
來自:, 時間:2002-2-16 2:43:00, ID:923174前一個函式將建立你傳入的類的一個例項,而後一個函式,沒有意義吧.
來自:, 時間:2002-2-16 10:53:00, ID:923281上面都說得較清楚了, type MyClassRef=calss of CMyClass //表示MyClassRef為指向CMyClass或其父類的指標.
來自:, 時間:2002-2-16 11:37:00, ID:923316類的引用就像指向類的指標一樣
來自:, 時間:2002-2-16 12:41:00, ID:923408這個特性不錯
來自:, 時間: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; 好了,這下沒有明白的話,那真是豬.[:)]
最後一種表達:
你需要什麼樣的型別,那好,你告訴我你要的型別,我給建一個這樣的物件出來。
[:(!][:(!]宣告,千萬不要誤會,我沒有罵人,我想這樣說,您的印象非常之深刻,更好理解.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992150/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java中的四種引用型別Java型別
- 詳聊Java的四種引用型別Java型別
- java中多型的理解——父類引用指向子類物件Java多型物件
- C#變數型別(1):引用型別和值型別 (轉)變數型別
- 引用型別型別
- 值型別和引用型別型別
- JavaScript引用型別-Object型別JavaScript型別Object
- 值型別與引用型別型別
- js引用型別JS型別
- javascript:引用型別JavaScript型別
- JavaScript值型別和引用型別JavaScript型別
- c#:值型別&引用型別C#型別
- ECMAScript 原始型別與引用型別型別
- Swift值型別和引用型別Swift型別
- 型別轉換工具類型別
- js基本型別和引用型別區別JS型別
- 值型別與引用型別的區別型別
- JAVA 基本型別與 引用型別區別Java型別
- 引用型別變數的強制轉換型別變數
- javascript基本型別 引用型別 基本包裝型別JavaScript型別
- C#的型別——值型別與引用型別C#型別
- JavaScript - 基本型別與引用型別值JavaScript型別
- Java的基本型別和引用型別Java型別
- Go 的引用型別Go型別
- Golang 引用型別-mapGolang型別
- 引用型別之Object型別Object
- 3.6 Java內部類四種型別Java型別
- JS篇-基本型別和引用型別、typeofJS型別
- JS基本型別與引用型別知多少JS型別
- Structs vs classes(值型別vs引用型別)Struct型別
- 【C#之值型別vs引用型別】C#型別
- 兄弟連go教程(4)型別-引用及轉換Go型別
- 簡單理解js閉包、型別引用....第一章JS型別
- c#中值型別和引用型別的區別C#型別
- Java引用型別原理剖析Java型別
- 引用型別之 Object(三)型別Object
- 時間物件、引用型別物件型別
- JavaScript的原生引用型別JavaScript型別