public class Class2
{
public void e(object _a)
{
object o;
Class3 x;
x=(Class3)o;
Console.WriteLine("转换成功");
}
}
public class Class3
{
public string Name;
public Class3()
{
Name="MyClass";
}
}
//程序入口
class Class1
{
static void Main(string[] args)
{
object[] myarray=new object[1];
myarray[0]=new Class3();
Assembly ass=Assembly.LoadFrom("e:\\Class1.dll");
object oo=ass.CreateInstance("C1.Class2"); Type mytype=ass.GetType("C1.Class2");
MethodInfo mi=mytype.GetMethod("e");
mi.Invoke(oo,myarray);
Console.ReadLine();
}
}我用反射调用Class2的方法e,需要传入一个Class3类型的对象,我试了很多次
1、如果我定义e方法的时候,直接写public void e(object _a),就出现参数不相符错误
2、如果我写成现在这样,public void e(object _a),然后在方法体内强制转换成Class3类型,就出现转换类型错误。请问:在需要传入自定义类型的对象的时候,应该如何处理?
{
public void e(object _a)
{
object o;
Class3 x;
x=(Class3)o;
Console.WriteLine("转换成功");
}
}
public class Class3
{
public string Name;
public Class3()
{
Name="MyClass";
}
}
//程序入口
class Class1
{
static void Main(string[] args)
{
object[] myarray=new object[1];
myarray[0]=new Class3();
Assembly ass=Assembly.LoadFrom("e:\\Class1.dll");
object oo=ass.CreateInstance("C1.Class2"); Type mytype=ass.GetType("C1.Class2");
MethodInfo mi=mytype.GetMethod("e");
mi.Invoke(oo,myarray);
Console.ReadLine();
}
}我用反射调用Class2的方法e,需要传入一个Class3类型的对象,我试了很多次
1、如果我定义e方法的时候,直接写public void e(object _a),就出现参数不相符错误
2、如果我写成现在这样,public void e(object _a),然后在方法体内强制转换成Class3类型,就出现转换类型错误。请问:在需要传入自定义类型的对象的时候,应该如何处理?
解决方案 »
- gridview 配置数据源的时候,怎么没有指定来自表或视图的列那一项?
- 研究的小程序中,发现这样的一个问题,不太问弄.
- 如何查看类库中某个类的具体实现过程的源代码?"转到定义"只能看到这些
- 连接access出错,找不到可安装的ISAM
- 打开一个服务器监听一个端口
- 请教,C#由vs2003 升到 vs2005 上后, 代码是否有不同的写法,具体是哪些不同?
- 请教一个问题,软件设计师(高级程序员)考试报名费要多少钱?
- 男的声音变成女的声音
- 如何制作像.net本身那样的帮助系统?
- WSDK问题:怎么获得加密签名后的XML消息?
- ACCESS与NET链接问题
- .net中如何执行一个*.bat批处理文件,就像直接直行一个exe文件一样?
是不是抄错了
public void e(object _a)
{
object o;//o怎么没值,会不会是o=_a
Class3 x;
x=(Class3)o;
Console.WriteLine("转换成功");
}
还有你的主程序改一下:
static void Main(string[] args)
{
object[] myarray=new object[]{(object)(new Class3())};//因为你的方法e参数是object的,C#是强类型语言,不会自动帮你转化
Assembly ass=Assembly.LoadFrom("e:\\Class1.dll");
object oo=ass.CreateInstance("C1.Class2"); Type mytype=ass.GetType("C1.Class2");
MethodInfo mi=mytype.GetMethod("e");
mi.Invoke(oo,myarray);
Console.ReadLine();
}
这里的确应该是o=_a至于把Class3的对象强制转化成object类型,我试了一下,不强制转化也没出错。不过我以后会注意的。不过参数传递的问题还是老样子。我试了一下,如果方法e接收的是framework类库里的类,这样传入类的对象作为参数都不出错。但如果传入的是自定义类的对象,就总是出错。究竟是为什么么呢?
的确需要.
另外
Assembly ass=Assembly.LoadFrom("e:\\Class1.dll");
//Class1.dll是什么?应该改为你这个程序输出的.exe文件
Type mytype=ass.GetType("C1.Class2");要改为
Type mytype =oo.GetType();
修改后经测试成功..LZ试试
namespace ConsoleApp
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
object[] myarray=new object[1];
myarray[0]=new Class3();
//你把字符串改为你的项目生成文件
Assembly ass=Assembly.LoadFrom(@"E:\Developer\Panpipe\ConsoleApp\bin\Debug\ConsoleApp.exe");
object oo=ass.CreateInstance("ConsoleApp.Class2");//此符串改为你的,c1.Class2
Type mytype =oo.GetType();//此处你要修改为这样
MethodInfo mi=mytype.GetMethod("e");
mi.Invoke(oo,myarray);
Console.ReadLine();
}
}
public class Class2
{
public void e(object _a)
{
object o=_a;//添加
Class3 x;
x=(Class3)o;
Console.WriteLine("转换成功");
}
}
public class Class3
{
public string Name;
public Class3()
{
Name="MyClass";
}
}
}
有问题速回复,并发个短消息
可是按道理,Class1是不知道Class2的代码,我的class1.dll文件就是把class2.cs和class3.cs打包编译的dll文件。
将Assembly ass=Assembly.LoadFrom(@"E:\Developer\Panpipe\ConsoleApp\bin\Debug\ConsoleApp.exe");改为 Assembly ass=typeof(Class2).Assembly;
另外object oo=ass.CreateInstance("ConsoleApp.Class2");//此符串要对你的DLL中类的相应名空间和类名,你的应该是c1.Class2吧