目录
1.Activator
用于快速实例化对象的类,用于将Type对象快速实例化为对象(自动调用构造函数)。先得到Type,然后快速实例化一个对象。
Type testType=typeof(Test);
1 无参构造
Test testObj=Activator.CreateInstance(testType) as Test;
2 有参构造
testObj=Activator.CreateInstance(testType ,9) as Test; //指构造函数参数的数目
testObj=Activator.CreateInstance(testType ,55,“Nicole Potter") as Test;
2.Assembly
程序集类
主要用来加载其它程序集,加载后才能用Type来使用其它程序集中的信息。如果想要使用不是自己程序集中的内容,需要先加载程序集。比如:dll文件(库文件)。
简单的把库文件看成一种代码仓库,它是提供给使用者一些可以直接拿来用的变量,函数或类。
三种加载程序集的函数
一般用来加载在同一文件下的其它程序集
Assembly assembly2=Assembly.Load("程序集名称");
一般用来加载不在同一文件下的其它程序集
Assembly assembly=Assembly.LoadFrom("包含程序集清单的文件的名称或路径");
Assembly assembly3=Assembly.LoadFile("要加载的文件的完全限定路径");
1 先加载一个指定程序集
Assembly assembly=Assembly.LoadFrom("包含程序集清单的文件的名称或路径-加//或者@都可以,里面不能直接使用/,不需要后缀");
Type[ ] types=assembly.GetTypes();
for(int i=0;i<types.Length;i++)
{
Console.WriteLine(types[i]);
}
2 再加载程序集中的一个类对象之后才能使用反射
Type ic=assembly.GetType("内容");
MemberInfo[ ] members=ic.GetMembers();
for(int i=0;i<members.Length;i++)
{
Console.WriteLine(members[i]);
}
//通过反射来实例化一个ic对象,首先得到枚举Type来得到可以传入的参数
Type moveDir=assembly.GetType("内容");
FieldInfo right=moveDir.GetField("Right");
//直接实例化对象
object icO=Activator.CreateInstance(ic,1,2,right,GetValue(null));
//得到对象中的方法,通过反射
MethodInfo move=ic.GetMethod("Move");
....
3.学习反射的原因
为了之后学习Unity引擎的基本工作原理做铺垫,Unity引擎的基本工作机制就是建立在反射的基础上。