替代设计模式中的枚举

Neggenbe

考虑base具有以下enum类型的基座组件的情况

public enum ItemState = { red, green, blue };

我在其他程序集中使用了这个基本程序集Project_1Project_2依此类推。

他们每个人都做一些特定的事情,并且需要特定{grey, black, white, ...}项目的状态,例如inProject_1{brown, transparent, ...}in Project_2

Project_1不允许使用(如果可能,甚至请参阅){brown, transparent, ...}同样,Project_2不能使用{grey, black, white, ...}

我知道“部分枚举”不存在-那么这种任务的建议设计模式是什么?

时报

我有点迟了,但是这里是Rene回答的“增强”版本(现在带有隐式强制转换!):

public class ColorEnum
{
    protected readonly string Name;
    protected readonly Color Value;

    public static readonly ColorEnum Red = new ColorEnum(Color.Red, "Red");
    public static readonly ColorEnum Green = new ColorEnum(Color.Green, "Green");
    public static readonly ColorEnum Blue = new ColorEnum(Color.Blue, "Blue");

    protected ColorEnum(Color value, string name)
    {
        Name = name;
        Value = value;
    }

    public override string ToString()
    {
        return Name;
    }

    public static implicit operator Color(ColorEnum @enum)
    {
        return @enum.Value;
    }

    public static implicit operator string(ColorEnum @enum)
    {
        return @enum.Name;
    }
}

public class AnotherColorEnum : ColorEnum
{
    public static readonly ColorEnum Grey = new AnotherColorEnum(Color.Gray, "Grey");
    public static readonly ColorEnum Black = new AnotherColorEnum(Color.Black, "Black");
    public static readonly ColorEnum White = new AnotherColorEnum(Color.White, "White");

    protected AnotherColorEnum(Color value, string name) : base(value, name)
    {
    }
}

这样,您可以像这样使用“枚举”:

    var color = ColorEnum.Red;
    var anothercolor = Color.Red;
    if (color == anothercolor)
    {
            //DoSomething
    }

或像这样:

    var color = ColorEnum.Red;
    var anothercolor = "Red";
    if (color == anothercolor)
    {
            //DoSomething
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章