Как я могу вызывать служебные методы статически с цепочкой классов? - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть решение с «общим» проектом. Этот «общий» проект используется другими проектами в решении.

В этом «общем» проекте у меня есть папка «Утилиты» с несколькими различными классами утилит, например, «CsvUtilities.cs» и « JsonUtilities.cs». Предположим, что у меня может быть много таких классов, и что все методы в этих классах являются чистыми функциями. Исходя из этого, было бы разумно, чтобы эти классы и методы имели статус c. Затем из других проектов я могу импортировать общий проект и делать такие вещи:

CsvUtilities.StaticCsvMethod();
JsonUtilities.StaticJsonMethod();

Это работает, и я думаю, что это относительно нормально.

Теперь сложность заключается в том, что я хочу создать иерархическая структура для доступа к утилитам stati c. Я хочу быть в состоянии напечатать "Утилиты". в IDE и intellisense покажите все существующие служебные классы, за которыми следуют все методы в этом служебном классе.

Итак, код, который я хочу, выглядел бы так:

Utilities.Csv.StaticCsvMethod();
Utilities.Json.StaticJsonMethod();

Я реализовал это Идея заключается в следующем:

public static class Utilities
{
    public static CsvUtilities Csv { get; } = new CsvUtilities();
    public static JsonUtilities Json { get; } = new JsonUtilities();
}

Тем не менее, есть большая проблема с этим решением. Чтобы это работало, различные служебные классы и их методы больше не должны быть stati c, что неудобно для служебных классов / методов.

Мне не удалось найти пример того, как кто-то делает что-то вроде это. Какой самый разумный способ для меня использовать эту «Утилиту». структура, сохраняя при этом служебные классы / методы stati c?

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Вы можете использовать пространства имен (или вложенные классы) для вложения ваших вызовов таким образом. См. Следующий пример

namespace Utilities
{
    public static class Json
    {
        public static void StaticJsonMethod()
        {
            // Do something
        }
    }
}

. Вы можете вызвать этот метод, используя Utilities.Json.StaticJsonMethod().

. Чтобы добавить другой уровень, вы просто добавляете «категорию» к пространству имен:

namespace Utilities.Formats
{
    public static class Json
    {
        public static void StaticJsonMethod()
        {
            // Do something
        }
    }
}

Вы можете вызвать этот метод, используя Utilities.Formats.Json.StaticJsonMethod()

0 голосов
/ 27 февраля 2020

Вы можете иметь Utilities.Json.StaticJsonMethod();, если вы вложите данные c класс Json внутри Utilities

public static class Utilities 
{
    public static class Json
    {
         public static void StaticJsonMethod() { }
    }
}
...