zoukankan      html  css  js  c++  java
  • 使用C#进行Reflection编程

    using System;   
  • using System.Reflection;   
  • using System.Reflection.Emit;   
  • public class TestReflection   
  • {   
  •      private String file = @"TestReflection.exe";   
  •      static void Main(String[] args)   
  •      {   
  •           TestReflection test = new TestReflection();   
  •           test.DisplayModules();   
  •           test.DisplayTypes();   
  •           test.DisplayMethods();   
  •           test.InvokeStaticMethod();   
  •           test.InvokeMethod();   
  •      }   
  •      //显示所有模块名   
  •      public void DisplayModules()   
  •      {   
  •           Console.WriteLine("display modules ...");   
  •           Assembly assembly = Assembly.LoadFrom(file);   
  •           Module[] modules = assembly.GetModules();   
  •           foreach (Module module in modules)   
  •           {   
  •                 Console.WriteLine("module name:" + module.Name);   
  •           }   
  •      }   
  •      //显示所有类型名   
  •      public void DisplayTypes()   
  •      {   
  •           Console.WriteLine("display types ...");   
  •           Assembly assembly = Assembly.LoadFrom(file);   
  •           Type[] types = assembly.GetTypes();   
  •           foreach (Type type in types)   
  •           {   
  •                 Console.WriteLine("type name:" + type.FullName);   
  •           }   
  •      }   
  •      //先是一个类型中的所有方法名   
  •      public void DisplayMethods()   
  •      {   
  •           Console.WriteLine("display methods in TestReflection Type ...");   
  •           Assembly assembly = Assembly.LoadFrom(file);   
  •           Type type = assembly.GetType("TestReflection");   
  •           MethodInfo[] methods = type.GetMethods();   
  •           foreach (MethodInfo method in methods)   
  •           {   
  •                 Console.WriteLine("method name:" + method.Name);   
  •           }   
  •      }   
  •      //调用一个类中的静态方法   
  •      public void InvokeStaticMethod()   
  •      {   
  •           Console.WriteLine("Invoke static method ...");   
  •           Assembly assembly = Assembly.LoadFrom(file);   
  •           Type type = assembly.GetType("TestSubClass");   
  •           type.InvokeMember("SayHello", BindingFlags.InvokeMethod, nullnullnew object[] { });   
  •      }   
  •      //调用一个类中的非静态方法   
  •      public void InvokeMethod()   
  •      {   
  •           Console.WriteLine("Invoke Method ...");   
  •           Assembly assembly = Assembly.LoadFrom(file);   
  •           Type type = assembly.GetType("TestSubClass");   
  •           Object obj = Activator.CreateInstance(type);   
  •           TestClass tc = (TestClass)obj;   
  •           type.InvokeMember("Test1", BindingFlags.InvokeMethod, null, tc, new object[] { });   
  •           type.InvokeMember("Test2", BindingFlags.InvokeMethod, null, tc, new object[] { });   
  •      }   
  • }   
  • public interface TestClass   
  • {   
  •      void Test1();   
  •      void Test2();   
  • }   
  • public class TestSubClass : TestClass   
  • {   
  •      public void Test1()   
  •      {   
  •           Console.WriteLine("This is TestSubClass.Test1");   
  •      }   
  •      public void Test2()   
  •      {   
  •           Console.WriteLine("This is TestSubClass.Test2");   
  •      }   
  •      public static void SayHello()   
  •      {   
  •           Console.WriteLine("This is TestSubClass.SayHello");   
  •      }   
  • }  
查看全文
  • 相关阅读:
    乐字节Java编程语言发展,面向对象和类
    乐字节Java编程之方法、调用、重载、递归
    乐字节Java循环:循环控制和嵌套循环
    乐字节Java反射之四:反射相关操作
    乐字节Java反射之三:方法、数组、类加载器和类的生命周期
    乐字节Java反射之二:实例化对象、接口与父类、修饰符和属性
    乐字节Java反射之一:反射概念与获取反射源头class
    Java变量与数据类型之三:数据类型与转义字符
    数论 N是完全平方数 充分必要条件 N有奇数个约数
    动态规划专题 01背包问题详解 HDU 2546 饭卡
  • 原文地址:https://www.cnblogs.com/kingwangzhen/p/1791604.html
  • Copyright © 2011-2022 走看看