反射機制傳遞類

2021-04-20 11:36:29 字數 1537 閱讀 7365

鑑於某人說delphi的反射不能傳入或傳出類,我在此糾正一下這個說法,下面的**可以證實,類可以傳入傳出。

由於我已經把d2009的反射單元移去d2007,因此就不用d2009了,所以**中暫時不考慮unicode的問題。

unit unit1;

inte***ce

uses

windows, messages, sysutils, variants, classes, graphics, controls, forms,

dialogs, objautox, stdctrls;

type

ttest=class(tpersistent)

public

procedure call(s: string; aform: tform);

function call2(s: string): tcomponent;

end;

tform1 = class(tform)

button1: tbutton;

button2: tbutton;

procedure button1click(sender: tobject);

procedure button2click(sender: tobject);

private

public

end;

varform1: tform1;

implementation

procedure tform1.button1click(sender: tobject);

vart: ttest;

mih : pmethodinfoheader;

begin

t := ttest.create;

mih := getmethodinfo(t, 'call');

objectinvoke(t, mih, [1,2], ['222',integer(self)]);

end;

procedure tform1.button2click(sender: tobject);

vart: ttest;

mih : pmethodinfoheader;

ret: integer;

begin

t := ttest.create;

mih := getmethodinfo(t, 'call2');

ret:=objectinvoke(t, mih, [1,2], ['button1']);

tbutton(ret).caption := '222';

end;

procedure ttest.call(s: string; aform: tform);

begin

showmessage(s+':'+aform.caption);

end;

function ttest.call2(s: string): tcomponent;

begin

result := form1.findcomponent(s);

end;

end.

C 的類反射多型機制

一 基類 class icmdstatic 二 子類1 class ccmd502 public icmdstatic 三 子類2 class ccmd503 public icmdstatic 四 類工廠模板標頭檔案 ifndef genericfactoryh define genericfac...

類的載入和反射機制

1.啟動jvm 2.將需要執行的class檔案載入到虛擬機器記憶體中 3.找到主類,開始執行主函式 載入步驟 1.先委託父類載入類,如果父類已經載入,就不需要再次載入,如果父類沒有載入,再由本載入器載入 2.解析類路徑,將類路徑轉換成檔案路徑 3.通過檔案輸入流來讀取class檔案,得到位元組陣列 ...

C 使用反射機制獲取類資訊

用反射動態建立類例項,並呼叫其公有成員函式。新建乙個類庫專案,增加乙個getsum方法。using system namespace classlibrary1 public int getsum int x,int y 再另建乙個專案,在專案中引用上面生成的classlibrary1.dll sy...