Использование вложенных классов для констант?

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

Так же:

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"...

Ответы

Ответ 1

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

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

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

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

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

Ответ 2

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

Ответ 3

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

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";
    }
}