C#从类型创建类的实例

时间:2014-11-01 14:23:42

标签: java c# reflection .net-assembly

我正在努力获得此功能:

Class<?> c = Class.forName(dir.substring(6).replaceAll("/", ".") 
                       + file.getName().replaceAll(".java", ""));
Packet packet = (Packet)c.newInstance();

对于任何熟悉它的人来说,上面的代码是Java,它从一个目录中获取类,然后创建一个它的实例,这就是我在C#中尝试做的事情

我已经知道了这一点,现在我被卡住了......

  foreach(Type t in assembly.GetTypes())
  {
        if (t.BaseType == typeof(Packet))
        {

基本上我需要找到一种从Type构造类的方法,然后创建它的一个实例。

我尝试过使用Activator,如下所示:

foreach(Type t in assembly.GetTypes())
{
      if (t.BaseType == typeof(Packet))
      {
           string namespaceName = t.Namespace;
           string className = t.Name;
           var myObj = Activator.CreateInstance(namespaceName, className);

但我无法弄清楚如何将其作为类而不是ObjectHandle

引用

2 个答案:

答案 0 :(得分:4)

  

基本上我需要找到一种从Type构造类的方法,然后创建它的实例。

Type 一个类(或结构等)。获得适当的Type后,可以使用各种方法对其进行实例化...例如,Activator.CreateInstance()或调用Type.GetConstructors(),找到正确的构造函数然后{{ 3}}它。

所有这些方法都会返回object,因此您需要投射:

Packet packet = (Packet) Activator.CreateInstance(type);

答案 1 :(得分:1)

您好像在寻找Activator.CreateInstance方法

var instance = Activator.CreateInstance(type);