在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在.NET中的反射也可以实现从对象的外部来了解对象(或程序集)内部结构的功能,哪怕你不知道这个对象(或程序集)是个什么东西,另外.NET中的反射还可以运态创建出对象并执行它其中的方法。 反射是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类、结构、委托、接口和枚举等)的成员和成员的信息。有了反射,即可对每一个类型了如指掌。另外我还可以直接创建对象,即使这个对象的类型在编译时还不知道。 反射的用途 (1)使用Assembly定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型并创建该类型的实例。 反射用到的命名空间System.Reflection System.Type System.Reflection.Assembly System.Type类System.Type 类对于反射起着核心的作用。但它是一个抽象的基类,Type有与每种数据类型对应的派生类,我们使用这个派生类的对象的方法、字段、属性来查找有关该类型的所有信息。 能够获取一个给定类型的Type有三种方式. ●使用 C# typeof 运算符。
Type类的属性:
System.Type的用法Type t = typeof(Rubbit); foreach (ConstructorInfo constructor in t.GetConstructors()) { foreach (ParameterInfo parameter in constructor.GetParameters()) { Console.WriteLine(parameter.Name + " : " + parameter.ParameterType.ToString()); } } 使用通过反射得到的构造函数变量创建实例对象 //通过Rubbit类名获取Type变量 Type t = typeof(Rubbit); //设置构造器的参数的类型数组 Type[] pt = new Type[1]; pt[0] = typeof(int); //通过类型数组获取对应的类型的构造器 ConstructorInfo con = t.GetConstructor(pt); //通过对应的传递参数,得到Rubbit的实例对象 object[] pv = { 3 }; Rubbit o = con.Invoke(pv) as Rubbit; //调用o实例对象的实例方法Description(); o.Description(); 使用Activator Sealed类的静态CreateInstance方法生成对象 //通过Rubbit类名获取Type变量 Type t = typeof(Rubbit); //通过对应的传递参数,得到Rubbit的实例对象 object[] pv = { 3 }; Rubbit o = Activator.CreateInstance(t,pv) as Rubbit; //调用o实例对象的实例方法Description(); o.Description(); 查看类中的属性 //通过Rubbit类名获取Type变量 Type t = typeof(Rubbit); foreach (PropertyInfo property in t.GetProperties()) { //输出属性的类型和变量名 Console.WriteLine(property.Name + " : " + property.PropertyType.ToString()); }
|
请发表评论