在Delphi中,通过名称实例化一个类需要使用反射。以下是一个简单的示例,展示了如何使用反射实例化一个类:
TValue.From
方法实例化一个类。uses
System.Rtti;
type
TMyClass = class
public
procedure HelloWorld;
end;
procedure TMyClass.HelloWorld;
begin
WriteLn('Hello, World!');
end;
var
MyClassInstance: TMyClass;
Context: TRttiContext;
MyClassType: TRttiInstanceType;
MyClassMethod: TRttiMethod;
begin
MyClassType := Context.GetType(TMyClass) as TRttiInstanceType;
MyClassInstance := MyClassType.GetMethod('Create').Invoke(MyClassType.AsInstance.MetaclassType, []).AsObject as TMyClass;
MyClassMethod := Context.GetType(TMyClass).GetMethod('HelloWorld');
MyClassMethod.Invoke(MyClassInstance, []);
end.
在这个示例中,我们首先获取了TMyClass
的TRttiInstanceType
,然后使用GetMethod
方法获取Create
方法并调用它来创建一个TMyClass
实例。接下来,我们使用GetMethod
方法获取HelloWorld
方法并调用它。
请注意,这个示例仅适用于具有无参数构造函数的类。如果你需要使用带参数的构造函数,你需要修改代码以传递适当的参数。
领取专属 10元无门槛券
手把手带您无忧上云