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

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

Как так:

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);

Вы могли также сделать "Константы" - класс неравнодушный...

17
задан Michael Damatov 31 May 2010 в 20:25
поделиться

3 ответа

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

√ ИСПОЛЬЗУЙТЕ вложенные типы, когда отношения между вложенным типом и его внешним типом таковы, что семантика доступности членов желательна.

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

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

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

18
ответ дан 30 November 2019 в 13:33
поделиться

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

3
ответ дан 30 November 2019 в 13:33
поделиться

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

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";
    }
}
1
ответ дан 30 November 2019 в 13:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: