学院首页>网络编程>ASP.NET>C#中使用反射显示程序集的所有类型和属性

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

作者: 来源: 添加时间:2006-5-21 19:34:11
 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;
  }

站内搜索