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 ...
随机推荐
- SQL Server 中 with tmp 临时表的用法
SQL Server 中 with tmp 临时表的用法 ----------with临时表用法,有时候采用临时表比采用in的效率更高,避免了全表扫描. 实例中实现了查询普通题.大题.子题目的sql ...
- iOS开发中代理使用出现的问题解决
在给自定义的LHQTabBar设置代理的时候,定义的代理的属性的时候此时会报一个警告 我们需要遵守UITabBarDelegate的协议才行, 不过此时还有警告,警告已经变成了 此时我们需要在.m文件 ...
- Solve Error Debug Assertion Failed Expression vector iterators incompatible Using PCL in Release Mode of VS2010
When using PCL 1.4.0 in the release mode building under VS2010, we might sometime get the error &quo ...
- CSS3 Media Queries在iPhone4和iPad上的运用
CSS3 Media Queries的介绍在W3CPlus上的介绍已有好几篇文章了,但自己碰到的问题与解决的文章还是相对的较少.前几天在<修复iPhone上submit按钮bug>上介绍了 ...
- pdf转能编辑的word的方法
方法一:用汉王ocr文字识别软件,扫描文字,一页一页扫描,复制粘贴 方法二:将pdf文件拷贝到没有pdf阅读器的电脑上,同时你的office是2013,用word打开你的pdf文档,根据他的提示操作, ...
- replication set复制集
replication set复制集 介绍 replicattion set 多台服务器维护相同的数据副本,提高服务器的可用性,总结下来有以下好处: 数据备份与恢复 读写分离 MongoDB 复制集 ...
- NBOJv2 1034 Salary Inequity(DFS序+线段树区间更新区间(最值)查询)
Problem 1034: Salary Inequity Time Limits: 10000 MS Memory Limits: 200000 KB 64-bit interger IO ...
- mapreduce运用
测试环境:192.168.1.55 mongo 192.168.1.55:30001show dbsuse gwgps 测试目标,求出两个班的总数,人数,平均分数等.可以根据不同的业务需求,定制map ...
- Apache Storm技术实战之2 -- BasicDRPCTopology
欢迎转载,转载请注明出处,徽沪一郎. 本文通过BasicDRPCTopology的实例来分析DRPCTopology在提交的时候, Topology中究竟含有哪些内容? BasicDRPCTopolo ...
- 免费手机号码归属地API查询接口和PHP使用实例分享
免费手机号码归属地API查询接口和PHP使用实例分享 最近在做全国性的行业分类信息网站,需要用到手机号归属地显示功能,于是就穿梭于各大权威站点之间偷来了API的接口地址. 分享出来,大家可以用到就拿去 ...