C#中使用反射显示程序集的所有类型和属性
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.Name " " " " Environment.NewLine; // Get the public methods.
MethodInfo[] myArrayMethodInfo=types.GetMethods(BindingFlags.Public|BindingFlags.Instance|BindingFlags.DeclaredOnly);
txtMethods.Text=txtMethods.Text Environment.NewLine "The number of public methods in " types.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;
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;
propStr ="property " i ":" myPropInfo.Name " type:" myPropInfo.PropertyType Environment.NewLine;
}
return propStr;
}
| 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。 |