C#反射代码
Object model=Assembly.Load(“程序集”).CreateInstance(命名空间.类名);
object obj2 = Type.GetType("MyClass").GetMethod("Add").Invoke(obj,null);
obj2是返回值
Activator.CreateInstance会调用dll中类的构造函数,如果你的类里面没有提供无参的构造函数
Assembly _Assembly = Assembly.Load("程序集名");
Type _Type = _Assembly.GetType("完整类名");
Form _Form = (Form)Activator.CreateInstance(_Type);
System.Reflection.EventInfo _EventInfo = _Type.GetEvent("RemoveFormHandler");
_EventInfo.AddEventHandler(_Form, new Com.Psi.UIBase.RemoveFormDelegate(RemoveForm));
System.Reflection.FieldInfo _FieldInfoSys = _Type.GetField("m_SysDataSet");
_FieldInfoSys.SetValue(_Form, this.m_TableDataSet);
_Form.Show()
//创建对象
////Assembly assembly = Assembly.LoadFile();
//Assembly assembly = Assembly.Load("Test2");
//Object obj1 = assembly.CreateInstance("Test2.Reflect.Operate",
false);//assembly.CreateInstance内部调用Activator.CreateInstance
//Object obj2 = assembly.CreateInstance("Test2.Reflect.Operate", false,
BindingFlags.Default, Type.DefaultBinder, new Object[] { "123" },
System.Globalization.CultureInfo.CurrentCulture, new Object[] { });
//Object obj3 = Activator.CreateInstance(Type.GetType("Test2.Reflect.Operate"));
//Object obj4 = Activator.CreateInstance(Type.GetType("Test2.Reflect.Operate"),"456");
//Type type = Type.GetType("Test2.Reflect.Operate");
////每次调用InvokeMemeber方法时,它必须先绑定到一个特定的成员,然后才能调用它。
////如果每次调用一个成员时都让绑定器选择适当的成员,那么将是非常耗时的。。建议用:一次绑定,多次调用
//Object obj5 = type.InvokeMember("Operate", BindingFlags.CreateInstance, null, null, new Object[] { "789" });
//Assembly assembly = Assembly.Load("Test2");
//Type t = assembly.GetType("Test2.Reflect.Operate");
//ConstructorInfo constructorInfo = t.GetConstructor(new Type[] { typeof(string) });
//Object obj6 = constructorInfo.Invoke(new Object[] { "kkkkkkkk" });
//AppDomain appDomain = AppDomain.CurrentDomain; //内部也是调用的Activator.CreateInstance
//ObjectHandle objHandle = appDomain.CreateInstance("Test2", "Test2.Reflect.Operate");
//Object obj7 = objHandle.Unwrap();
//除了数组和委托之外,其他都可以利用上述通过反射创建对象
//访问变量
//Assembly assembly = Assembly.Load("Test2");
//Object obj1 = assembly.CreateInstance("Test2.Reflect.Operate", false);
//Type type = Type.GetType("Test2.Reflect.Operate");
//FieldInfo fieldInfo = type.GetField("_Address"); //获取私有字段
("_Address",BindingFlags.NoPublic|bindingFlags.instance)
//Object ret= fieldInfo.GetValue(obj1);
//私有静态字段,BindingFlags的次序必须一致。FieldInfo fieldInfo = type.GetField("_instance", BindingFlags.Static | BindingFlags.NonPublic);
//属性
//Assembly assembly = Assembly.Load("Test2");
//Object obj1 = assembly.CreateInstance("Test2.Reflect.Operate", false);
//Type type = Type.GetType("Test2.Reflect.Operate");
//PropertyInfo propertyInfo = type.GetProperty("Val");
//propertyInfo.SetValue(obj1, 1, null); //为属性赋值
//Object ret = propertyInfo.GetValue(obj1, null);//获取属性的值
//索引器
//Assembly assembly = Assembly.Load("Test2");
//Object obj1 = assembly.CreateInstance("Test2.Reflect.Operate", false);
//Type type = Type.GetType("Test2.Reflect.Operate");
//PropertyInfo propertyInfo = type.GetProperty("Item");
//Object ret = propertyInfo.GetValue(obj1,new Object[]{2}); //获取索引器的值
//propertyInfo.SetValue(obj1, 1,new Object[]{6}); //为索引器赋值
//ret = propertyInfo.GetValue(obj1, new Object[] { 6 }); //获取索引器的值
//访问静态方法
//Assembly assembly = Assembly.Load("Test2");
//Type t = assembly.GetType("Test2.Reflect.Operate");
//MethodInfo met = t.GetMethod("ExcStaticMethod", new Type[] { typeof(string) });
//Object ret = met.Invoke(null, new Object[] { "参数" });
//Type t = Type.GetType("Test2.Reflect.Operate");//如果在同一个项目中或已经添加引用
//MethodInfo met = t.GetMethod("ExcStaticMethod", new Type[] { typeof(string) });
//Object ret = met.Invoke(null, new Object[] { "传递的参数" });
//访问方法
//Assembly assembly = Assembly.Load("Test2");
//Object obj1 = assembly.CreateInstance("Test2.Reflect.Operate", false);
//Type t = assembly.GetType("Test2.Reflect.Operate");
//MethodInfo met = t.GetMethod("ExcMethod", new Type[] {typeof(string) });
//Object ret = met.Invoke(obj1, new Object[] {"参数" });
//事件
//Assembly assemblytemp = Assembly.Load("Test2");
//Object objtemp = assemblytemp.CreateInstance("Test2.Reflect.Operate", false);
//Type te = Type.GetType("Test2.Reflect.Operate");
//EventInfo evnetInfo = te.GetEvent("hander");
////EventHandler eh = new EventHandler(delegate(Object obj,EventArgs e) { Console.WriteLine("LLLLLLL"); });
//EventHandler eh = new EventHandler(delegate { Console.WriteLine("LLLLLLL"); });
//evnetInfo.AddEventHandler(objtemp, eh);
//MethodInfo met = te.GetMethod("ExcEvent", new Type[] { });
//Object ret = met.Invoke(objtemp, new Object[] { });

C#反射代码的更多相关文章
- C#高级编程 反射 代码示例
反射 反射(Reflection)是.NET中的重要机制,通过反射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等. 还可以获得每 ...
- Java之反射代码演示说明
还不存在的类–即我们需要使用反射来使用的类 Person类: package com.qf.demo4; public class Person { private String name; publ ...
- 使用spring提供的ReflectionUtils简化项目中反射代码的复杂性
在项目中有时候我们会使用到反射的功能,如果使用最原始的方法来开发反射的功能的话肯能会比较复杂,需要处理一大堆异常以及访问权限等问题.spring中提供了ReflectionUtils 这个反射的工具类 ...
- C#-逆变 协变 反射 代码
首先看一段测试代码,自己写的 class Program { static void Main(string[] args) { man OneMan = new man(); var d = One ...
- 利用注解进行sql反射代码示例
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface Table { String val ...
- 编写高质量代码改善C#程序的157个建议——建议15: 使用dynamic来简化反射实现
建议15: 使用dynamic来简化反射实现 dynamic是Framework 4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译器默认dy ...
- 编写高质量代码:改善Java程序的建议
建议的采用顺序是List<T>.List<?>.List<Object> List<T>.List<?>.List<Object> ...
- ClownFish:比手写代码还快的通用数据访问层
http://www.cnblogs.com/fish-li/archive/2012/07/17/ClownFish.html 阅读目录 开始 ClownFish是什么? 比手写代码还快的执行速度 ...
- java中复制对象通过反射或序列化
在使用缓存读取数据后修改发现缓存被修改.于是找了下复制对象的方法. 关于对象克隆 按我的理解,对象是包含引用+数据.通常变量复制都是将引用传递过去.比如: Person p1 = new Person ...
随机推荐
- .NET生成静态页面的方案总结
转载自:http://www.cnblogs.com/cuihongyu3503319/archive/2012/12/06/2804233.html 方法一:在服务器上指定aspx网页,生成html ...
- 网站建设中HTTP状态码的奥秘
在网络营销中,站长经常会遇到一些HTTP状态码的问题,不懂HTTP状态码那么做SEO优化就无从谈起,下面是脉凌网络对HTTP状态码总结的一览表. 1xx:请求收到,继续处理 2xx:操作成功收到,分析 ...
- tableviewcell的这贴状态和传值总结
01 控制器 1.1 定义一个可变数组存放数据,再定义一个可变数组来记录分组的折叠状态 @property(nonatomic)NSMutableArray *dataArr; //记录所有分组的折 ...
- [转]禁用和启用链接(a元素|LinkButton)的js方法
本文转自:http://www.cnblogs.com/beiguren/archive/2010/05/24/1742926.html 在Asp.net中,有时候需要禁用掉一个a链接元素. 在服务器 ...
- 【转】移动Web单页应用开发实践——页面结构化
1. 前言 在开发面向现代智能手机的移动Web应用的时候,无法避免一个事实,就是需要开发单页应用(Single Page WebApp).对于不同的系统需求,单页应用的粒度会不同,可能是整个系统都使用 ...
- js获取时间(本周、本季度、本月..)
/** * 获取本周.本季度.本月.上月的开端日期.停止日期 */ var now = new Date(); //当前日期 var nowDayOfWeek = now.getDay(); //今天 ...
- ThinkPHP验证码刷新随机数
貌似因为IE的内核不支持重复,,所以要加个随机数..在代码中,,发现火狐的也不行..加了随机数后就可以了 <label class="img"><img id=& ...
- ICON文件保存
这两天想做一下windows系统下图标的修改,让程序有更新的时候能够更新图标的外观,达到提醒的作用,360,QQ经常采用这种方式进行更新的提示,也有采用弹框的方式来提示,用新版QVOD的同事可能见到过 ...
- 页面静态化3 --- (伪静态+ob缓存)实现优化
要求:使用伪静态完成简单的新闻查询! 伪静态是站在SEO的角度来看的,他对应的页面不是真正存在的(而真静态的页面是事先生成的),而是每次查询数据库得到的信息!
- ORACLE的安装与网页版创建表空间的简单操作以及PLsql的简单操作
1.oracle的安装: 安装简单易学,在这里不做解释.下载看装包后耐心等待,注意安装目录不要有中文字符,尽量按照指定目录进行安装.安装完成后会占用有大约5g的内存. 如果要卸载oracle,需要用其 ...