电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

学习反射中的动态创建对象


发布日期:2021/10/15
 

Assembly的CreateInstance有三个重载第一个参数需要是一个字符串表示的完整的类名第二个参数是一个bool类型如果为true表示对第一个参数不区分大小写

第三个 影响执行搜索的方式的位屏蔽此值是 SystemReflectionBindingFlags 中的位标志的组合

// binder: 一个启用绑定参数类型强制成员调用以及通过反射进行 MemberInfo 对象检索的对象

如果 binder 为 null则使用默认联编程序

// args:Object 类型的数组包含要传递给构造函数的参数此参数数组在数量顺序和类型方面必须

与要调用的构造函数的参数匹配如果需要默认的构造函数则 args 必须是空数组或 null

// culture: 用于控制类型强制的 CultureInfo 的实例如果这是 null则使用当前线程的 CultureInfo(例如这对于将表示 的 String 转换为

Double 值是必需的因为不同的区域性以不同的方式表示

// activationAttributes: 包含一个或多个可以参与激活的属性的数组通常为包含单个 SystemRuntimeRemotingActivationUrlAttribute 对象的数组

SystemRuntimeRemotingActivationUrlAttribute 指定激活远程对象所需的 URL有关客户端激活的对象的详细说明请参见客户端激活

Activator类的静态方法CreateInstance

CreateInstance的第一个参数说明是程序集的名称为null时表示当前程序集第二个参数说明要创建的类型名称ActivatorCreateInstance返回的是一个ObjectHandle对象必须进行一次Unwrap()才能返回Object类型进而可以强制转换成我们需要的类型(本例中是MathClass)ObjectHandle包含在SystemRuntimeRemoting命名空间中可见它是Remoting相关的实际上ObjectHandle类只是一个对原类型进行了一个包装以便进行封送

无参构造

有参构造

动态调用

使用InvokeMember调用方法

InvokeMember(方法名 BindingFlagsInvokeMethod null对象实例方法参数);

静态InvokeMember(方法名 BindingFlagsInvokeMethod null类型Type方法参数);

MethodInfoInvoke调用方法

MethodInfo mi = tGetMethod(方法名 BindingFlagsInstance | BindingFlagsPublic);

miInvoke(对象实例 null);

静态

MethodInfo mi = tGetMethod(方法名 BindingFlagsStatic | BindingFlagsPublic);

MiInvoke(null 方法参数 );

用反射可以达到最大程度上的多态

上一篇:用VC 6.0实现串行通信的三种方法

下一篇:何时使用DataGrid、DataList 或Repeater