- Expert Delphi
- Pawe? G?owacki
- 267字
- 2021-07-02 20:44:24
Runtime Type Information
RTTI provides reflection capabilities to the Object Pascal language. With reflection, different types of meta-programming scenarios are possible. You can, for example, write code that will be able to operate on objects that it does not know about. RTTI provides abstractions for all the different types available in the Object Pascal language in the System.Rtti unit that comes with Delphi. All classes and built-in simple types can be treated in a unified way using the TValue record. If you want to programmatically inspect a type and to know whether it is a class and what members it contains, you can use TRttiContext, which has a GetType method that returns an instance of the TRttiType reference, which has methods that let you inspect a given type and iterate through all its members if it is a class.
In our documentation attribute example, we can use RTTI to retrieve documentation URLs for the type itself and for its methods. Refer to the following code snippet:
uses RTTI, uDocAttribute, uMySuperClass; procedure TFormDemo.Button1Click(Sender: TObject); var ctx: TRttiContext; t: TRttiType; m: TRttiMethod; a: TCustomAttribute; begin ClearLog; ctx := TRttiContext.Create; try t := ctx.GetType(TMySuperClass); for a in t.GetAttributes do if a is DocAttribute then Log(Format('Type = %s; Attribute = %s, URL = %s', [TMySuperClass.ClassName, a.ClassName, DocAttribute(a).URL])); for m in t.GetMethods do for a in m.GetAttributes do if a is DocAttribute then Log(Format('Type = %s; Method = %s; Attribute = %s, URL = %s', [TMySuperClass.ClassName, m.Name, a.ClassName, DocAttribute(a).URL])); finally ctx.Free; end; end;
The RTTI context object owns all the intermediate objects that represent different class members such as TRttiMethod or TRttiAttribute.
- INSTANT Mock Testing with PowerMock
- iOS面試一戰(zhàn)到底
- Python for Secret Agents:Volume II
- Implementing Cisco Networking Solutions
- TypeScript項目開發(fā)實戰(zhàn)
- Python編程:從入門到實踐
- RabbitMQ Cookbook
- Learning SciPy for Numerical and Scientific Computing(Second Edition)
- Unity 3D/2D移動開發(fā)實戰(zhàn)教程
- Julia for Data Science
- Node.js開發(fā)指南
- 從0到1:HTML5 Canvas動畫開發(fā)
- Hands-On Robotics Programming with C++
- 大數(shù)據(jù)時代的企業(yè)升級之道(全3冊)
- 視窗軟件設(shè)計和開發(fā)自動化:可視化D++語言