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;
      }


  • 相关阅读:
    Vsftpd 3.0.2 正式版发布
    Putdb WebBuilder 6.5 正式版本发布
    SoaBox 1.1.6 GA 发布,SOA 模拟环境
    pynag 0.4.6 发布,Nagios配置和插件管理
    Percona Playback 0.4,MySQL 负荷回放工具
    xombrero 1.3.1 发布,微型 Web 浏览器
    Hypertable 0.9.6.4 发布,分布式数据库
    libmemcached 1.0.11 发布
    CryptoHeaven 3.7 发布,安全邮件解决方案
    Android Activity生命周期
  • 原文地址:https://www.cnblogs.com/oop/p/153132.html
Copyright © 2011-2022 走看看