c# - 使用基于枚举标志的构造函数创建对象

标签 c# .net reflection

我想创建一个基于枚举标志的对象。

这是示例代码:

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/

相关文章:

debugging - 如何在 Rust 中打印表达式及其值?

c# - CanRead 和 CanWrite 对于 PropertyInfo 意味着什么?

c# - 如何使用 Jquery 重新排序 Gridview 行?

.net - ASP.Net MVC 重定向到不同的 View

c# - 如何将多个列表项合并为一个项目?

c# - 有没有一种方法可以在 azure 函数启动后立即调用通过依赖项注入(inject)注入(inject)的类中的方法?

c# - 匿名类型可以有无参数构造函数吗?

c# - 为什么这不是自动推断的?

c# - javascript getelementbyid 问题

c# - 添加新的 ApplicationBarMenuItem 图标时无法分配给属性