繁体   English   中英

模拟静态类继承的最佳方式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM