使用类名创建类的编程建议

时间:2012-05-18 19:20:32

标签: c# createinstance

好的,我已经搜索并看到了一些关于如何使用其名称创建类的问题。我的问题不太一样,所以无论如何我都会问它。

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

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

但这看起来很奇怪。我想动态地这样做,所以我想做Activator.CreateInstance,但不确定它是否是好的编程,因为当你远程加载程序集时似乎使用了“CreateInstance”。就我而言,一切都在一个项目中。

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

2 个答案:

答案 0 :(得分:2)

如果您想要通过名称创建的课程数量有限(例如您的示例中有2个不同的课程),我更喜欢使用“switch”的方式

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

因为它更快更安全(如果类的名称来自外部服务,想象一下如果此服务发送恶意类名称会发生​​什么)。

否则Activator.CreateInstance不会出现任何问题,但请确保您彻底验证输入。

答案 1 :(得分:1)

这是使用Factory Method模式的完美案例。

http://www.dofactory.com/Patterns/PatternFactory.aspx