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

问题描述 投票:0回答:1

Background:我在库中有一个字符串const的标准代码列表(在静态类中),可以在多个项目中共享,可以在内部和外部运行。 (该库具有一个主要功能,不仅用于存储这些字符串)。这些代码是标准化的,不应更改,并且存储这些值的数据库不是有用的解决方案。

这些列表之一是颜色。例如,车辆可能会使用基本的颜色列表,包括红色,黑色,蓝色,灰色等。人的头发颜色也可以是这些标准颜色中的任何一种,但还有其他选择-例如金发-不适用于不是头发的东西。

[使用该库时,我想将StandardCodes.Colors.Black用于车辆,将StandardCodes.Person.HairColors.Black用于染发。因为黑色的字符串始终为"BLK - Black",所以我不想为每个使用它的类重复多次。当寻找黑色的头发时,我希望以StandardCodes.Person.HairColors.开头,并且可以选择Black。如果没有,我(或另一个人)将不得不知道要查找StandardCodes.Colors,这是不理想的。

这似乎是使用继承的简单情况-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";
        }
    }
}

当然,问题是静态类不能从其他类派生。

最好使这些类不是静态的并隐藏构造函数吗?还是有另一种更好的方法来做到这一点?

c# inheritance static-classes
1个回答
0
投票

您可以在层次结构的路由处具有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 const string Black = "BLK - Black";
        public const string Gray  = "GRY - Gray";
        public const string White = "WHI - White";
    }

    public class HairColors : Colors
    {
        public const string Blonde = "BLN - Blond or Strawberry";
        public const string Sandy  = "SDY - Sandy";
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.