[英]Best way to emulate inheritance of static classes
背景:我在一个库中有一个标准的字符串const
代码列表(在静态类中),它可以在多个项目之间共享,在内部和外部运行。 (这个库有一个主要功能,它不仅仅用于存储这些字符串)。 这些代码是标准化的,不应更改,存储这些值的数据库不是一个有用的解决方案。
这些列表之一是颜色。 例如,一辆车可能会使用一个基本的颜色列表,其中包括红色、黑色、蓝色、灰色等。一个人的头发颜色也可以是这些标准颜色中的任何一种,但还有其他选项 - 例如金发 -不适用于不是头发的东西。
当使用这个库,我想用StandardCodes.Colors.Black
车辆和StandardCodes.Person.HairColors.Black
的发色。 因为 black 的字符串总是"BLK - Black"
,所以我不想为每个使用它的类重复多次。 在寻找黑色头发时,我希望从StandardCodes.Person.HairColors.
开始StandardCodes.Person.HairColors.
并让Black
作为一个选项出现。 如果没有,我(或其他人)将不得不知道在StandardCodes.Colors
查找它,这并不理想。
对于使用继承HairColors
,这似乎是一个简单的案例 - HairColors
,并且类似EyeColors
列表将从Colors
派生。
此结构的示例:
public static class StandardCodes
{
public static class Colors
{
public const string Black = "BLK - Black";
public const string Gray = "GRY - Gray";
public const string White = "WHI - White";
}
public static class Person
{
public static class HairColors : Colors
{
public const string Blonde = "BLN - Blond or Strawberry";
public const string Sandy = "SDY - Sandy";
}
}
}
当然,问题在于静态类不能从其他类派生。
最好使这些类不是静态的并隐藏构造函数吗? 还是有另一种更好的方法来实现这一目标?
您可以在层次结构的路径上有一个static
类,然后为属性创建一个实例。 像这样的东西:
public static class StandardCodes
{
public static Colors Colors = new Colors();
public static class Person
{
public static HairColors HairColors = new HairColors();
}
}
public class Colors
{
public readonly string Black = "BLK - Black";
public readonly string Gray = "GRY - Gray";
public readonly string White = "WHI - White";
}
public class HairColors : Colors
{
public readonly string Blonde = "BLN - Blond or Strawberry";
public readonly string Sandy = "SDY - Sandy";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.