1.使用方法查找DLL文件,使用Reflection类库中的各种方法操作dll文件2.加载DLL文件的步骤Assemblyassembly1=Assembly.Load("SqlServerDB");//方法一:这个DLL文件应该在StringfilePath=Environment.CurrentDirectory+""启动项目下;Assemblyassembly2=Assembly.LoadFile(filePath+@"SqlServerDB.dll");//方法二:全路径Assemblyassembly3=Assembly.LoadFrom(filePath+@"SqlServerDB.dll");//方法三:全路径Assemblyassembly4=Assembly.LoadFrom(@"SqlServerDB.dll");//方法三:获取指定类型的完整路径foreach(variteminassembly4.GetTypes())//查找所有类型,即有多少个类{Console.WriteLine(item.Name);}获取构造函数Type=assembly4.GetType("SqlServerDB.ReflectionTest");//在ReflectionTest类中调用foreach(varctorintype.GetConstructors(BindingFlags.Instance|BindingFlags.NonPublic|BindingFlags.Public)){Console.WriteLine($"构造函数:{ctor.Name}");foreach(varparaminctor.GetParameters()){Console.WriteLine($"构造方法参数:{param.ParameterType}");}}//【3】实例化//ReflectionTestreflectionTest=newReflectionTest();//这种实现实例化就是知道具体的类型--static//objectobjTest=Activator.CreateInstance(type);//动态实例化--调用我们的构造方法objectobjTest1=Activator.CreateInstance(type,newobject[]{"string"});//动态实例化--调用我们带参数的构造函数//调用私有构造函数//ReflectionTestreflectionTest=newReflectionTest();//普通调用对象objTest2=Activator.CreateInstance(type,true);调用非结构方法对象objTest2=Activator.CreateInstance(type,true);//调用普通方法ReflectionTestreflectionTest=objTest2asReflectionTest;//as转换的好处,不报错,如果类型不对,返回nullreflectionTest.Show1();//调用私有方法varmethod=type.GetMethod("Show2",BindingFlags.Instance|BindingFlags.NonPublic);method.Invoke(objTest2,newobject[]{});调用泛型方法//泛型无参数varmethod3=type.GetMethod("Show3");//找到指定的方法vargenericMethod=method3.MakeGenericMethod(newType[]{typeof(int)});//指定泛型参数类型TgenericMethod.Invoke(objTest2,newobject[]{});//泛型有参数varmethod4=type.GetMethod("Show4");//找到指定方法vargenericMethod4=method4.MakeGenericMethod(newType[]{typeof(string)});//指定泛型参数类型TgenericMethod4.Invoke(objTest2,newobject[]{123,"泛型字符串参数"});反射测试类位于SqlServerDB.dll中的ReflectionTest.cs文件///
