先来一段有用的反射代码

namespace Calculator 
{ 
    public interface Iwel 
    { 
        String Print(); 
    } 
}  
  
namespace Calculator 
{ 
    public class Arithmetic:Iwel 
    { 
        /// <summary> 
        /// 没有带参数的构造函数 
    /// </summary> 
        public Arithmetic() 
        {} 
        public Arithmetic(int num1, int num2) 
        { 
            _num1 = num1; 
            _num2 = num2; 
        } 
        private int _num1; 
  
        public int Num1 
        { 
            get { return _num1; } 
            set { _num1 = value; } 
        } 
        private int _num2; 
  
        public int Num2 
        { 
            get { return _num2; } 
            set { _num2 = value; } 
        } 
        public String Add(int num1, int num2) 
        { 
            Console.WriteLine("{0}+{1}={2}", num1, num2, num1 + num2); 
            return "Add(int num1,int num2)方法是一个公有的带参数的方法"; 
        } 
        private string Add() 
        { 
            return "Add()方法是一个私有的不传参数的方法"; 
        } 
        private void Subtration(int num1, int num2) 
        { 
            Console.WriteLine("{0}-{1}={2}+Subtration(int num1,int num2)" + "方法是一个私有的带有参数的方法 ",num1,num2,num1-num2); 
        } 
        public static void Multiplication(int num1, int num2) 
        { 
            Console.WriteLine("{0}*{1}={2} Multiplication(int num1,int num2)"+"是一个公有的带参数的静态方法",num1,num2,num1+num2); 
        } 
        private static void Multiplication() 
        { 
            Console.WriteLine("Multiplication()是一个公有的带参数的静态方法"); 
  
        } 
        public String Writ() 
        { 
            return "Writ() 是一个公有的不带参数的方法"; 
        } 
        #region Iwel 成员 
  
        public string Print() 
        { 
            return "欢迎您使用接口!"; 
        } 
  
        #endregion 
  
           
    } 
} 
  
  
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Reflection; 
  
  
namespace BassLib 
{ 
    class Program 
    { 
          
         delegate void TestDelegate(int num1, int num2); 
         static void Main(string[] args) 
         { 
             Assembly assembly = Assembly.Load("Calculator");//加载程序集 
             Console.WriteLine("得到Calculator.dll中的所有类"); 
             Console.WriteLine("***********************************"); 
             foreach (Type myType in assembly.GetTypes()) 
             { 
                 //得到Calculator.dll中所有的类 
                 Console.WriteLine(myType.Name + "是Calculator命中空间下的类"); 
             } 
             Console.WriteLine(" +++++++++++++++++++++++++++++++++++++"); 
             Console.WriteLine("得到Calculator.dll中的模块集"); 
             Module[] modules = assembly.GetModules();//得到Calculator.dll中的模块集合 
             foreach (Module module in modules) 
             { 
                 Console.WriteLine(module.Name + "是Calculator中的一个模块 "); 
             } 
             Console.WriteLine("*********************************************"); 
             Console.WriteLine(""); 
  
             Type type = typeof(Calculator.Arithmetic);//得到具体的类型 
             Console.WriteLine("具体的类型是" + type.Name); 
             Console.WriteLine(" {0}是不是public类型:{1}", type, type.IsPublic); 
             Console.WriteLine("{0}是不是private类型:{1}", type, type.IsNotPublic); 
  
             Console.WriteLine("*********************************************"); 
             Console.WriteLine(""); 
             PropertyInfo[] memberInfo = type.GetProperties();//得到类中的属性 
             foreach (PropertyInfo var in memberInfo) 
             { 
                 Console.WriteLine(type + "类的属性有" + var.Name); 
             } 
             Console.WriteLine("**********************************************"); 
             Console.WriteLine(""); 
  
             Type[] t = type.GetInterfaces();//得到接口 
             foreach (Type var in t) 
             { 
                 Console.WriteLine(var.Name + "是Calculator.dll中的接口"); 
             } 
             Console.WriteLine("*****************************************"); 
             Console.WriteLine(""); 
  
             Console.WriteLine("方法的返回类型,方法传参的类型"); 
             //查找私有的方法 
             MethodInfo[] method = type.GetMethods(BindingFlags.Instance | BindingFlags.NonPublic); 
             foreach (MemberInfo var in method) 
             { 
                 Console.WriteLine("私有方法: 方法名 ={0} 方法的信息={1}", var.Name, var); 
             } 
             //查找公有方法 
             MethodInfo[] methodpublic = type.GetMethods(BindingFlags.Instance | BindingFlags.Public); 
             foreach (MethodInfo var in methodpublic) 
             { 
                 Console.WriteLine("公有方法:方法名={0} 方法的信息={1}", var.Name, var); 
             } 
             //查找公有的静态方法 
             MethodInfo[] mathodstatic = type.GetMethods(BindingFlags.Public | BindingFlags.Static); 
             foreach (MethodInfo var in mathodstatic) 
             { 
                 Console.WriteLine("公有静态方法: 方法名={0} 方法的信息 ={1}", var.Name, var); 
             } 
             //查找私有静态方法 
             MethodInfo[] methodprivartstatic = type.GetMethods(BindingFlags.NonPublic | BindingFlags.Static); 
             foreach (MethodInfo var in methodprivartstatic) 
             { 
                 Console.WriteLine("私有静态方法: 方法名={0} 方法的信息={1}", var.Name, var); 
             } 
             Console.WriteLine("+++++++++++++++++++++++++++++++++++++++++++++++"); 
             Console.WriteLine("这是一个构造方法的形式 "); 
  
             ConstructorInfo[] con = type.GetConstructors();//获得构造函数的形式 
             foreach (ConstructorInfo var in con) 
             { 
                 Console.WriteLine(var); 
             } 
             Console.WriteLine("_________________________________"); 
             object obj = Activator.CreateInstance(type, null);//创建了一个不带参数的实例 
             //公有非静态带参数和返回参数的方法的调用它 
             MethodInfo men1 = type.GetMethod("Add"); 
             Console.WriteLine("调用{0}方法 ", men1); 
             object[] nums1 = { 5, 4 };//参数 
             Console.WriteLine(men1.Invoke(obj, nums1)); 
  
             Console.WriteLine("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"); 
             //私有的非静态方法的调用 
             MethodInfo men2 = type.GetMethod("Add", BindingFlags.Instance | BindingFlags.NonPublic); 
             Console.WriteLine(men2.Invoke(obj, null)); 
             Console.WriteLine("**********************************"); 
             //公有的静态带参数的方法的调用 
             MethodInfo men3 = type.GetMethod("Multiplication", BindingFlags.Public | BindingFlags.Static); 
             object[] nums2 = { 5, 6 }; 
             men3.Invoke(null, nums2); 
             Console.WriteLine("*****************"); 
             //私有的静态的 
             MethodInfo men4 = type.GetMethod("Multiplication", BindingFlags.NonPublic | BindingFlags.Static); 
             men4.Invoke(null, null); 
             Console.WriteLine("************************"); 
             //动态创建一个委托 
             Console.WriteLine("动态创建委托"); 
             TestDelegate dele = (TestDelegate)Delegate.CreateDelegate(typeof(TestDelegate), obj, "Subtration"); 
             dele(9, 3); 
         } 
    } 
} 
View Code

相关文章:

  • 2019-10-07
  • 2021-09-03
  • 2021-07-30
  • 2021-07-13
  • 2021-12-20
  • 2021-11-15
  • 2021-09-18
猜你喜欢
  • 2021-06-11
  • 2021-06-01
  • 2021-05-19
  • 2021-10-28
  • 2022-01-04
  • 2021-09-07
  • 2021-09-28
相关资源
相似解决方案