C#中使用反射显示程序集的所有类型和属性

原创 2005年04月30日 16:19:00

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

C# 利用反射查看程序集下的类

1.主窗体下的代码 namespace TestReflection { public partial class Form1 : Form { public For...
  • likekobe2012
  • likekobe2012
  • 2014年12月09日 14:54
  • 869

c#的反射中及命名空间程序集的获取

最终结果 //反射机制 //参数 object[] parameters = new object[1...
  • jzaicn
  • jzaicn
  • 2014年03月15日 14:45
  • 5953

【C#反射程序集】

一.在.NET中,程序集是进行部署,版本控制的基本单元。System.Reflection命名空间中的Assembly类型,代表了一个程序集。并包含了关于程序集的信息。 二.获取程序集的信息: 创...
  • heyangyi_19940703
  • heyangyi_19940703
  • 2016年05月07日 17:54
  • 1633

unity中利用反射遍历类或者结构体中的每一个字段属性 、类型 、值

using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Reflecti...
  • yguoelect
  • yguoelect
  • 2017年05月18日 00:07
  • 1031

C#反射 获取程序集信息和通过类名创建类实例

C#反射获取程序集信息和通过类名创建类实例 。 System.Reflection 命名空间:包含通过检查托管代码中程序集、模块、成员、参数和其他实体的元数据来检索其相关信息的类型。 Asse...
  • pan_junbiao
  • pan_junbiao
  • 2013年10月02日 15:54
  • 24297

C#OOP之十三 组件、程序集与反射

组件  组件技术是软件领域一项非常大的成就。组件技术像搭积木游戏一样,在搭积木时,我们知道并不是任何的两个积木都可以组合,能组合的积木之间必定存在可以衔接的接口,同时,已经搭好的积木可以作为一个整...
  • zhangchen124
  • zhangchen124
  • 2016年04月30日 20:44
  • 4420

Unity热更新之C#反射动态获取类属性及方法

原文链接:http://www.tiankengblog.com/?p=93 如果我们要为发布出去的游戏更新一些功能,但又不想让用户重新下载整个游戏包,只让他下载我们更新的资源包,用asset...
  • qq992817263
  • qq992817263
  • 2016年03月03日 12:46
  • 4376

C#中的程序集和反射

¨什么是程序集? .net中的dll与exe文件都是程序集。(exe与dll的区别?) 程序集是.net中的概念。 程序集(Assembly),可以看做是一堆相关类打一个包,相当于java中的j...
  • u011955860
  • u011955860
  • 2014年04月04日 11:33
  • 978

C#反射遍历/查询类中的属性以及值

最近想实现一个功能,扩展MVC的HtmlHelper类
  • zhifeiya
  • zhifeiya
  • 2014年07月10日 14:28
  • 1674

C#反射方法:程序集反射、类型反射、接口反射、类型成员反射

C#反射方法:程序集反射、类型反射、接口反射、类型成员反射            反射(原创推荐)                 在程序中,当我们需要动态的去加载程序集的时候(将对程序...
  • zccai1205
  • zccai1205
  • 2016年07月01日 11:00
  • 1182
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#中使用反射显示程序集的所有类型和属性
举报原因:
原因补充:

(最多只允许输入30个字)