做程序设计总是会碰见各种稀奇的需求,比如说动态创建类的实例,使用动态可能是基于降低组件的耦合性的要求,也可能是基于别人的作品进行再创作或进行扩展。考虑到基于别人的作品进行再创作或进行扩展,就要使用到GetType()函数,经过查阅说明文档,发现下面和GetType()相关的内容:
1、sizeof(C#参考)
用于获取非托管类型的大小(以字节为单位)。非托管类型包括下表列出的内置类型以及以下类型:
枚举类型
指针类型
用户定义的结构,不包含任何属于引用类型的字段或属性
2、typeof(C#参考)
用于获取类型的System.Type对象。typeof表达式采用以下形式:
System.Typetype=typeof(int);
若要获取表达式的运行时类型,可以使用.NETFramework方法GetType,如以下示例中所示:
inti=0;
System.Typetype=i.GetType();
不能重载typeof运算符。
3、动态创建类的新实例
TypeBuilder类
在运行时定义并创建类的新实例。
命名空间:System.Reflection.Emit
程序集:mscorlib(在mscorlib.dll中)
语法
C#
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
[HostProtectionAttribute(SecurityAction.LinkDemand,MayLeakOnAbort=true)]
publicsealedclassTypeBuilder:Type,
_TypeBuilder
备注
TypeBuilder是用于控制在运行时创建动态类的根类。TypeBuilder提供了一组用于在运行时的内部定义类、添加方法和字段以及创建类的例程。可以从动态模块创建新的TypeBuilder。
若要为TypeBuilder对象表示的不完整类型创建数组类型、指针类型或byref类型,请分别使用MakeArrayType方法、MakePointerType方法或MakeByRefType方法。
4、动态创建类的新实例
Assembly类
表示一个程序集,它是一个可重用、无版本冲突并且可自我描述的公共语言运行时应用程序构造块。
命名空间:System.Reflection
程序集:mscorlib(在mscorlib.dll中)
语法
C#
[SerializableAttribute]
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
[PermissionSetAttribute(SecurityAction.InheritanceDemand,Unrestricted=true)]
publicabstractclassAssembly:_Assembly,
IEvidenceFactory,ICustomAttributeProvider,ISerializable
备注
使用Assembly类可以加载程序集、浏览程序集的元数据和构成部分、发现程序集中包含的类型以及创建这些类型的实例。
静态方法Assembly.Load方法(String)-通过给定程序集的长格式名称加载程序集。
成员方法Assembly.CreateInstance方法(String,Boolean)-使用可选的区分大小写搜索,从此程序集中查找指定的类型,然后使用系统激活器创建它的实例。
5、附上三篇查到的文章
(98条消息)Unity3D中C#反射Reflection的使用_恬静的小魔龙的博客-CSDN博客_unity反射调用方法
(98条消息)<反射机制Reflection>反射机制创建实例对象类完整结构解析_爱吃糖的范同学的博客-CSDN博客_java反射创建泛型对象实例
(98条消息)使用反射reflection动态创建类实例并操作属性字段和方法_半人马座a星球永久居民的博客-CSDN博客