解读.Net基础:学习反射中的动态创建对象_.Net教程
推荐:谈如何使用 Lambda 表达式做抽象代表Lambda表达比代表定义和带外方法定义的结合更清楚,且相关的额外工作只需要满足语言定义即可。不过,它也有一些不足之处。如果某个方法的参数包含System.Delegate 这样的抽象类型,用lambda表达式介绍特殊的问题:C#编译器不能将lambda表达式转换成还未明确
Assembly的CreateInstance有三个重载。
第一个参数需要是一个字符串表示的完整的类名。
第二个参数是一个bool类型,如果为true,表示对第一个参数不区分大小写。
第三个影响执行搜索的方式的位屏蔽。此值是 System.Reflection.BindingFlags 中的位标志的组合。
// binder: 一个启用绑定、参数类型强制、成员调用以及通过反射进行 MemberInfo 对象检索的对象。如果 binder 为 null,则使用默认联编程序。// args: Object 类型的数组,包含要传递给构造函数的参数。此参数数组在数量、顺序和类型方面必须与要调用的构造函数的参数匹配。如果需要默认的构造函数,则 args 必须是空数组或 null。
// culture: 用于控制类型强制的 CultureInfo 的实例。如果这是 null,则使用当前线程的 CultureInfo。(例如,这对于将表示 1000 的 String 转换为
Double 值是必需的,因为不同的区域性以不同的方式表示 1000。
// activationAttributes: 包含一个或多个可以参与激活的属性的数组。通常为包含单个 System.Runtime.Remoting.Activation.UrlAttribute 对象的数组。
System.Runtime.Remoting.Activation.UrlAttribute 指定激活远程对象所需的 URL。有关客户端激活的对象的详细说明,请参见客户端激活。
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调用方法
MethodInfo mi = t.GetMethod("方法名"", BindingFlags.Instance | BindingFlags.Public);
mi.Invoke(对象实例, null);
静态
MethodInfo mi1 = t.GetMethod("方法名"", BindingFlags.Static | BindingFlags.Public);
Mi1.Invoke(null, 方法参数 );
用反射可以达到最大程度上的多态
分享:浅析C# 2010命名和可选参数的新特性1.命名参数允许调用者通过提供参数的名称来为其赋值,这样参数的位置就不在重要了。可选参数允许在定义时为某些参数赋值,在调用时可以忽略这些
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP发送Email实例(可带附件)
- js实现广告漂浮效果的小例子
- asp.net Repeater 数据绑定的具体实现
- Asp.Net 无刷新文件上传并显示进度条的实现方法及思路
- Asp.net获取客户端IP常见代码存在的伪造IP问题探讨
- VS2010 水晶报表的使用方法
- ASP.NET中操作SQL数据库(连接字符串的配置及获取)
- asp.net页面传值测试实例代码
- DataGridView - DataGridViewCheckBoxCell的使用介绍
- asp.net中javascript的引用(直接引入和间接引入)
- 三层+存储过程实现分页示例代码
- 相关链接:
- 教程说明:
.Net教程-解读.Net基础:学习反射中的动态创建对象。