反射与特性
反射
(能够通过非反射方式实现的功能,尽量不要用反射)
引入命名空间 using System;-----Type类
通过反射获取类型:(PersonNameSpace命名空间)
1.System.Type t1=Typeof(PersonNameSpace.Person);
2.通过对象获取类型
PersonNameSpace.Person p=new PersonNameSpace.Person();
System.Type t2=p.GetType();
3.通过字符串获取类型
System.Type t3=System.Type.GetType("System.String");
public class Person
{
//属性
}
//实例化类
Person p=new Person();
//Type类
Type t1=typeof(Person);
//通过对象获取类型
Type t2=p.GetType();
//通过字符串获取类型
Type t3=Type.GetType("Person");
Type类(查API)
通过Type类型的对象,获取该类的信息
属性(API)
t1.Name(); //获取到类的名字
t1.FullName();//获取到类的全名(命名空间.类名)
t1.NameSpace();//获取到类的命名空间
方法(API)
GetConstructor(); —返回ConstructorInfo类型,用于取得该类的构造函数信息
通过反射的方法(构造函数)实例化对象
Activator—System命名空间下的
方法:
1.CreateInstance(Type t)—使用默认Public无参构造实例化对象
2.CreateInstance(Type t,Bool nonPublic)—使用私有的无参构造实例化对象
3.CreateInstance(Type t,params object[] args)—使用Public有参构造实例化对象
4.CreateInstance(Type t,BindingFlags,Binder,object[] args,CultureInfo)—使用私有有参构造实例化对象(BindingFlags.NonPublic | BindingFlags.Instance)
//相当于Person p1=new Person ();
//通过反射,构造实例,返回的是一个object对象,接收存储
//通过反射,使用共有的无参构造函数实例化对象
object p1=Activator.CreateInstance(typeof(类));
//通过反射,使用私有的无参构造函数实例化对象
object p2=Activator.CreateInstance