Могут ли быть частные методы расширения?

Позволять'скажем, у меня есть потребность в простом частном вспомогательном методе, и интуитивно в коде это будет иметь смысл как метод расширения. Есть ли способ инкапсулировать этот помощник в единственный класс, который действительно нуждается в его использовании?

Например, я пытаюсь это:

class Program
{
    static void Main(string[] args)
    {
        var value = 0;
        value = value.GetNext(); // Compiler error
    }

    static int GetNext(this int i)
    {
        return i + 1;
    }
}

Компилятор неувидеть" GetNext() метод расширения. Ошибка:

Метод расширения должен быть определен в неуниверсальном статическом классе

Достаточно справедливо, поэтому я обертываю его в свой собственный класс, но все же инкапсулирую в объекте, к которому он принадлежит:

class Program
{
    static void Main(string[] args)
    {
        var value = 0;
        value = value.GetNext(); // Compiler error
    }

    static class Extensions
    {
        static int GetNext(this int i)
        {
            return i + 1;
        }
    }
}

Все еще нет игры в кости. Теперь ошибка гласит:

Метод расширения должен быть определен в статическом классе верхнего уровня; Расширения - это вложенный класс.

Есть ли веская причина для этого требования? Существуют случаи, когда вспомогательный метод действительно должен быть инкапсулирован в частном порядке, и есть случаи, когда код намного чище и более читабелен / поддерживается, если вспомогательный метод является методом расширения. Для случаев, когда эти два пересекаются, могут ли оба быть удовлетворены, или мы должны выбрать один над другим?

Ответы на вопрос(5)

Ваш ответ на вопрос