【问题标题】:Activator.CreateInstance with type name as string and including parametersActivator.CreateInstance,类型名称为字符串并包含参数
【发布时间】:2014-08-14 13:11:06
【问题描述】:

我在 .Net 3.5 中工作,查看 Activator.CreateInstance 的所有各种构造函数。我想创建一个类的实例,调用一个特定的构造函数。我没有类类型,只有它的名称。我有以下内容,它有效,但实际上首先调用无参数构造函数,然后是我想要的。这没什么大不了的,但是无参数构造函数调用了一个相当繁忙的基本构造函数,而我要调用的构造函数也是。

也就是说,给定一个类型,带参数调用 CreateInstance 很简单(只有下面的最后两行),但是只给一个类型名称,还有比这更好的方法吗?

ObjectHandle oh = Activator.CreateInstance( "MyDllName", "MyNS." + "MyClassName" );
object o = oh.Unwrap( );
object newObj = Activator.CreateInstance( o.GetType( ), new object[] { param1 } );
return ( IMyDesiredObject )newObject;

谢谢!

【问题讨论】:

    标签: c#


    【解决方案1】:

    您可以使用CreateInstance 的重载。它允许您通过名称(字符串)以及构造函数参数(第 6 个参数)来指定类型。

    【讨论】:

    • 谢谢你,Reed -- 我看到了那个人,但我不知道如何处理 ActivationAttributes 和 SecurityInfo。文档没有表明(与 Binder 和 Culture 一样)它们可以为空,但事实证明它们可以。为我工作!
    【解决方案2】:

    我能够让它工作的方式是

      Type type = BuildManager.GetType(ServiceRef + ".SDK",false);
    
      Object nl = Activator.CreateInstance(type);
    

    BuildManager.GetType 需要完全限定的类名,在您的情况下,这是您传递“MyNS”的地方。 + "我的班级名称"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-20
      • 2016-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-25
      相关资源
      最近更新 更多