代码演示 .NET 中普通方法的调用、反射调用、动态(Dynamic)调用的区别
2011-12-10 22:11
525 查看
说明都在代码的注释当中!
运行结果截图:
谢谢浏览!
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(); } } }
运行结果截图:
谢谢浏览!
相关文章推荐
- poi 遍历excel行列 读写文件 反射(动态调用方法) 下载 (测试代码)
- 利用.net反射动态调用指定程序集的中的方法
- 利用.net反射动态调用指定程序集的中的方法
- 利用.net反射动态调用指定程序集的中的方法
- 利用.net反射动态调用指定程序集的中的方法
- struts2-通配符和动态方法调用(代码演示)
- Java 动态的创建注入代码,注入方法给类或者接口并通过反射调用
- struts2-通配符和动态方法调用(代码演示)
- 利用.net反射动态调用指定程序集的中的方法
- .net 反射,通过自定义Attribute动态调用类方法
- 利用.net反射动态调用指定程序集的中的方法
- 利用反射来动态创建实例和调用方法(上)
- 3.22 学数据库 反射调用方法 动态导入模块 数据库操作准则
- 使用反射、泛型和委托,动态调用对象的属性和方法——性能和灵活性兼备的方法
- Java的反射机制---动态调用对象的简单方法
- 构造方法与普通方法的区别:构造方法在定义时就执行,而普通方法下必须调用才执行
- C#反射动态调用dll中的方法,并返回结果
- 【JAVA】利用反射调用不同方法,减少重复代码
- 【.Net码农】Asp.Net异常:"由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值"的解决方法
- java 反射动态方法调用