反射的应用
假设已经编译完一个程序为 KevinTest.Dll文件
现在要在程序中使用这个文件并自动触发一个方法(通过传递方法名)
System.Reflection.Assembly _loadAssmbly;
Type _GetType;
object _classInstance;
try
{
//加载DLL文件-----指明的参数为该文件存放的路径
_LoadAssmbly = System.Reflection.Assembly.LoadFile(dll的路径);
//定位到需要的类上面----指明命名空间+类名称
_GetType = _LoadAssmbly.GetType(类名称---格式必须是命名空间.类名称);
//定位到需要的方法上面--指明方法的名称
System.Reflection.MethodInfo _LoadMethod = _GetType.GetMethod(方法的名称);
//实例化对象
_classInstance = _LoadAssmbly.CreateInstance(类名称----格式必须是命名空间.类名称);
//触发该方法---触发无参数非静态方法
_LoadMethod.Invoke(_ClassInstance,null);//第一个参数为类的实例,第二个参数为传递给方法的变量
//触发方法---触发静态无参数方法
_LoadMethod.Invoke(null,null);
//触发方法----触发有参数非静态方法
_LoadMethod.Invoke(_ClassInstance,new object[]{参数});
//触发----触发有参数静态方法
//LoadMethod.Invoke(null,new object[]{参数});
//可以触发有返回值的方法,比如返回值为string
string _ReturnDate =(string)_LoadMethod.Invoke(_LoadInstance,new object[]{});
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
_LoadAssmbly =null;
_GetType=null;
_LoadInstance =null
}