C#利用反射动态编译代码,创建类的实例,并调用其成员.docx

C#利用反射动态编译代码,创建类的实例,并调用其成员.docx

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE PAGE # / 10 关键是以下内容有一些需要学习的地方。 Gen erateCode(函数动态生成编译 代码,还有动态调用类的函数名。 下面的程序在运行时生成了一个 Test.cs文件,并调用esc编译成Test.dll文 件,然后利用Type」nvokeMember ()方法调用其中的SayHello ()方法,然后 和原始方法对比一下性能。 using System; using System.Diagnostics; using System.IO; using System.Reflection; namespace InvokeMember{/// /// Class1 的摘要说明。 /// class Class1 { /// ///应用程序的主XX点。 /// [STAThread] static void Main(string[] args){// 循环次数 const int iterations = 100; // 计算所用时间 DateTime startTime = DateTime.Now; for(int i = 0;i iterations;i++) { // 对照方法 Console.WriteLine(Hello,World);}TimeSpan elasped = DateTime.Now - startTime; Console.WriteLine(LoopingElapsedmilliseconds:iterations,iterations); // 使用反射发送 ReflectionTest t = new ReflectionTest(); // 计算所用时间 startTime = DateTime.Now; for(int i = 0;i iterations;i++){t.DoOperation(); }+elasped.TotalMilliseconds+for{0}Console.WriteLine(Looping iterations,iterations); Console.ReadLine();}} /// /// Reflection 的摘要说明。 /// public class ReflectionTest{〃保存动态生成并编译的类的 type对象 Type theType = null; // 保存动态生成类的实例 object theClass = null; /// ///供Client调用的方法 /// public void DoOperatio n(){〃 未初始化 if(theType == null){// 初始化 Gen erateCode();}〃调用方法时的参数数组(此处为空) object[] arguments = new object[0]; // 调用动态生成类的方法 theType.l nvokeMember(SayHello,〃 要调用的方法名 BindingFlags.Default|BindingFlags.InvokeMethod,//Binding 标志,具体参看 msdnnull,〃使用默认Binding对象 theClass,//在theClass实例上调用此方法 argume nts〃调用方法时的参数数组 );}/// /// 运行时生成代码 /// private void Gen erateCode(){〃 文件名 Elapsedmillisec on ds: +elasped.TotalMilliseconds+for{0}〃 打开文件,如果不存在,则创建 Stream s = File.Open(fileName + .cs,FileMode.Create); // 创建一个 StreamWriter 来写入数据 StreamWriter wrtr = new StreamWriter(s); // 写入动态创建类的源代码 wrtr.WriteLine(〃 动态创建 Test 类); // 类名 string className = TestClass; wrtr.WriteLine(using System;); wrtr.WriteLine(class {0},className); wrtr.WriteLine({); wrtr.WriteLine(\tpublic void SayHello()); wrtr.WriteLine(\t{); wrtr.WriteLine(\t\tConsole.WriteLine(\Hello,World\);); wrtr.WriteLine(\t}); wrtr.WriteLine(}); // 关闭 StreamWriter 和文

文档评论(0)

shidaihuayuan + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档