代码之家  ›  专栏  ›  技术社区  ›  Robert Davis

如何在程序中使用.NET类型的字符串?

  •  1
  • Robert Davis  · 技术社区  · 14 年前

    <configuration>
       <configSections>
          <section name="MyConfig" type="MyAssembly.MyType, MyAssembly, PublicKeyToken=null" />
       </configSections>
       ...
    </configuration>
    

    类型部分中的签名似乎在各种.NET地方都是标准化的,但我不知道如何在自己的程序中做到这一点。我用过 System.Activator 在我的程序中,但那感觉就像我在复制.NET已经做的工作。

    在编程术语中,我如何做到这一点:

    void Main()
    {
       object instance = CreateInstance("MyAssembly.MyType, MyAssembly, PublicKeyToken=null");
       Console.WriteLine(instance.GetType().Name);
    }
    
    object CreateInstance(string dotNetTypeSignature)
    {
       // Code goes here.
    }
    
    3 回复  |  直到 14 年前
        1
  •  4
  •   SLaks    14 年前

    你可以打电话给 Type.GetType method 得到一个 Type 具有给定(程序集限定)名称的对象。

    Activator.CreateInstance method 创建类型的实例。(假设类型有一个公共的默认构造函数,或者您知道它需要什么构造函数参数)。

    Activator.CreateInstance(Type.GetType(name));
    
        2
  •  0
  •   Albin Sunnanbo    14 年前

    这些部分通常是通过visualstudio设置设计器创建/访问的。

        3
  •  0
  •   Franci Penov    14 年前

    ConfigurationManager 必须从配置文件中读取实际类型,并在运行时显示它。这是使用 System.Activator 类,正如您所提到的,它是跨.Net世界执行此操作的标准方法。

    new . 但是,如果您想实现运行时扩展性,比如 配置管理器 ,您应该使用 Activator CreateInstance CreateInstanceFrom Type ,也可以从同一字符串创建。

    typeof(MyType).FullName ,或 myInstance.GetType().FullName .