Csharp/C Sharp/Reflection/PropertyInfo
Содержание
IsClass, Namespace, FullName, IsAbstract, IsPublic, IsInterface, IsEnum
<source lang="csharp"> using System; using System.Reflection; class MainClass {
public static void ShowTypes(string name, Assembly assembly) { Type[] typeArray = assembly.GetTypes(); Console.WriteLine(name); foreach (Type type in typeArray) { if (type.IsClass) { Console.WriteLine("\nNamespace : {0}", type.Namespace); Console.WriteLine("Class : {0}", type.FullName); if (type.BaseType != null) Console.WriteLine("Base Class : {0}", type.BaseType.FullName); else Console.WriteLine("Class not derived from anything"); if (type.IsAbstract) Console.WriteLine("Abstract base class"); else Console.WriteLine("Instantiable class"); if (type.IsPublic) Console.WriteLine("Scope: Public"); else Console.WriteLine("Scope: Private"); } else if (type.IsInterface) { Console.WriteLine("\nNamespace : {0}", type.Namespace); Console.WriteLine("Interface : {0}", type.FullName); if (type.IsPublic) Console.WriteLine("Scope: Public"); else Console.WriteLine("Scope: Private"); } else if (type.IsEnum) { Console.WriteLine("\nEnumeration: {0}", type.FullName); } else Console.WriteLine("\nType: {0}", type.FullName); } } public static void Main(string[] args) { for (int i = 0; i < args.Length; ++i) { Assembly assembly = Assembly.LoadFrom(args[0]); ShowTypes(args[0], assembly); } }
}
</source>
Obtaining member information from a class.
<source lang="csharp">
using System; using System.Reflection; class MainClass {
public static void Main(string[] args) { ShowClasses(args[0]); } public static void ShowMethods(Type t) { MethodInfo[] methods = t.GetMethods(); foreach (MethodInfo m in methods) { Console.WriteLine("\nMethod Name: {0}", m.Name); Console.WriteLine("Return Type: {0}", m.ReturnType); } } public static void ShowProperties(Type t) { PropertyInfo[] props = t.GetProperties(); foreach (PropertyInfo p in props) { Console.WriteLine("\nProperty Name: {0}", p.Name); Console.WriteLine("Type: {0}", p.MemberType); } } public static void ShowClasses(string name) { Assembly assembly = Assembly.LoadFrom(name); if (assembly != null) { Type[] typeArray = assembly.GetTypes(); Console.WriteLine("Assembly Name: {0}", name); foreach (Type type in typeArray) { if (type.IsClass) { Console.WriteLine("Class: {0}", type.FullName); ShowMethods(type); ShowProperties(type); } } } }
}
</source>
Print Property Info
<source lang="csharp"> using System; using System.Collections; using System.Reflection; public class MainClass{
public static void Main() { Assembly LoadedAsm = Assembly.LoadFrom("yourName"); Console.WriteLine(LoadedAsm.FullName); Type[] LoadedTypes = LoadedAsm.GetTypes(); if (LoadedTypes.Length == 0) { Console.WriteLine("\tNo Types!"); } else { foreach (Type t in LoadedTypes) { if (t.IsPublic && !t.IsEnum && !t.IsValueType) { Console.WriteLine("Type: {0}", t.FullName); PrintPropertyInfo(t); } } } } private static void PrintPropertyInfo(Type t) { PropertyInfo[] props = t.GetProperties (BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static); foreach (PropertyInfo p in props) { Console.WriteLine("Property: {0}", p.Name); Console.WriteLine("\tType {0}", p.PropertyType.FullName); if (p.CanRead) Console.WriteLine("Readable property."); if (p.CanWrite) Console.WriteLine("Writable property."); ParameterInfo[] pList = p.GetIndexParameters(); if (pList.Length == 0) { Console.WriteLine("\tNo Parameters"); } else { Console.WriteLine("\tParameter List:"); foreach (ParameterInfo parm in pList) { Console.WriteLine("\t\t{0} {1}", parm.ParameterType.FullName,parm.Name); } } } }
}
</source>
Type.GetProperties
<source lang="csharp"> //ReflectionTest using System; using System.Reflection; public class Class1 {
public static int Main() { Type t = typeof(MyClass); Console.WriteLine("Type of class: " + t); Console.WriteLine("Namespace: " + t.Namespace); ConstructorInfo[] ci = t.GetConstructors(); PropertyInfo[] pi = t.GetProperties(); Console.WriteLine("Properties are:"); foreach (PropertyInfo i in pi) { Console.WriteLine(i); } return 0; }
public class MyClass { public int pubInteger; private int _privValue; public MyClass() { } public MyClass(int IntegerValueIn) { pubInteger = IntegerValueIn; } public int Add10(int IntegerValueIn) { Console.WriteLine(IntegerValueIn); return IntegerValueIn + 10; } public int TestProperty { get { return _privValue; } set { _privValue = value; } } }
}
</source>