我遇到了一个“问题”,我认为这个问题必须非常普遍,并且想知道是否有人可以提供帮助。
我正在构建一个简单的Windows窗体(使用VB.NET)供朋友在工作中使用。他的公司有大约10种特定颜色方案(它们有RGB值列表),用于公司徽标,网站等。
我想在我的应用程序中遵循这个颜色方案,为了简化开发,我想建立这些颜色的枚举,以避免为每个标签,面板等对RBG值进行硬编码。
我最初的想法是做以下事情:
Enum ColorTypes
CompanyDarkBlue = Color.FromArgB(0,56,147)
CompanyBlue = Color.FromArgB(0,111,198)
CompanyLightBlue = Color.FromArgB(0,145,201)
End Enum
然而,并不是那么简单,因为需要一个常数。我在互联网上环顾四周,找到了一个如何实现我需要的例子,但对于应用程序开发似乎是一个非常常见的要求,它似乎过于复杂。
您认为解决此问题的最佳方法是什么?
非常感谢
答案 0 :(得分:3)
您可以使用扩展方法。首先简化你的枚举:
enum ColorType
{
CompanyDarkBlue,
CompanyBlue,
CompanyLightBlue
}
扩展方法如下所示:
public static class ColorTypeExtensions
{
public static Color ToColor(this ColorType colorType)
{
switch(colorType)
{
case ColorType.CompanyDarkBlue: return Color.FromArgB(0,56,147);
...
}
}
}
这将允许你写:
ColorType.CompanyDarkBlue.ToColor();
答案 1 :(得分:3)
我不会说你需要一个枚举。当你提到“配色方案”时,通常的做法是使用多态来允许不同的配色方案。
这意味着你的界面会是这样的:
public interface IColorScheme
{
Color CompanyDarkBlue { get; }
Color CompanyBlue { get; }
Color CompanyLightBlue { get; }
}
然后以您喜欢的任何方式实现它:
public class MyColorScheme : IColorScheme
{
public virtual Color CompanyDarkBlue
{
get { return Color.FromArgB(0,56,147); }
}
public virtual Color CompanyBlue
{
get { return Color.FromArgB(0,56,147); }
}
// etc.
}
请注意,我还将这些属性设置为虚拟,因此如果您需要稍微不同的方案,则可以轻松覆盖特定颜色。
为了充分利用这种抽象,您的程序应该主要使用IColorScheme属性,而不了解正在使用的实际实现。在初始化期间,应该单独实例化适当的配色方案。
答案 2 :(得分:2)
将这些颜色放在单独的类中,并将它们作为属性而不是枚举。
public class myColor
{
public static Color CompanyDarkBlue
{
get { return Color.FromArgb(0, 56, 147); }
}
public static Color CompanyBlue
{
get { return Color.FromArgb(0, 111, 198); }
}
public static Color CompanyLightBlue
{
get { return Color.FromArgb(0, 145, 201); }
}
}
答案 3 :(得分:0)
您可以在具有共享字段/属性的类中存储相同的信息,并达到与枚举相同的效果。
不要明白为什么在这里需要枚举
答案 4 :(得分:0)
{load} add %cl,%bl # 02 d9
{store} add %cl,%bl # 00 cb