C# 关于使用类名创建类的编程建议

C# 关于使用类名创建类的编程建议,c#,createinstance,C#,Createinstance,好的,我已经搜索并看到了一些关于如何使用其名称创建类的问题。我的问题不太一样,所以我还是要问 我的应用程序有两个类,比如“A”和“B”。在另一个类中,我需要使用这两个类(第三个类由外部服务调用)。外部服务只将两个“A”和“B”类的名称作为字符串传递给我。在第三节课上,我知道我可以做如下事情: case "A": create an instance of A case "B": create an instance of B 但这似乎很奇怪。我想动态地执行它,所以我考虑执行Ac

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

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

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


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

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

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


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

这是使用Factory方法模式的最佳情况


Activator.CreateInstance
被框架大量使用,并且被大量优化。它的使用没有问题。你提到的奇怪的案例“A”:创建实例[…]也被称为工厂设计模式(可能没有它应有的结构好,但是你可以使用
switch/case
)。你可以在这里阅读这个模式:这里:除了上面的链接,值得一提的是,如果你经常遇到这个模式,你可能需要研究一个控制框架的反转,比如Spring.NET、Castle Windsor或StructureMap。我认为它也会更快,但并不优雅。我还是一名初级程序员,正在努力学习一些专家的优秀技能。非常感谢。
public object ClassFactory(string ClassName)
{
    switch(ClassName)
    {
        case "A": return new A();
        case "B": return new B();
    }
}