您的位置:程序门 -> .net技术 -> c#



c# 关于反射时构造函数的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


c# 关于反射时构造函数的问题
发表于:2007-06-17 08:54:35 楼主
我在调用dll时出现这样的问题   请看代码:
aaa.dll:
using   system;
using   system.reflection;     //程序集
using   system.threading;

namespace   cheshidll
{
      public   class1(object   send)
      {
              //省略代码
      }
      public   obj   receivemomessage(object   obj)
      {
              //省略代码
      }

}
调用
dss   =   assembly.loadfile(@ "d:、aaa.dll);//读取程序集
foreach(type   dsstype   in   dss.gettypes())
{
      type[]   chanshu=new   type[1]{typeof(object)};
      constructorinfo   ci=dsstype.getconstructor(chanshu);
      object[]   ts=new   object[1];
      ts[0]=new   sendsms();
      user=ci.invoke(ts);
      methodinfo   m=user.gettype().getmethod( "receivemomessage ");
      m.invoke(activator.createinstance(user.gettype()),new   object[]   {momsg});
}
在   m.invoke(activator.createinstance(user.gettype()),new   object[]   {momsg});
这句出现   "没有为该对象定义无参数的构造函数。 "提示
请问我应该怎么做?
发表于:2007-06-18 14:46:131楼 得分:0
每人知道吗?
发表于:2007-06-18 14:53:592楼 得分:0
activator.createinstance会调用dll中类的构造函数,如果你的类里面没有提供无参的构造函数,当然会出错。createinstance有很多个重载方法,应该在user.gettype(),后面加上你的构造函数的参数,系统会找到和你所列出的参数最匹配的类构造函数调用。
发表于:2007-06-18 14:54:363楼 得分:0
与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果   args   为空数组或空引用,则调用不带任何参数的构造函数(默认构造函数)。
以上是msdn中的,你明白你那里错了吧!
发表于:2007-06-18 15:24:184楼 得分:0
反射只能调用无参数构造函数   创建实例.
若类里面要外部传进去的变量,只有在类里面在加一个公用的方法或写属性,
然后调用   invoke   方法执行传进去.
如下:
assembly   _assembly   =   assembly.load( "程序集名 ");
type   _type   =   _assembly.gettype( "完整类名 ");
form   _form   =   (form)activator.createinstance(_type);
system.reflection.eventinfo   _eventinfo   =   _type.getevent( "removeformhandler ");

_eventinfo.addeventhandler(_form,   new   com.psi.uibase.removeformdelegate(removeform));

system.reflection.fieldinfo   _fieldinfosys   =   _type.getfield( "m_sysdataset ");
_fieldinfosys.setvalue(_form,   this.m_tabledataset);

_form.show()
发表于:2007-06-18 15:37:255楼 得分:0
user.gettype().getmethod( "receivemomessage ");
根据名称来查找所要的方法不是什么好做法。为什么不用接口?
如果构造函数必须要有参数的话,怎么可能不给参数而创建一个对象呢?该怎么办只有你自己最清楚。


快速检索

最新资讯
热门点击