- 1
- 0
- 约2.25千字
- 约 3页
- 2021-01-27 发布于山东
- 举报
反射生成对象
1.用Type 构建对象
用构造函数动态生成对象:
既然有反射 那就有“正射”
对比一下:
有一个class Test 有无参构造方法
获取实例的比较:
“正”:由类名直接使用关键字new 来获得 语法:new Test ()
反射:未知类名 运行时获得类型名:例如:Type type = Type.GetType(Test);
Object o = type.GetConstructor (new Type[]{}).Invoke (null);
当然参数也可以由配置文件获得
以上调用无参构造 带参的构造怎么调用呢?
2.用Activator 生成对象:
Type t = typeof(NewClassw);
//构造函数的参数
object[] obj = new object[2] { 实参1, 实参2 };
//用Activator 的CreateInstance 静态方法,生成新对象
object o = Activator.CreateInstance(t,obj);
3.Assembly 生成对象:
Assembly assembly = Assembly.Load (ReflectTest);
Object obj = assembly.CreateInstance (ReflectTest.Wood);
反射获取字段
一般用于已知对象时使用,同样用正反来做对比,已知对象MyClass obj,对象内有name 这
个字段。
正:
obj.name = xxx即可设置该对象的值
obj.name 即可获得该对象的值
反射:
//获取类的描述对象
Type t = obj.GetType();
//取得字段描述对象
FieldInfo fi = t.GetField(name);
//获取或设置字段值
fi.SetValue(obj, k001);
fi.GetValue(obj);
一般在C# 中以属性替代字段
//获取类的描述对象
Type t = obj.GetType();
//取得属性描述对象
PropertyInfo pi1 = t.GetProperty(Name);
//获取或设置属性值
pi1.SetValue(obj, k001,null);
pi1.GetValue(obj,null);
反射调用方法
一般用于对象、方法名、参数类型已知的情况
对象:obj
方法名:methodName
参数类型 String int
正:
直接给予参数调用:obj.methodName (实参1,实参2(int) )
反射:
//获取类的描述对象
Type t = obj.GetType();
//取得方法描述对象
MethodInfo mi = t.GetMethod(show);
//调用方法
mi.Invoke(obj, 实参1,实参2(int));
参数可以换成数组
反射载入程序集
System.Reflection.Assembly 类
Assembly 类可以获得程序集的信息,也可以动态的加载程序集,以及在程序集中查找类型
信息,并创建该类型的实例。
使用Assembly 类可以降低程序集之间的耦合,有利于软件结构的合理化。
通过程序集名称返回Assembly 对象
Assembly ass = Assembly.Load(ClassLibrary831);
通过DLL 文件名称返回Assembly 对象
Assembly ass = Assembly.LoadFrom(ClassLibrary831.dll);
通过Assembly 获取程序集中类
Type t = ass.GetType(ClassLibrary831.NewClass); //参数必须是类的全名
通过Assembly 获取程序集中所有的类
Type[] t = ass.GetTypes();
//通过程序集的名称反射
Assembly ass = Assembly.Load(ClassLibrary831);
Type t = ass.GetType(ClassLibrary831.NewClass);
object o = Activator.CreateInstance(t, , );
MethodInfo mi = t.GetMethod(show);
mi.Invoke(o, null);
//通过DLL
您可能关注的文档
最近下载
- 798180_Leica_Viva_GS14_GS16_UM_v4-0-0_zh-徕卡实用说明书.pdf VIP
- 2025年江苏省苏州市吴中、吴江、相城区中考二模历史试题.pdf VIP
- 2025年6月10日浙江省事业单位统考《综合应用能力类》考试真题.docx VIP
- 水利水电工程建筑专业毕业论文设计.doc VIP
- 移动通信(第六版)(章坚武)课件章-(4).pptx VIP
- 【模板资料】企业新版生产安全事故应急预案汇编((依据GBT29639-2020编制,89页修订版).docx VIP
- 2026年春季学期校园“1530”安全教育记录表.docx VIP
- 童趣风学习文明礼仪主题教育.pptx VIP
- 审美鉴赏与创造智慧树知到课后章节答案2023年下南昌大学.docx VIP
- 16bj7-1楼梯平台栏杆及扶手.pdf VIP
原创力文档

文档评论(0)