Object Pascal:從物件指標談起 (轉)
Pascal:從指標談起:namespace prefix = o ns = "urn:schemas--com::office" />
作者: Musicwind®
建立時間: 2001-08-27
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
歷史:No.1
更新時間:2001-08-27 19:47
更新人員:Musicwind®
更新備註:建立。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. 物件指標無處不在
有人說指標是C語言的靈魂,但在Object Pascal中又何嘗不是如此呢!你看中最常見的“Form1: TForm1;”的宣告,還有“procedure TForm1.Button1Click(Sender: TObject);”這樣的語句,其中的Form1不正是一個物件指標麼?Sender,不也是的麼?在Object Pascal中,透過一個物件指標來訪問一個物件例項是最直接、最有效的方式。
2. 物件指標的
當你宣告一個TObject(或者TObject的派生類)型別的變數的時候,你便獲得了一個物件指標,但是那只是一個指標而已,除了給你四個位元組的儲存空間外,並沒有給你更多。並且,最初那四個位元組的值是不確定的,這意味著你不能認為它一定是一個nil或者別的什麼值。
3. 物件指標只有一種
物件指標無論怎麼千變萬化,都可以歸為一種,那就是TObject型別的物件指標。因為所有其它類,都是TObject派生,因此TObject型別的指標到處適用。比如這樣的程式碼:
var
Obj: TObject;
Form: TForm;
begin
//….
Obj := Form; //可以有這樣的程式碼,這裡的型別轉換是自動完成的。
…
end;
也許你會問,那麼反過來可不可以呢?當然可以,但是沒有那麼方便。比如:
begin
Fo:= TForm(Obj); // ß 這裡需要經過強制轉換
//…
end;
正如你所知道的,不同型別的變數是否可以互相轉換,取決於它們對於儲存空間的需求如何。正因為同是物件指標,對儲存空間的要求完全一致,所以強制轉換不成問題。
物件指標只有一種,似乎也可以總結為“天下指標皆一家”這句話。
4. 靈活運用
有沒有嘗試過這樣的程式碼呢?
var
i: Integer;
dw: D;
begin
I := Integer(Button1);
ShowMessage(TButton(I).Caption);
dw := DWORD(Button1);
ShowMessage(TButton(dw).ClassName);
end;
你會發現,原來Integer,DWORD也可以作為物件指標來使用。原因自然是因為它們的儲存空間與TObject型別的指標所要求的相同。
推而廣之,只要有四個位元組……(後面就不用我說了吧?),或者套用阿基米德的一句名言“只要給我四個位元組,我就可以……”。
Object Pascal的世界其實也很精彩,只要你肯發現!
/develop/my_article.?author=Musicwind">更多文章
[文終]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990258/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 談談JavaScript中建立物件(Object)JavaScript物件Object
- 從 Java 到 Scala(一):物件導向談起Java物件
- 【C++系列】指標物件和物件指標的區別C++指標物件
- js字串string轉object物件 - 方法篇JS字串Object物件
- 從影像融合談起
- js 物件轉為js陣列 && Object方法JS物件陣列Object
- 【原創】淺談指標(十三)指向陣列的指標指標陣列
- 【原創】淺談指標(一)指標
- 【原創】淺談指標(二)指標
- 【原創】淺談指標(三)指標
- 【原創】淺談指標(四)指標
- Java如何將Object轉換成指定Class物件JavaObject物件
- JavaScript Object 物件JavaScriptObject物件
- 120 C++中的物件指標C++物件指標
- 2.3C++物件模型和this指標C++物件模型指標
- 從JavaScript 的關鍵詞談起JavaScript
- 高可用一覽-從LVS談起
- js列印object物件JSObject物件
- javascript-物件objectJavaScript物件Object
- STL容器裡存放物件還是指標物件指標
- 夯實Java:從物件導向說起Java物件
- C語言重點——指標篇(一文讓你完全搞懂指標)| 從記憶體理解指標 | 指標完全解析C語言指標記憶體
- 艾偉_轉載:從ASP.NET的PHP執行速度比較談起ASP.NETPHP
- 從機器學習談起,深度好文機器學習
- 【原創】淺談指標(九)二維陣列和多級指標相關指標陣列
- 【原創】淺談指標(七)字串相關(詳細版本)與指標運算指標字串
- Object物件的屬性Object物件
- C++物件模型:objectC++物件模型Object
- 【原創】淺談指標(十一)alloca函式指標函式
- Modern Pascal is Still in the Race (Modern Pascal 仍在競賽中)
- 從JavaScript中的類陣列物件說起JavaScript陣列物件
- 末日生存手冊:從何為末日談起
- 從一道前端面試題談起前端面試題
- C++中函式指標與函式物件C++函式指標物件
- 【原創】淺談指標(十二)關於static(上)指標
- TypeScript 中令人迷惑的物件型別:Object、{} 和 objectTypeScript物件型別Object
- Js 跟手轉動的羅盤指標JS指標
- 通達信爆量起漲指標公式原始碼指標公式原始碼
- JavaScript 基礎之物件ObjectJavaScript物件Object