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# 程序集 类型加载 反射

  • 2009年09月20日 14:15
  • 72KB
  • 下载

c#使用反射加载程序集Assembly。load()使用全过程

第一步 :创建一个将被加载的程序集 类库Test using System; using System.Collections.Generic; using System.Linq; using...

[C#]解决第三方控件引起的"类型Universe无法解析程序集"问题

问题由来:项目中要用到C#的一个开源控件 DockPanel,按照方法加入第三控件(DockPanel)后,对它进行使用。可是在窗体拖动控件的时候,发现了一个错误: 类型Universe无法解析程...

C# 001 --- 正确的删除一个控件的事件函数 --- 解决错误: “A”不包含“B”的定义,并且找不到可接受类型为“A”的第一个参数的扩展方法“B”(是否缺少 using 指令或程序集引用?)

先添加一个控件。比如添加一个GroupBox控件。当然,这个控件你不需要任何事件函数,但是如果你已经双击这个控件,开始编辑这个控件的事件函数了,那么这个时候要删除这个控件的事件函数需要2步:Step ...

VS C# 命名空间 “ ”中不存在类型或命名空间名称 “ ” 。是否缺少程序集引用?

命名空间 “ Charge”中不存在类型或命名空间名称 “ DAL” 。是否缺少程序集引用? 这是昨天遇到的问题,解决之后觉得有必要分享出来; 之所以这样报错...

C#之反射与程序集

反射的定义:反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获...

C#中的程序集和反射

--什么是程序集?        .net中的dll与exe文件都是程序集。(exe与dll的区别?)               区别:                  exe文...

反射(提供封装程序集、模块和类型的对象)

反射是一种计算机处理方式。有程序可以访问、检测和修改它本身状态或行为的这种能力。能提供封装程序集、类型的对象。(程序集包含模块,而模块包含类型,类型又包含成员。) 优点: 1、反射提高...

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

C#反射获取程序集信息和通过类名创建类实例 。 System.Reflection 命名空间:包含通过检查托管代码中程序集、模块、成员、参数和其他实体的元数据来检索其相关信息的类型。 Asse...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#中使用反射显示程序集的所有类型和属性
举报原因:
原因补充:

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