posts - 7,  comments - 42,  trackbacks - 0
    每个.net程序集除了代码外都额外包含了元数据。元数据包括了程序集本身的信息,比如版本号,引用了什么程序集,所有类型的信息,包括其方法、属性、字段。使用.net反射,可以在运行时读取这些信息,并且可以动态地调用方法。
     项目快完了,终于有时间来写blog了,,
     做一个动态调用程序集指定方法的例子。
     项目1(Demo)中包含一个Test类,Test类中写了一个getList方法,这个方法返回的数据是手工加入的。源代码如下:
     
项目1

     项目2(DemoXml)中包含一个Test类,Test类中写了一个getList方法,这个方法返回的数据是从数据库读取的。源代码如下: 
项目2

     
项目3(WebDemo)中演示动态用指定程序集中getList的方法返回一个DataTable,用一个gridview显示其返回的数据。
调用演示

       通过Assembly.LoadFrom方法返回的Assembly对象,可以读取其中的元数据。其中的GetType会返回一个用于表示指定程序集的type对象(读取程序集中的所有类型用GetTypes会返回一个type对象的数组)。
       返回方法信息(公共方法)
       MethodInfo mi = T.GetMethod("getList");
       根据前面type类型创建一个对象
       object o = Activator.CreateInstance(T);
       参数
       object[] par = new object[] { "E01" };
       通过MethodInfo对象的Invoke方法,动态调用此方法,参数o是因为实例方法需要在调用时有一个实例存在.
       DataTable dt = (DataTable)mi.Invoke(o, par);
       调用返回的数据显示列表中。
示例下载

posted on 2007-01-07 22:32 NetFans 阅读(2870) 评论(12)  编辑 收藏 网摘 所属分类: Net技术

FeedBack:
2007-01-07 23:56 | 戏水[匿名]
object[] par = new object[] { "E01" };
这句中 E01 是什么意思啊?

  回复  引用    
2007-01-08 08:38 | 臭石头      
这是一个字符串 参数,实际上并没有用到。

使用Invoke调用一个对象的方法是,参数使用object[]的形式传入,注意顺序

  回复  引用  查看    
2007-01-08 08:43 | 搂着猫睡觉的老鼠[未注册用户]
to 戏水
是不是要动态调用的方法

  回复  引用    
2007-01-08 08:50 | james.dong[匿名][未注册用户]
程序要添加:
Demo.dll
DemoXml.dll
的引用吗?

  回复  引用    
2007-01-08 08:59 | 无天刀绝[未注册用户]
@james.dong[匿名]
指定了dll的路径和文件名,应该不需要引用。

  回复  引用    
2007-01-08 08:59 | NetFans[匿名]
程序要添加:
Demo.dll
DemoXml.dll
的引用吗?
-----------------------
通过程集动态加载入内存,是不需要引用的。引用的话,对灵活性就没有什么实际意义了。



  回复  引用    
2007-01-08 10:55 | Bryant      
不错,
E01好像删除也不出错
???

  回复  引用  查看    
2007-01-09 13:00 | 随心所欲      
对于重载的函数的使用,可以说的详细一点
  回复  引用  查看    
2007-01-23 13:23 | Anthan      
那怎么样通过反射获得指定程序集指定类中的复杂型控件呢,比如GridView等等...
望赐教

  回复  引用  查看    
2007-04-06 09:16 | test
我觉得object[] par = new object[] { "E01" }; 中的E01是要传帮带入方法的参数id吧
  回复  引用    
2007-04-06 13:21 | NetFans[未注册用户]
是的。
  回复  引用    
2007-06-03 17:03 | 阿达[未注册用户]
我把这个例子用winform实现了。可以传给你。
  回复  引用    



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 614364




相关文章:

相关链接:
<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678


NetFans

个人简介:本名张铃。主要从互联网/政府/电信等多个技术领域的研发工作。
QQ:254524007
E-Mail:Lzhang4@gmail.com

与我联系

搜索

 

常用链接

留言簿

随笔分类(7)

随笔档案(6)

积分与排名

  • 积分 - 10528
  • 排名 - 4535

最新评论

阅读排行榜

评论排行榜