_objMethod = _objAssembly.CreateInstance(_sClassName, false, BindingFlags.Default , null, 
                new object[] {txtBuildParam.Text.Split(',')}, null, null);
这句话一直报错找不到构造函数然尔如果改成调用不需要参数的构造函数却可以通过.
其中参数 txtBuildParam.Text 的内容是: "add,true,slag,true,50.5,100"
带参的构造函数是: public ClsBOFAngle(string sID1, object o1, string sID2, object o2, double dIni, int iSpeed)
请大家帮忙 .谢谢.

解决方案 »

  1.   

    IObjcet obj=(IObjcet)Activator.CreateInstance(System.Type .GetType ("命名空间.类,ActivatorExample" ),null);IObjcet obj2=(IObjcet)System.Activator .CreateInstance (System.Type .GetType ("命名空间.类,ActivatorExample" ),new string []{""});
      
      

  2.   

    public object CreateInstance(string typeName, bool ignoreCase, BindingFlags bindingAttr, Binder binder, object[] args, CultureInfo culture, object[] activationAttributes)
      

  3.   


    还是没有解决,我用提动态编译,得到的Assembly,似乎不能用Activator .CreateInstance 我这段代码报错,是因为构造函数参数的类型有 double, 和int ,
    而我所传的参数 txtBuildParam.Text.Split(',') 全为string,能有好的办法转换一下吗?
      

  4.   

    这个类并没有无参的构造函数, 只是为了测试程序,我增加了一个而已...是因为构造函数参数的类型有 double, 和int ,
    而我所传的参数 txtBuildParam.Text.Split(',') 全为string,能有好的办法转换一下吗?
      

  5.   

    你的代码里这个参数new object[] {txtBuildParam.Text.Split(',')} 写错了,这里表示只有一个参数的构造函数(参数为string[]),当然就对应不上你的那个5个参数的构造函数了。
      

  6.   

                string s1 = "add,true,slag,true,50.5,100";
                string[] str = s1.Split(',');
                _objMethod = _objAssembly.CreateInstance(_sClassName, false, BindingFlags.Default , null,
                    new object[] { str[0], new object[] { bool.Parse(str[1]) }, str[2], new object[] { bool.Parse(str[3]) }, double.Parse(str[4]), int.Parse(str[5]) }, null, null);传5个对应类型的参数进去,你再加上相应的异常处理。
      

  7.   

    自己反射找构造函数, 然后invoke。
    不用CreateInstance。应该可以。
      

  8.   

    你的参数传递有误txtBuildParam.Text.Split(',') 结果是string[]而构造函数为
    public ClsBOFAngle(string sID1, object o1, string sID2, object o2, double dIni, int iSpeed)很明显参数不全是string,所以string[]的参数系统找不相匹配的 函数签名解决方法,自己构造object[] 参数传递。可参考13楼的代码
      

  9.   

    目前有两种第一种,传统的方式,把参数封成一个对象,传递只传一个对象。参数对象可以使用工厂类完成    我的参数对象 参数对象=参数对象工厂.creat("我的参数对象");
        参数对象.公用参数生成方法("我的参数") //至于如何解析参数在对象内部自己完成
        构造函数(参数对象基类 obj)//这样把变化封装在外面就可以统一调用, 修改也只是修改自己继承过来的参数对象方法。
    第二种方式,采用IOC容器动态的直接注入方法,比如你可以使用Unity这个小型的ioc容器类  使用方式 
    Container
      .RegisterInstance<参数对象>(参数对象实例) //把参数对象实例注入容器
      .Resolve<要生成的对象类型>();//调用生成实例,这里实际等同于 new 要生成的对象类型(参数对象)
      

  10.   


    在执行CreateInstance,他不会自动会根据你所给的参数去匹配最合适的构造函数吗?但是这个类的构造函数只有一个,所有我想问问有没有方法知道 构造函数的参数类型???
      

  11.   

    type.GetConstructors()方法,可以获取所有的构造但是比较头疼的事,实际你很难知道具体调用的是谁。因为调用规则是由参数查找方法签名,而不是如你这样由方法签名去生成参数对象。(这个比较困难,因为你是string,string要转成对象要根据不同的情况去convert,去new。所以不存在一个通用的转换过程,即使是微软已经写了一个 Convert.ChangeType()方法,也不太现实,那个异常太多了,光对付异常就有的烦了)
      

  12.   

    你传递的参数 object[]{string[]}object[].Count==1找不到public ClsBOFAngle(string[])的。
      

  13.   

    谢谢 wanghui0380 告诉了GetConstructors()方法. 很适合我现在的项目 谢谢