在C#中从程序集中键入实例化

时间:2012-09-04 08:40:41

标签: c# reflection types

是否可以做这样的事情?

  1. 创建一个类并将其放入程序集中,例如

    namespace some
    {
        public class foo{
            ..etc
    }
    
  2. 将其加载到当前的appdomain

    Assembly.LoadFrom("some.foo.dll");
    
  3. 获取输出

    Type t = Type.GetType("some.foo");
    
  4. 基本上,无论如何都要将实际类型转换为t?

3 个答案:

答案 0 :(得分:1)

我不确定我是否理解这个问题。我想你想要实例化这个类型。

这会调用公共默认构造函数:

// specify the full name and assembly name, to make sure that you get the some.foo
// from the assembly in question.
Type t = Type.GetType("some.foo, some.foo");
object instance = Activator.CreateInstance(t);

查看重载以调用其他构造函数。

答案 1 :(得分:1)

您可以使用反射来实例化对象。例如,要使用默认构造函数进行实例化:

Type.GetType("Foo").GetConstructor().Invoke();

要使用带字符串的构造函数进行实例化,请使用:

Type.GetType("Foo").GetConstructor(new[] { typeof(string) }).Invoke(new [] { "bar" });

答案 2 :(得分:0)

var assembly = Assembly.LoadFrom("SomeAssembly.dll");
assembly.GetType("SomeType");