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#反射代码的更多相关文章

  1. C#高级编程 反射 代码示例

    反射 反射(Reflection)是.NET中的重要机制,通过反射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等. 还可以获得每 ...

  2. Java之反射代码演示说明

    还不存在的类–即我们需要使用反射来使用的类 Person类: package com.qf.demo4; public class Person { private String name; publ ...

  3. 使用spring提供的ReflectionUtils简化项目中反射代码的复杂性

    在项目中有时候我们会使用到反射的功能,如果使用最原始的方法来开发反射的功能的话肯能会比较复杂,需要处理一大堆异常以及访问权限等问题.spring中提供了ReflectionUtils 这个反射的工具类 ...

  4. C#-逆变 协变 反射 代码

    首先看一段测试代码,自己写的 class Program { static void Main(string[] args) { man OneMan = new man(); var d = One ...

  5. 利用注解进行sql反射代码示例

    @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface Table { String val ...

  6. 编写高质量代码改善C#程序的157个建议——建议15: 使用dynamic来简化反射实现

    建议15: 使用dynamic来简化反射实现 dynamic是Framework 4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译器默认dy ...

  7. 编写高质量代码:改善Java程序的建议

    建议的采用顺序是List<T>.List<?>.List<Object> List<T>.List<?>.List<Object> ...

  8. ClownFish:比手写代码还快的通用数据访问层

    http://www.cnblogs.com/fish-li/archive/2012/07/17/ClownFish.html 阅读目录 开始 ClownFish是什么? 比手写代码还快的执行速度 ...

  9. java中复制对象通过反射或序列化

    在使用缓存读取数据后修改发现缓存被修改.于是找了下复制对象的方法. 关于对象克隆 按我的理解,对象是包含引用+数据.通常变量复制都是将引用传递过去.比如: Person p1 = new Person ...

随机推荐

  1. Git 的使用感受

    Git 的使用感受 从开始工作到现在,在公司里面一直用 svn 来做版本管理.大约半年前听说了 Git,因为 Git 的光辉相当耀眼,作者是 Linus Torvalds,被大量的开源软件采用,如 j ...

  2. 【C语言】09-字符串

    一.字符串简介 * 在Java中,一个字符串可以用String类型来存储 String s = "MJ"; C语言中没有String这种类型.其实字符串就是字符序列,由多个字符组成 ...

  3. python中的list的方法

    list1=[1,3,5,"a"]print(dir(list1)) """ ['__add__', '__class__', '__contains ...

  4. Windows下PHPUnit安装

    收藏的介绍地址 1.手动方式安装示例:http://blog.sina.com.cn/s/blog_5d3dc0110100ghlo.html2.通过Pear安装示例:blog.sina.com.cn ...

  5. js - 犀牛学习

    1.id选择器 var ul = document.getElementById("empty"); 2.属性和事件配置 li.className = "ditem&qu ...

  6. 针对css3特性浏览器兼容 封装less

    //--------------------------------------------------- // LESS Prefixer //--------------------------- ...

  7. 【收集】JAVA多文件 上传文件接口代码 -兼容app

    原文:http://www.verydemo.com/demo_c143_i23854.html 我们在 multifile 中可以很容易的发现如何使用,这里就简单说说了,首先在页面上我们需要有这样几 ...

  8. 使用HIBERNATE的SQL查询并将结果集自动转换成POJO

    在某些场合下,我们可能想使用HIBERNATE的框架提供的SQL查询接口,但是,由于实体没有做映射,HIBERNATE不能把结果集转换成你想要的List<POJO>,本文讨论如何在这种情况 ...

  9. jquery格式化时间戳 2011-01-01

    /*                * 时间戳转换日期                * @param  <int>  unixTime    待时间戳(秒)               ...

  10. Yii源码阅读笔记(十)

    控制器类,所有控制器的基类,用于调用模型和布局,输出到视图 namespace yii\base; use Yii; /** * Controller is the base class for cl ...