以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 Dot NET,C#,ASP,VB 』 (http://bbs.xml.org.cn/list.asp?boardid=43) ---- 学习反射中的动态创建对象 (http://bbs.xml.org.cn/dispbbs.asp?boardid=43&rootid=&id=76598) |
-- 作者:卷积内核 -- 发布时间:9/5/2009 8:40:00 AM -- 学习反射中的动态创建对象 Assembly的CreateInstance有三个重载,第一个参数需要是一个字符串表示的完整的类名。第二个参数是一个bool类型,如果为true,表示对第一个参数不区分大小写。 第三个: 影响执行搜索的方式的位屏蔽。此值是 System.Reflection.BindingFlags 中的位标志的组合。 // binder: 一个启用绑定、参数类型强制、成员调用以及通过反射进行 MemberInfo 对象检索的对象。如果 binder 为 null,则使用默认联编程序。// args: Object 类型的数组,包含要传递给构造函数的参数。此参数数组在数量、顺序和类型方面必须与要调用的乖旌牟问ヅ洹H绻枰系墓乖旌?args 必须是空数组或 null。 // culture: 用于控制类型强制的 CultureInfo 的实例。如果这是 null,则使用当前线程的 CultureInfo。(例如,这对于将表示 1000 的 String 转换为 Double 值是必需的,因为不同的区域性以不同的方式表示 1000。 // activationAttributes: 包含一个或多个可以参与激活的属性的数组。通常为包含单个 System.Runtime.Remoting.Activation.UrlAttribute 对象的数组。 Activator类的静态方法CreateInstance。 CreateInstance的第一个参数说明是程序集的名称,为null时表示当前程序集;第二个参数说明要创建的类型名称。Activator.CreateInstance返回的是一个ObjectHandle对象,必须进行一次Unwrap()才能返回Object类型,进而可以强制转换成我们需要的类型(本例中是MathClass)。ObjectHandle包含在System.Runtime.Remoting命名空间中,可见它是Remoting相关的,实际上ObjectHandle类只是一个对原类型进行了一个包装以便进行封送。 无参构造: 有参构造: 动态调用 : .使用InvokeMember调用方法 InvokeMember("方法名", BindingFlags.InvokeMethod, null,对象实例,方法参数); 静态:InvokeMember("方法名", BindingFlags.InvokeMethod, null,'类型Type',方法参数); .MethodInfo.Invoke调用方法 mi.Invoke(对象实例, null); 静态 MethodInfo mi1 = t.GetMethod("方法名"", BindingFlags.Static | BindingFlags.Public); Mi1.Invoke(null, 方法参数 ); 用反射可以达到最大程度上的多态
|
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
31.250ms |