我想创建一个基于枚举标志的对象。
这是示例代码:
public class Program
{
static void Main(string[] args)
{
var workflowBasic = new WorkflowBasic(WorkflowFlag.One);
if (workflowBasic.Flag == WorkflowFlag.One)
{
// create WorkflowOne workflow
}
else if (workflowBasic.Flag == WorkflowFlag.Two)
{
// create WorkflowTwo workflow
}
// TODO: rest action on created variable
}
}
public class WorkflowOne
{
public int Count { get; set; }
public WorkflowOne(int count)
{
Count = count;
}
}
public class WorkflowTwo
{
public int Count { get; set; }
public WorkflowTwo(int count)
{
Count = count;
}
}
public class WorkflowBasic
{
public WorkflowFlag Flag { get; set; }
public WorkflowBasic(WorkflowFlag flag)
{
Flag = flag;
}
}
public enum WorkflowFlag
{
One = 1,
Two = 2
}
因此,对于 WorkflowFlag.One,它应该创建 WorkflowOne 对象,对于 WorkflowFlag.Two,它应该创建 WorkflowTwo。
此外,我只想创建一个变量,因此我不想创建某种:
if (workflowBasic.Flag == WorkflowFlag.One)
{
var objectTest = new WorkflowOne(1);
}
else if (workflowBasic.Flag == WorkflowFlag.Two)
{
var objectTest = new WorkflowTwo(2);
}
如果有不清楚的地方,请告诉我。
最佳答案
您所描述的要求被称为 "abstract factory" design pattern .您可以将枚举提供给抽象工厂,它会返回相关的工作流对象。
您可能会发现您的工作流程属于 "strategy" design pattern 的情况。我建议他们都应该实现一个通用接口(interface)。
有很多方法可以实现这一点。一个示例是创建一个以枚举值作为参数的属性。使用相关枚举将此属性附加到每个工作流类。然后,抽象工厂可以使用反射来查找实现工作流接口(interface)并且还具有具有所需枚举值的属性的类。
我建议添加单元测试以确保每个枚举值都有实现。
关于c# - 使用基于枚举标志的构造函数创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50083985/