全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1559
推到 Plurk!
推到 Facebook!

Delphi的metaclass似乎可以typecast

 
A022
一般會員


發表:18
回覆:29
積分:9
註冊:2002-06-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2018-04-12 00:51:02 IP:61.61.xxx.xxx 未訂閱
找到網站From Delphi Package 學習筆記
使用Google 關鍵字delphi metaclass
搜尋link到http://sun.cis.scu.edu.tw/~nms9115/articles/delphi/Package/package.htm

裏面有關內容及程式碼,部份節錄:怕侵權,
請自行看該網站文章 VCL

類別註冊函式 (Classes.pas)RegisterClass 與 RegisterClasses
procedure RegisterClass(AClass: TPersistentClass);
procedure RegisterClasses(AClasses: array of TPersistentClass);

透過串流系統(stream system)註冊類別,已註冊過的類別不會重複註冊,
但如果是不同 package 有相同的類別名稱,則呼叫此函式會出現EFilerError 的錯誤訊息。

此函式通常放在程式的 initialization 區段。

GetClass 透過 RegisterClass 註冊的類別可以用此函式取得類別的 MetaClass,取得 MetaClass 之後就可以以此來建立該類別的物件。

參考下面的範例(以下展示的方式不只可以建立 Form 物件,稍作修改就可以建立其他物件):

function CreateFormByClassName(ClassName: string): integer;
var AClass: TPersistentClass; AForm: TCustomForm; begin Result := mrNone;
{ Note that TApplication "owns" this form and thus it must
be freed prior to unloading the package }
AClass := GetClass(ClassName);
if AClass <> nil then begin
AForm := TComponentClass(AClass).Create(Application) as TCustomForm;
Result := AForm.ShowModal;
end;
end;

這幾行是重點
... var AClass: TPersistentClass; AForm: TCustomForm;
... AClass := GetClass(ClassName); if AClass <> nil then begin
AForm := TComponentClass(AClass).Create(Application) as TCustomForm;
//TPersistentClass類別參考變數AClass竟能typecast成TComponentClass及使用as成TCustomForm
Result := AForm.ShowModal;
{Result變數& ClassName是因自訂function CreateFormByClassName(ClassName: string): integer; }
end;

真是一篇特別的文章..
編輯記錄
A022 重新編輯於 2018-04-12 01:33:08, 註解 無‧
A022 重新編輯於 2018-04-12 01:34:17, 註解 無‧
A022 重新編輯於 2018-04-12 01:37:02, 註解 無‧
GrandRURU 重新編輯於 2018-04-12 09:29:45, 註解 無‧
A022
一般會員


發表:18
回覆:29
積分:9
註冊:2002-06-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2018-04-12 01:07:34 IP:61.61.xxx.xxx 未訂閱
SORRY!不會排版請見諒!
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2018-04-12 09:16:28 IP:119.137.xxx.xxx 未訂閱
Delphi 这个功能,可以让你在 Run time 决定,你要 Create 哪个类别的 Object。程序因此更灵活。
系統時間:2024-04-29 10:12:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!