Использование вложенных классов для констант? - PullRequest
17 голосов
/ 31 мая 2010

Что не так с использованием вложенных классов для группировки констант?

Вроде так:

public static class Constants
{
    public static class CategoryA
    {
        public const string ValueX = "CatA_X";
        public const string ValueY = "CatA_Y";
    }
    public static class CategoryB
    {
        public const string ValueX = "CatB_X";
        public const string ValueY = "CatB_Y";
    }
}

Используется так:

Console.WriteLine(Constants.CategoryA.ValueY);
Console.WriteLine(Constants.CategoryB.ValueX);

Вы также можете сделать класс "Constants" частичным ...

Ответы [ 3 ]

19 голосов
/ 31 мая 2010

Существует некоторое руководство (обновлено для fx 4.5) для открытых вложенных классов:

√ НЕ используйте вложенные типы, когда взаимосвязь между вложенным типом и его внешним типомтак что семантика доступности членов желательна.

X ИЗБЕГАЙТЕ публично открытых вложенных типов.Единственное исключение - это если переменные вложенного типа необходимо объявлять только в редких сценариях, таких как создание подклассов или другие сценарии расширенной настройки.

X НЕ используйте вложенные типы, если на тип, вероятно, ссылаются снаружисодержащего типа.

Я думаю, что ваш пример соответствует первому пункту (то есть: вы хороши).

4 голосов
/ 31 мая 2010

Кто сказал, что это неправильно? Константы могут быть (и определены) в любом месте иерархии классов.

2 голосов
/ 01 июня 2010

Не говорю, что то, что вы сделали, неправильно, а как насчет использования пространств имен вместо этого:

namespace Constants
{
    public static class CategoryA
    {
        public const string ValueX = "CatA_X";
        public const string ValueY = "CatA_Y";
    }
    public static class CategoryB
    {
        public const string ValueX = "CatB_X";
        public const string ValueY = "CatB_Y";
    }
}
...