代码演示 .NET 中普通方法的调用、反射调用、动态(Dynamic)调用的区别
2011-12-10 22:11 音乐让我说 阅读(593) 评论(0) 编辑 收藏 举报说明都在代码的注释当中!
using System; using System.Reflection; namespace WhyUseDynamicInCSharp { class Student { public void EatFood(string name) { Console.WriteLine("大家好,我是 {0},我正在吃饭!", name); } public DateTime ReadArticles(string name) { Console.WriteLine("大家好,我是 {0},我正在读文章!", name); return DateTime.Now; } } class Program { static void Main(string[] args) { CommonInvoke(); ReflectInvoke(); DynamicInvoke(); } /// <summary> /// 普通调用 /// </summary> static void CommonInvoke() { Student stu = new Student(); stu.EatFood("张三"); stu.ReadArticles("张三"); Console.WriteLine(); } /// <summary> /// 反射调用 /// </summary> static void ReflectInvoke() { Assembly currenAassembly = Assembly.GetExecutingAssembly(); // 如果在另外的程序集中,则 Assembly.Load("WhyUseDynamicInCSharp") Type studentType = currenAassembly.GetType("WhyUseDynamicInCSharp.Student"); // 注意:这里的 GetType 方法需要命名空间,如果 Student 直接属于程序集下面,就不需要 object objStudent = Activator.CreateInstance(studentType); string studentName = "李四"; string methodName = "EatFood"; MethodInfo methodInfo = studentType.GetMethod(methodName); methodInfo.Invoke(objStudent, new object[] { studentName}); // 由于这个 EatFood 方法没有返回值,所以 Invoke 返回 Null methodName = "ReadArticles"; methodInfo = studentType.GetMethod(methodName); DateTime invokeReturnTime = (DateTime) methodInfo.Invoke(objStudent, new object[] { studentName }); Console.WriteLine("反射调用完毕!返回的时间:" + invokeReturnTime); Console.WriteLine(); } /// <summary> /// 动态调用 /// </summary> static void DynamicInvoke() { Assembly currenAassembly = Assembly.GetExecutingAssembly(); // 如果在另外的程序集中,则 Assembly.Load("WhyUseDynamicInCSharp") Type studentType = currenAassembly.GetType("WhyUseDynamicInCSharp.Student"); dynamic objStudent = Activator.CreateInstance(studentType); string studentName = "王五"; objStudent.EatFood(studentName); // 将在运行时查找该对象的类型,检查该类型是否具有公共带参数的 EatFood 方法。 DateTime invokeReturnTime = objStudent.ReadArticles(studentName); // 同样也是在运行时查找 Console.WriteLine("动态调用完毕!返回的时间:" + invokeReturnTime); Console.WriteLine(); } } }
运行结果截图:
谢谢浏览!
作者:音乐让我说(音乐让我说 - 博客园)
出处:http://music.cnblogs.com/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。