Kann es private Erweiterungsmethoden geben?

Angenommen, ich benötige eine einfache private Hilfsmethode, und intuitiv im Code wäre dies als Erweiterungsmethode sinnvoll. Gibt es eine Möglichkeit, diesen Helfer in die einzige Klasse einzuschließen, die ihn tatsächlich verwenden muss?

Zum Beispiel versuche ich Folgendes:

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

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

Der Compiler "sieht" das nichtGetNext() Erweiterungsmethode. Der Fehler ist:

Die Erweiterungsmethode muss in einer nicht generischen statischen Klasse definiert werden

Fair genug, also wickle ich es in eine eigene Klasse ein, aber immer noch in das Objekt eingekapselt, zu dem es gehört:

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

Immer noch keine Würfel. Der Fehler besagt nun:

Die Erweiterungsmethode muss in einer statischen Klasse der obersten Ebene definiert werden. Extensions ist eine verschachtelte Klasse.

Gibt es einen zwingenden Grund für diese Anforderung? Es gibt Fälle, in denen eine Hilfsmethode wirklich privat gekapselt werden sollte, und es gibt Fälle, in denen der Code viel sauberer und lesbarer / unterstützbarer ist, wenn es sich bei einer Hilfsmethode um eine Erweiterungsmethode handelt. Können in Fällen, in denen sich diese beiden überschneiden, beide zufrieden sein oder müssen wir uns voreinander entscheiden?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage