我有一个dll文件利用反射拿到里面的方法 然后调用里面的方法获得我想要的值 ,我现在只有一个dll文件 求大神发点代码我该怎么做。。。。。
Assembly assembly = Assembly.LoadFile(path);
//2创建Person类的对象
Type type = assembly.GetType("MyAssembly.Person");
object o = Activator.CreateInstance(type,"wolf",22,"未知");//实例化
//3获取方法的类型
MethodInfo methodInfo = type.GetMethod("SayHi");
//4反射调用方法
methodInfo.Invoke(o, null);
MyAssembly.Person 这个是啥 type,"wolf",22,"未知");// 这些参数呢 SayHi还有这个
@asp点net_菜鸟: Type type=typeof(Person);相同
楼上的方法好像可以!
你最好把反射这一块系统的学习一下
加载程序集,然后找程序集中相应的类,然后调用方法 就是这么简单。
ass = System.Reflection.Assembly.LoadFile(@"d:\TestReflect.dll");//要绝对路径 type = ass.GetType("Webtest.ReflectTest");//必须使用名称空间+类名称 System.Reflection.MethodInfo method = type.GetMethod("WriteString");//方法的名称 obj = ass.CreateInstance("Webtest.ReflectTest");//必须使用名称空间+类名称 string s = (string)method.Invoke(obj,new string[]{"jianglijun"}); //实例方法的调用 或:string s = (string)method.Invoke(obj,Object[] parametors = new Object[]{"param"}); Response.Write(s+"<br>"); method = type.GetMethod("WriteName");//方法的名称 s = (string)method.Invoke(null,new string[]{"jianglijun"}); //静态方法的调用
http://www.cnblogs.com/baishahe/archive/2008/03/24/1120148.html 善用搜索引擎呐亲。
http://www.cnblogs.com/Ivan-Yan/archive/2011/02/13/1953044.html 4.0 还可以用 dynamic 更优雅的实现
//加载Dll Assembly _Assembly = Assembly.LoadFrom("ClassLibraryTest.dll"); //获得指定类型(命名空间+类名称) Type T = _Assembly.GetType("ClassLibraryTest.Library"); //获得实例对象 object o = System.Activator.CreateInstance(T); //查找指定方法 System.Reflection.MethodInfo mi = T.GetMethod("GetValue"); //执行方法 string Result = mi.Invoke(o,null).ToString();
最好去MSDN去看看。上面有详细的解释和实例。
谢谢
namespace AssembleTest { public class Assemble { public string name = "I'm Zery"; public int age = 22; public string sex = "Super Man"; public string Name { get { return name; } set { name = value; } } public int Age { get { return age; } set { age = value; } } public string Sex { get { return sex; } set { sex = value; } } public string PrintName(string name) { Console.WriteLine("这是反射调用的{0}", name); return name; } public void PrintAge(int age) { Console.WriteLine("这是反射调用的:{0}", age); } public string ReturnValue(int age, string name, string sex) { return string.Format("给反射的返回值:名字:{0},年龄:{1},性别{2}", name, age, sex); } public static void PrintSex(string sex) { Console.WriteLine("这是静态的方法:{0}", sex); } } } //加载指定路径下的程序集 Assembly assembly = Assembly.LoadFile(@"F:\TestFile\AssembleTest.dll"); Assembly formAssembly = Assembly.LoadFrom(@"F:\TestFile\AssembleTest.dll"); Type types = assembly.GetType("AssembleTest.Assemble"); MethodInfo method = types.GetMethod("PrintName"); MethodInfo staticMethod = types.GetMethod("PrintSex"); //反射创建类的实例 Object obj = assembly.CreateInstance("AssembleTest.Assemble"); //需要加名称空间 //反射创建类的实例 //Activator: 在本地或从远程创建对象类型,或获取对现有远程对象的引用 Object acrivatorObj = Activator.CreateInstance(types); //注意Invoke方法的两个参数,第一个为类的实例对象如果方法是静态的,则忽略此参数,第二个为方法的参数 method.Invoke(acrivatorObj, new object[] { "Zery" }); //调用静态方法 第一个参数可以省略 staticMethod.Invoke(null, new object[] { "男" }); //获取字段值 FieldInfo field = types.GetField("name"); var value = field.GetValue(obj); Console.WriteLine("这是字段值:{0}",value);
http://www.cnblogs.com/zery/p/3385107.html
代码来源于我的这篇文章,有详细的介绍关于反射的用法。包括调用方法,取字段的值等。
谢谢
反编译之。。。。。。