zoukankan      html  css  js  c++  java
  • C#中使用反射显示程序集的所有类型和属性

      /// <summary>
      ///
      /// loads a *.dll file from txtMethods and invokes all methods int it.
      /// lists all types in the assembly
      ///
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void btnList_Click(object sender, System.EventArgs e)
      {

       string fileName=labelFile.Text.Trim();
       string result="";
       txtMethods.Text="";
       txtTypes.Text="";

       if(File.Exists(fileName))
       {
        try
        {
         Assembly assembly=Assembly.LoadFrom(fileName);
         Type[] types=assembly.GetTypes();

         result="The Assembly contains the following types :"+Environment.NewLine;
        
         for(int i=0;i<types.GetLength(0);++i)
         {
          result+="\t "+i+":"+types[i].Name+" "+" "+Environment.NewLine;

          // Get the public methods.
          MethodInfo[] myArrayMethodInfo=types[i].GetMethods(BindingFlags.Public|BindingFlags.Instance|BindingFlags.DeclaredOnly);
          txtMethods.Text=txtMethods.Text+Environment.NewLine+"The number of public methods in "+types[i].Name+" is "+myArrayMethodInfo.Length+Environment.NewLine;
          // get all the methods.
          txtMethods.Text=txtMethods.Text+getMethodInfo(myArrayMethodInfo);
          /*
          // Get the nonpublic methods.
          MethodInfo[] myArrayMethodInfo1 = myType.GetMethods(BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.DeclaredOnly);
          Console.WriteLine("\nThe number of protected methods is {0}.", myArrayMethodInfo1.Length);
          // Display information for all methods.
          LabelFile.Text=DisplayMethodInfo(myArrayMethodInfo1);
          */

         }

         foreach(Type myType in types)
         {
          // Get the public properties.
          PropertyInfo[] myPropertyInfo = myType.GetProperties(BindingFlags.Public|BindingFlags.Instance);
          Console.WriteLine("The mumber of public properties in "+myType.Name+" is {0}.", myPropertyInfo.Length);
          // Display the public properties.
          getPropertyInfo(myPropertyInfo);
          // Get the nonpublic properties.
          PropertyInfo[] myPropertyInfo1 = myType.GetProperties(BindingFlags.NonPublic|BindingFlags.Instance);
          txtMethods.Text=txtMethods.Text+Environment.NewLine+("The number of NonPublic properties in "+myType.Name+" is "+ myPropertyInfo1.Length)+Environment.NewLine;
          // Display all the nonpublic properties.
          txtMethods.Text=txtMethods.Text+getPropertyInfo(myPropertyInfo1);
         }

         txtTypes.Text=result;
        }
        catch(Exception ee)
        {
         throw ee;
        }
        
       }

      }

      /// <summary>
      /// get Method informations from MethodInfo[] Array:
      /// </summary>
      /// <param name="myArrayMethodInfo"></param>
      /// <returns></returns>
      public string getMethodInfo(MethodInfo[] myArrayMethodInfo)
      {
       string methodStr="";
       ///
       ///getinformation for all methods.
       for(int i=0;i<myArrayMethodInfo.Length;i++)
       {
        MethodInfo myMethodInfo = (MethodInfo)myArrayMethodInfo[i];
        methodStr+="Method "+i+" :"+ myMethodInfo.Name+Environment.NewLine;
       }   
       return methodStr;
      }

      /// <summary>
      /// get properties information from PropertyInfo[] Array:
      /// </summary>
      /// <param name="myPropertyInfo"></param>
      /// <returns></returns>
      public string getPropertyInfo(PropertyInfo[] myPropertyInfo)
      {
       string propStr="";
       // Display information for all properties.
       for(int i=0;i<myPropertyInfo.Length;i++)
       {
        PropertyInfo myPropInfo = (PropertyInfo)myPropertyInfo[i];
        propStr+="property "+i+":"+ myPropInfo.Name+" type:"+ myPropInfo.PropertyType+Environment.NewLine;
       }
       return propStr;
      }


  • 相关阅读:
    无界鼠标 Mouse Without Borders
    dockerfile编辑时常用的sed命令,用来修改配置文件。
    LD_LIBRARY_PATH无效
    spark安装
    hadoop:/bin/bash: /bin/java: No such file or directory
    spark实现wordcount
    var和val的区别
    rdd的元素打印
    spark报错:invalid token
    上交所跨市场ETF申购赎回实时回报
  • 原文地址:https://www.cnblogs.com/oop/p/153132.html
Copyright © 2011-2022 走看看