使用基于类名的反射在同一个.dll中实例化一个类?

时间:2010-12-22 16:01:15

标签: c# reflection

这应该很简单,但我无法找到告诉我如何做到这一点的任何地方。我有一个课程,它和我用来做同样的dll。

我想做的就是。

thing.InstanceClass("ClassName");

我想这样做而不做:

Assembly testAssembly = Assembly.LoadFile(@"c:\Test.dll");

这是因为我想使用反射实例化的类在同一个程序集中。

3 个答案:

答案 0 :(得分:5)

Type instanceType = Type.GetType("SomeNamespace.SomeType");
object instance = Activator.CreateInstance(instanceType);

如果程序集已加载到AppDomain中,您可以通过Type.GetType(...)解决它。

如果您需要程序集,可以使用Assembly.GetEntryAssembly,或者typeof(SomeType).Assembly,其中SomeType位于目标程序集中。

答案 1 :(得分:0)

我相信System.Activator.CreateInstance是您寻求的框架方法。

答案 2 :(得分:0)

如果项目中已知(引用,而不是COM等)类型,那么最好的方法是使用强类型CreateInstance函数:

MyClass instance = Activator.CreateInstance<MyClass>();

由于没有装箱/拆箱,这将节省很多性能成本。