初探反射(二)之晚期绑定动态调用实体方法
2010-11-27 15:20
204 查看
前面讲过程序集里面主要包含有CIL代码,元数据,程序集清单。程序集清单是做什么用的呢?它将指出如要正确运行这个程序集需要引用的外部程序集(Dll)等,这就是程序清单的作用。那么什么是晚期绑定呢
首先看看如下代码:
代码
还是之前的那个实体类 我给它加了一个sneds()的方法 这个方法有2个参数;
那我们看看是怎样来调用这个实体类中的方法的。
代码如下:
这里我们使用到了一个assembly类 这个类可以用来加载一个程序集 这里我们加载的是Model这个私有程序集,如果要加在GAC中的公有程序集 还需要加上 程序集的版本号,公钥,和文化信息这里我们是加载的私有程序集所以直接就是程序集的友好名称,注意这里我们引用了Io 因为如果读不到Dll我们需要捕获异常,如果创建成功 我们就获得Model里面的jobs 这个类 然后我们使用了Activator类 用它的CreateInstance()方法来创建了一个Jobs的实例 使用Getmethot()的方法来获得jobs的方法使用Invoke 来调用方法 方法的第一个参数是 实例 第二个参数是 实例方法的输入参数使用的object数组 如果方法没有参数则写null 然后让我们来运行一下这个程序
没错这个方法被我们调用了 但是注意我们没有在引用里面添加Model这个程序集,所以在程序编译完成后程序集清单里面也没有model这个程序集,只有在程序运行的时候才加载了这个程序集然后调用的方法。最后要注意Model.DLL这个文件要放到bin目录下 因为.NET 寻找程序集是一种所谓探测技术,这不是我们说的重点。呵呵 今天就说到这里吧。
转载请注明文章出处:www.cnblogs.com/xylasp
首先看看如下代码:
代码
namespace Model { [Serializable] public class Jobs { //自动生成字段 private string job_desc; private short job_id; private byte max_lvl; private byte min_lvl; //自动生成默认无参构造函数 public Jobs() { } //自动生成全参参构造函数 public Jobs(string job_desc, short job_id, byte max_lvl, byte min_lvl) { this.job_desc = job_desc; this.job_id = job_id; this.max_lvl = max_lvl; this.min_lvl = min_lvl; } //自动生成属性 public string Job_desc { get { return job_desc;} set { job_desc = value;} } public short Job_id { get { return job_id;} set { job_id = value;} } public byte Max_lvl { get { return max_lvl;} set { max_lvl = value;} } public byte Min_lvl { get { return min_lvl;} set { min_lvl = value;} } public void Sends(string a, string b) { Console.WriteLine("你说是{0}呢还是{1}", a, b); } } }
还是之前的那个实体类 我给它加了一个sneds()的方法 这个方法有2个参数;
那我们看看是怎样来调用这个实体类中的方法的。
代码如下:
static void Main(string[] args) { Assembly asm = null; try { asm = Assembly.Load("Model"); } catch(FileLoadException e) { Console.WriteLine(e.Message); } Type t = asm.GetType("Model.Jobs"); object o = Activator.CreateInstance(t); object[] ol = new object[2]; ol[0]="出去玩"; ol[1]="回家!"; MethodInfo mi = t.GetMethod("Sends"); mi.Invoke(o, ol); }
这里我们使用到了一个assembly类 这个类可以用来加载一个程序集 这里我们加载的是Model这个私有程序集,如果要加在GAC中的公有程序集 还需要加上 程序集的版本号,公钥,和文化信息这里我们是加载的私有程序集所以直接就是程序集的友好名称,注意这里我们引用了Io 因为如果读不到Dll我们需要捕获异常,如果创建成功 我们就获得Model里面的jobs 这个类 然后我们使用了Activator类 用它的CreateInstance()方法来创建了一个Jobs的实例 使用Getmethot()的方法来获得jobs的方法使用Invoke 来调用方法 方法的第一个参数是 实例 第二个参数是 实例方法的输入参数使用的object数组 如果方法没有参数则写null 然后让我们来运行一下这个程序
没错这个方法被我们调用了 但是注意我们没有在引用里面添加Model这个程序集,所以在程序编译完成后程序集清单里面也没有model这个程序集,只有在程序运行的时候才加载了这个程序集然后调用的方法。最后要注意Model.DLL这个文件要放到bin目录下 因为.NET 寻找程序集是一种所谓探测技术,这不是我们说的重点。呵呵 今天就说到这里吧。
转载请注明文章出处:www.cnblogs.com/xylasp
相关文章推荐
- 一个在java运行时利用反射动态调用方法的例子
- Atitit.通过null 参数 反射 动态反推方法调用
- 利用反射来动态创建实例和调用方法
- 使用反射-动态创建对象及调用对象方法
- Object-C基础(10)——异常处理、反射、动态调用方法与内存回收
- OC反射机制-动态调用方法
- Java 反射机制运用实例(动态调用类的方法)
- C#反射动态调用窗体,动态实例化窗体的方法
- Atitit.通过null 参数 反射 动态反推方法调用
- java基础入门-动态绑定-调用方法的过程
- 利用反射来动态创建实例和调用方法
- C# 关于反射类[System.Reflection] 根据类名 动态调用 类方法
- 构造方法的调用顺序和成员变量的初始化时机以及动态绑定
- Atitit.通过null 参数 反射 动态反推方法调用
- java基础入门-动态绑定-调用方法的过程
- C#反射动态调用dll中的方法,并返回结果
- 反射动态调用方法
- 利用反射——动态调用类中的方法
- 用反射方法使用户控件动态调用父页面的方法
- 利用反射机制动态调用方法