0

我想要这样的魔法发生……

class SomeClass {}

public static void main()

    MagicFunctionOrMacrosOrSomethingThatGetTypeOf("SomeClass") some_var = null;<br />
}

也许这很疯狂,但有可能吗?
我需要它来避免疯狂的大型 switch 案例,因为有很多类,但在某些代码点无法分辨要创建哪些类。

举个例子:
我有基类:
class baseCLASS {}

有很多子类:
class class1 : baseCLASS {}
class class2 : baseCLASS {}
...
class classn : baseCLASS {}

有一些从外部到事件处理程序的标志:
string class_name; //实际上我使用了应该与字典中的字符串名称连接的 int 标志。

不得不这样做:

   switch(class_name)

   case "class1":
      class1 some_class = new class1();
      some_class.RunHandler();
      break;
   case "class2":
      class2 some_class = new class2();
      some_class.RunHandler();
      break;
   case "classn":
      classn some_class = new classn();
      some_class.RunHandler();
      break;
   }


我想用这样的东西替换那个大的 switch 语句:

MagicFunctionOrMacrosOrSomethingThatGetTypeOf(class_name) some_var = null;
... some initialization actions with some_var
some_var.Build();
some_var.RunHandler();

天啊...

4

1 回答 1

0

你有两个问题:

  1. 给定用户输入,您希望实例化一个不同类的对象。为此,您需要用户输入和 .NET 类型名称之间的映射。第一个:您可以使用约定——确保类型名称与输入匹配;或者您可以使用Dictionary<string,type>, 并填充它;或者您可以为每个类附加一个属性,显示它处理的“动词”。完成此操作后,您可以使用Activator.CreateInstance(在运行时)创建未知类的实例。这返回object
  2. 在未知对象上调用方法。为类(例如IRunnable或其他东西)定义基类或公共接口,或者使用dynamic,它可以让您输入鸭子。
于 2012-02-05T19:09:30.790 回答