首先加载dll文件
方法一:Assembly assembly = Assembly.Load("DLL文件名”); 这里路径其实是相对路径
这种方法需要将dll文件放在执行项的执行文件夹中,例如debug。或者直接引用也可。
b. 方法二:Assembly assembly = Assembly.Load("DLL文件的绝对路径”);
c. 方法三: Assembly assembly = Assembly.LoadForm(@"xxx.dll")
i. 这种方法引入相对或者绝对路径都可以
获取指定类型(就是获取dll文件的某个类)
Type type = assembly.GetType("dll文件名.类名"):(这里前提知道类名)
b.如果不知道dll文件中有那些类,可以遍历获取 从而查找自己需要的类型
foreach (var item in assembly3.GetTypes())
{
Console.WriteLine(item.Name);
}
如果构造方式是私有的,那么就在那么就在GetConstructors(BindingFlags.instance|Bindflags.NoPublic),意思就是查找非公开或者实例化的构造方法都要找出来 默认是查找公开的 。如果不是私有 就不需要加BindingFlags.instance|Bindflags.NoPublic
foreach (var item in Typetype.GetConstructors())
{
Console.WriteLine("构造方法获取");
foreach (var param in item.GetParameters())
{
Console.WriteLine($"构造方法的参数{param.ParameterType}");
}
}
实例化类
静态实例化
Reflection reflection = new Reflection(); 其中Reflection为dll文件中的类名
动态实例化
object object1 = Activator.CreateInstance("Typetype");//Typetype这里是上面的类
这是调用无参构造
ii. object object2 = Activator.CreateInstance(Typetype,new object[] { "ant编程"});//调用了有参构造方法
iii. //调用私有的构造函数
object object3 = Activator.CreateInstance(Typetype, true);