2012-05-18 30 views
1

好的,我搜索了一下如何使用它的名字创建一个类的问题。我的问题并不完全相同,所以我会反问。关于使用类名创建类的编程建议

我的应用程序有2个类,比如说“A”和“B”。在另一个类中,我需要使用这两个类(第三个类由外部服务调用)。外部服务只会将两个“A”和“B”类的名称作为字符串传递给我。在第三节课中,我知道我可以做这样的事情:

case "A": 
    create an instance of A 
case "B": 
    create an instance of B 

但这似乎很奇怪。我想动态地做到这一点,所以我正在考虑做Activator.CreateInstance,但不知道它是否是好的编程,因为在远程加载程序集时似乎使用了“CreateInstance”。就我而言,一切都在一个项目中。

有什么建议吗?非常感谢!

+7

'Activator.CreateInstance'既大量使用由框架,和高度优化。它的使用没有任何问题。 –

+2

怪异的情况“A”:你提到的create instance [*]也被称为工厂设计模式(可能结构不如它应该是的,但你可以使用'switch/case') 。你可以在这里阅读这个模式:http://dofactory.com/Patterns/PatternAbstract.aspx和这里:http://www.codeproject.com/Articles/68670/The-Factory-Pattern – MilkyWayJoe

+0

谢谢你的链接 –

回答

2

如果您希望通过自己的名字创建类数量是有限的(在你的例子如2类不同),我更愿意用“开关”

public object ClassFactory(string ClassName) 
{ 
    switch(ClassName) 
    { 
     case "A": return new A(); 
     case "B": return new B(); 
    } 
} 

的方式,因为它是速度更快并且更安全(如果班级名称来自外部服务,想象会发生什么,如果此服务发送恶意班级名称)。

否则Activator.CreateInstance不应该有任何问题,但请确保您彻底验证输入。

+0

我认为这会更快,但不够优雅。我仍然是一名初级程序员,并试图学习一些专家的良好技能。谢谢。 –