考虑base
具有以下enum
类型的基座组件的情况
public enum ItemState = { red, green, blue };
我在其他程序集中使用了这个基本程序集Project_1
,Project_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] 删除。
我来说两句