【C#】VS中.Net反射机制简单介绍
反射(Reflection)是. NET的重要机制之一,通过反射,可以在运行时获得.NET 中一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等,还可以获得每个成员的名称、限定符和参数等。
由于获取了构造函数的信息,因此可通过类名来直接创建对象,即使这个对象的类型在编译时是未知的。
由于在. NET的程序集(Assembly)中封装了类型元数据信息,因此可以先通过Assembly的Load("程序集名称”)方法加载一个程序集,再通过其CreateInstance(“命名间.类”)方法根据类名创建一个object类型的对象,用户可以根据需要将其转换为所需类型。
(以上介绍来自:教材《C#设计模式》第二版 清华大学出版社)
示意代码如下:
//导入命名空间
using Syetom.RofLection:
object obj = Aasembly. Load("程序集名称"). CreateInstance("命名空间.类");
在上述代码中,“命名空间,类”可以存储在配置文件中,使用ConfigurationManager 类的AppSettings属性可以获取存储在配置文件中的类名字符串。
PS:因在软件设计(C#版)实验中,在将控制台应用程序重命名后,命名空间并未更改,也就是文件名name1≠命名空间name2。此时我还以为程序集名称就是命名空间,但一直报错在以下断点处。
一直不能反射生成对象,也就是一直为null:

后来,“皇天不负有心人”,我终于发现自己在App.config中写的是重命名后的文件名name1,所以它传递到program里是也是name1,但我命名空间是name2,它就无法找到以name1为命名空间的对应类文件。。。。。
所以可以说是“重命名”的错,以后可以在构思、画好对应UML图后再开始写代码吧。
.NET反射机制详解:C#动态对象创建
本文介绍了C#中的.NET反射机制,允许在运行时获取类型信息并动态创建对象。通过Assembly.Load和Assembly.CreateInstance方法,可以加载程序集并基于类名创建实例。在实际应用中,需要注意配置文件中的命名空间与程序命名的一致性,否则可能导致反射失败。
1093

被折叠的 条评论
为什么被折叠?



