1

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

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

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

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

有什么建议吗?太感谢了!

4

2 回答 2

2

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

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

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

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

于 2012-05-18T19:39:35.250 回答
1

这是使用工厂方法模式的完美案例。

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

于 2012-05-18T19:51:38.350 回答