Rtti單元 1 獲取類的方法 屬性 欄位的列表

2021-08-25 15:27:05 字數 2764 閱讀 3722

通過 rtti 單元的 trtticontext(是個 record), 可以方便地獲取類的方法、屬性、欄位的列表.

unit unit1; 

inte***ce 

uses 

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

dialogs, stdctrls; 

type 

tform1 = class(tform) 

memo1: tmemo; 

button1: tbutton; 

button2: tbutton; 

button3: tbutton; 

button4: tbutton; 

button5: tbutton; 

procedure button1click(sender: tobject); 

procedure button2click(sender: tobject); 

procedure button3click(sender: tobject); 

procedure button4click(sender: tobject); 

procedure button5click(sender: tobject); 

end; 

var 

form1: tform1; 

implementation 

uses rtti; 

procedure tform1.button1click(sender: tobject); 

var 

ctx: trtticontext; 

t: trttitype; 

begin 

memo1.clear; 

for t in ctx.gettypes do memo1.lines.add(t.name); 

end; 

//獲取 tbutton 類的方法 

procedure tform1.button2click(sender: tobject); 

var 

ctx: trtticontext; 

t: trttitype; 

m: trttimethod; 

begin 

memo1.clear; 

t := ctx.gettype(tbutton); 

//for m in t.getmethods do memo1.lines.add(m.name); 

for m in t.getmethods do memo1.lines.add(m.tostring); 

end; 

//獲取 tbutton 類的屬性 

procedure tform1.button3click(sender: tobject); 

var 

ctx: trtticontext; 

t: trttitype; 

p: trttiproperty; 

begin 

memo1.clear; 

t := ctx.gettype(tbutton); 

//for p in t.getproperties do memo1.lines.add(p.name); 

for p in t.getproperties do memo1.lines.add(p.tostring); 

end; 

//獲取 tbutton 類的字段 

procedure tform1.button4click(sender: tobject); 

var 

ctx: trtticontext; 

t: trttitype; 

f: trttifield; 

begin 

memo1.clear; 

t := ctx.gettype(tbutton); 

//for f in t.getfields do memo1.lines.add(f.name); 

for f in t.getfields do memo1.lines.add(f.tostring); 

end; 

//獲取獲取 tbutton 類的方法集合、屬性集合、字段集合 

procedure tform1.button5click(sender: tobject); 

var 

ctx: trtticontext; 

t: trttitype; 

ms: tarray; 

ps: tarray; 

fs: tarray; 

begin 

memo1.clear; 

t := ctx.gettype(tbutton); 

ms := t.getmethods; 

ps := t.getproperties; 

fs := t.getfields; 

memo1.lines.add(format('%s 類共有 %d 個方法', [t.name, length(ms)])); 

memo1.lines.add(format('%s 類共有 %d 個屬性', [t.name, length(ps)])); 

memo1.lines.add(format('%s 類共有 %d 個字段', [t.name, length(fs)])); 

end; 

end.

Rtti單元 1 獲取類的方法 屬性 欄位的列表

通過 rtti 單元的 trtticontext 是個 record 可以方便地獲取類的方法 屬性 欄位的列表.unit unit1 inte ce uses windows,messages,sysutils,variants,classes,graphics,controls,forms,dia...

Python中類的方法屬性與方法屬性的動態繫結

最近在 學習python 純粹是自己的興趣愛好,然而並沒有系統地看python 程式設計書籍,覺得上面描述過於繁瑣,在 找了一些學習的 發現廖雪峰老師的 上面的學習資源很不錯,而且言簡意賅,提取了一些 python python 的執行 缺點就是沒有系統的看 python 的書籍,不能及時的將知識的...

Python 靜態方法,類方法,屬性方法

1.靜態方法 靜態方法 只是名義上歸類管理,實際上在靜態方法中訪問不了類和例項 class person object def init self name self.name name staticmethod 截斷類與函式關係,不能呼叫類變數 def eat print s is eating ...