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

Posted on 2008-04-14 22:21  xiaolei1982  阅读(240)  评论(0)    收藏  举报
/// <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;
  }

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3