1、 通过反射的GetProperties()方法只能获取一个对象中被标记为Public的属性。 例如:有一个Person类: class Person
{
protected string name{get;set;}
public int age {get;set;}
} 通过Type动态获取person的属性: Type t=typeof(Person);
foreach (PropertyInfo pro in t.GetProperties())
{
Console.WriteLine(pro);
} 输出: 若将person类中name属性的public去掉或者改成其他的将不能通过Type来动态获取。 通过Type动态获取person的方法: foreach (MethodInfo method in t.GetMethods())
{
Console.WriteLine(method);
} 输出: 获取的方法中还包括父类的。同时,在这还可以看出,一个类中的属性也是方法,对应着一个get和set方法。 通过Assembly的GetExportedTypes()方法可以获得一个assembly中的所有public类型。Activator.CreateInstance()动态创建对象,MethodInfo类的Invoke方法来动态调用方法。 代码:
Assembly asm = Assembly.LoadFile(@"I:\Execise\20100821\接口入门\MyClass\bin\Debug\MyClass.dll"); //获得指定路径下的assembly foreach (Type type in asm.GetExportedTypes()) //通过GetExportedTypes()获得assembly中D的所有public类型¨ { object obj = Activator.CreateInstance(type);// 调用Activator.CreateInstance方法动态创建对象 MethodInfo methodSayHello = type.GetMethod("SayHello");//获得SqyHello方法 if (methodSayHello != null) { methodSayHello.Invoke(obj, null); //动态来调用指定对象下的方法.obj obj为对象,null代表ª在这SayHello方法中不需传参数 } }