我有一个程序我写的是一个有大约15个输入的表格,它描述了我们制造的机器类型(型号,长度,宽度,高度,电机类型,颜色等)。这台机器有12种不同型号,所以我有一个子类"机器"然后是12个继承"机器类"的独立类。在我的表单中,用户选择的输入之一是模型。我试图找出一种方法将15个项目传递给特定的"模型"类字段,无需使用案例/开关输出12次(基于选择的模型)。有没有办法将输入传递给父类,然后当您确定需要创建哪个特定类时,引用存储在父类中的数据?我希望我说的是有道理的。我正在努力描述这种情况。如果我能提供更多信息,请告诉我!
谢谢!
答案 0 :(得分:3)
我建议你编写一个界面,让我们说一下像IMachineModel这样的方法/属性。编写与您拥有的模型一样多的类,并实现以前创建的接口。
在每个具体类中提供所需的逻辑。然后,您只需要实例化合适的类,并使用从接口实现的属性和方法。
快速示例:
public class FirstConcreteMachineModel : IMachineModel
{
public string Model { get; set; }
public void DoSomething()
{
Console.WriteLine("I am a machine of type 1");
}
}
public class SecondConcreteMachineModel : IMachineModel
{
public string Model { get; set; }
public void DoSomething()
{
Console.WriteLine("I am a machine of type 2");
}
}
public class MachineModelFactory
{
public static IMachineModel CreateMachineModel(string type)
{
//switch with all possible types
switch (type)
{
case "one":
return new FirstConcreteMachineModel { Model = type };
case "two":
return new SecondConcreteMachineModel { Model = type };
default:
throw new ArgumentException("Machine type not supported");
}
}
}
然后你就可以使用它:
IMachineModel machine = MachineModelFactory.CreateMachineModel("two");
machine.DoSomething();
会打印
我是2型机器。
答案 1 :(得分:1)
要添加到Areks的答案 - 您可以创建一个工厂,给定输入返回一个实现IMachineModel的类....在内部,您有许多选项来确定具体类,包括您的开关声明或责任链