关键类Assembly和Activator
Activator
用于快速实例化对象的类
用于将Type对象快捷实例化为对象
先得到Type然后快速实例化一个对象
//无参构造函数
Type testType = typeof(Test);
Test testObj =Activator.CreateInstance(testType) as Test;
Console.WriteLine(testObj.str);
//有参构造
testObj = Activator.CreateInstance(testType,99) as Test;
Console.WriteLine(testObj.j);
testObj = Activator.CreateInstance(testType,55."111222") as Test;
Console.WriteLine(testObj.j);
Assembly
程序集类主要用来加载其他程序集,加载后才能用Type来使用其他程序集中得信息,如果想要使用不是自己程序集中的内容,需要先加载程序集,比如dll文件(库文件)
//三种加载程序集的函数
//一般用来加载同一文件下的其他程序集
//Assembly assembly2=Assembly.Load("程序集名")
//一般用来加载不在同一文件夹下的其他程序集
//Assembly assembly = Assembly.LoadFrom("包含程序集清单的文件的名称或路径");
//Assembly assembly3 = Assembly.LoadFile("要加载的文件的完全限定路径");
//先加载一个指定程序集
Assembly assembly = Assembly.LoadFrom(@"C:\Users\Administrator\source\repos\Cs核心\多线程习题\bin\Debug\net8.0\多线程习题");
//再加载程序集中的一个类对象,之后才能使用反射
Type icon = assembly.GetType("多线程习题.Star");
MemberInfo[] members = icon.GetMembers();
for (int i =0;i<members.Length;i++)
{
Console.WriteLine(members[i]);
}
//通过反射实例化一个对象
//先得到枚举Type来得到可传入参数
Type moveDir = assembly.GetType("多线程习题.E_MoveDir");
FieldInfo right =moveDir.GetField("Right");
//直接实例化对象
object iconObj = Activator.CreateInstance(icon,10,5,right.GetValue(null));
//通过反射得到对象中的方法
MethodInfo move = icon.GetMethod("Move");
MethodInfo draw = icon.GetMethod("Draw");
MethodInfo clear = icon.GetMethod("Clear");
while(true)
{
Thread.Sleep(1000);
clear.Invoke(iconObj,null);
move.Invoke(iconObj,null);
draw.Invoke(iconObj,null);
}
类库工程的创建

浙公网安备 33010602011771号