Csharp/C Sharp/Reflection/PropertyInfo — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
|
(нет различий)
|
Текущая версия на 11:38, 26 мая 2010
Содержание
IsClass, Namespace, FullName, IsAbstract, IsPublic, IsInterface, IsEnum
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);
}
}
}
Obtaining member information from a class.
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);
}
}
}
}
}
Print Property Info
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);
}
}
}
}
}
Type.GetProperties
//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;
}
}
}
}