Wolfgang Chien's Homepage | Delphi學習筆記 - 問答篇 |
在 c++ 中,宣告有兩種
Shape abc; 和 Shape *p; p= new Shape;
上述方法都可以行的通。但有用new ,就一定要 free 。
問題一:
如果宣告, Shpae *p;而不 new 它,而直接拿來用好似也可以,那有沒有 new 似忽一樣? 在 delphi 中
Shape = class(..); begin . . end; procedure ....; var MyShape :Shape; begin MyShape.xxx:= 12; . . end;
問題二:
delphi 中一般宣告好 有一 create 的呼叫,類似 new,,但不 create好像也可以用,不懂差別在那?
一般來說, 在 var 後面的定義只是在堆疊中配置一個指向某一特定類料型態的「指標」而已,在經過 Create 建構後, 該物件才真正存在
上述的「指標」, 正確的稱呼方法是「參考」(Reference), 有關於這點 --
我先從記錄(record)型態講起, 假定:
type PMyRecord = ^TMyRecord; TMyRecord = record A: integer; ... end; ... var OneRecord: PMyRecord;
那麼記錄的記憶體配置的確是用 New() 即可, 當配置了一塊 TMyRecord 的記憶體空間後, OneRecord 是指向這塊記憶體空間的指標, 要存取各個欄位, 語法即是 OneRecord^.A , 關於這種'依址取值', C 與 Pascal 的作法都一樣, 只不過語法不同罷了.
然而當 record 演化成 class 時, 建構物件就不只是配置記憶體這麼單純而已, 從此處起, C 與 Pascal 有了不同的作法 --
![]() |
首先, Pascal 要用 MyObject = TMyObjectClass.Create 的方法建構物件. |
![]() |
其次, 不同於 record pointer 的是, 要參考物件中的公開介面, Pascal 簡化了語法, 不再採用 MyObject^.PropertyName, 而是直接寫成: MyObject.PropertyName |
雖然也是指標的觀念, 但畢竟有些不同, 是嗎? 於是, Object Pascal特別將之稱為'參考'(Refrence).
也就是說, 如果要講語法統一的話, 物件.屬性, 物件.方法 也應該像是 C 語言一樣(物件->方法), 寫成 物件^.屬性, 物件^.方法,但是Delphi 用的卻是VB的語法, 是用一個「.」(句點)而已, 但畢竟是指標的概念, Compiler 代理了那個 ^ 符號, 所以, Delphi 管這種'物件指標'一個特別的名詞: '物件參考'(Object Reference).
首頁 | 學習筆記 | 主題公園 | 軟體下載 | 關於本站 | 討論信群 | 相約下次 |