這個概念本來在乙個關於delphi rtti 介紹的文件中已經說得很清楚了。但沒有任何關於實際使用的介紹,在我明白了這個概念和如何使用後決定寫乙個使用說明以方便大家使用。
類的類在什麼時候使用:
知道父類但需要建立具體的子類時(你不知道子類會是什麼)
例如:關鍵:
tcomponentclass = class of tcomponent;
begin
instance := tcomponent(instanceclass.newinstance);
instance.create(self);
...end;
關鍵的**就是加粗的這兩句和類的類宣告
本質:代價:
額外的rtti資訊會使我們的類占用額外的記憶體,這是便利的代價。
簡單的問題複雜的說明
本來問題已經說明,但還是存在乙個問題:我們的**中什麼地方需要使用class of ?我發現這個問題說明起來很複雜,我舉個我人個開發使用的例子。在做資料庫程式開發時:我先定義乙個ttableset物件,其功能類似datamodule。用於放置texporttable,texporttable類其功能類似tdataset。我定義了它的增、刪、改、查等基本操作。ttableset物件有乙個add方法,大概**如下:
procedure ttableset.add(const aexoprtobjectinfo: record)
varexprottable: texporttable;
begin
exprottable := texporttable.create(nil)
根據aexoprtobjectinfo的資料內容具體化exporttable物件以方便復用**
end;
然後,在具體的業務功能(例如入庫單管理)中需要從texporttable繼承乙個入庫單類
tinstoragebill = class(texporttable)
一些具體的類屬性和方法
覆蓋texporttable的create方法以建立相應的資源
end;
廢話了那麼多,問題才終於出現了:「我怎麼才能在ttableset.add()方法中建立tinstoragebill物件?」或換而言之:「我怎麼在在知道父類的情況下建立其不確定的子類?」。 而你們都知道答案了。
delphi的Tobject類賞析
delphi的tobject類賞析 tobject class 建立 constructor create 釋放 procedure free 初始化實列 class function initinstance instance pointer tobject 清除實列 procedure clea...
理解 Delphi 的類 二 初識類的方法
說到 類 就會提到 屬性 方法 事件 這是類包含的內容 封裝 繼承 多型 這是類的主要用途 下面定義並呼叫了了乙個過程 myproc 乙個函式 myfun.unit unit1 inte ce uses windows,messages,sysutils,variants,classes,graph...
理解 Delphi 的類 五 認識類的繼承
類 乙個是 tform 類 乙個是 tform1 類 tform1 繼承於 tform.tform 是 tform1 的父類 tform1 是 tform 的子類.unit unit1 inte ce uses windows,messages,sysutils,variants,classes,g...