C #: Warum können wir nicht innere Methoden / lokale Funktionen haben?

7

Sehr oft passiert es, dass ich private Methoden habe, die sehr groß werden und sich wiederholende Aufgaben enthalten, aber diese Aufgaben sind so spezifisch, dass es keinen Sinn macht, sie für andere Code-Teile verfügbar zu machen.

Es wäre also wirklich großartig, in diesem Fall 'innere Methoden' erstellen zu können.

Gibt es technische (oder auch philosophische?) Einschränkungen, die verhindern, dass C # uns das gibt? Oder habe ich etwas vermisst?

Update von 2016: Das kommt und es heißt "lokale Funktion". Siehe markierte Antwort.

    
Marc 31.07.2009, 09:08
quelle

7 Antworten

0

Es scheint, als ob wir mit Lokale Funktionen in C # 7 / Visual Studio 15 genau das bekommen, was ich wollte:
Ссылка

%Vor%

Schade, dass ich dafür mehr als 7 Jahre warten musste: -)

Siehe auch andere Antworten für frühere Versionen von C #.

    
Marc 07.10.2016, 09:36
quelle
14

Nun, wir können "anonyme Methoden" innerhalb einer Funktion definieren (ich empfehle nicht, sie zu verwenden, um eine große Methode zu organisieren):

%Vor%     
Mehrdad Afshari 31.07.2009 09:10
quelle
7

Wenn etwas lang und kompliziert ist, ist es normalerweise eine gute Methode, es in eine separate Klasse umzuwandeln (entweder normal oder statisch - abhängig vom Kontext) - dort können Sie private Methoden haben, die nur für diese Funktionalität spezifisch sind.

>     
Grzenio 31.07.2009 09:10
quelle
2

Ich weiß, dass viele Leute Regionen nicht mögen, aber das ist ein Fall, in dem sie sich als nützlich erweisen könnten, indem Sie Ihre spezifischen Methoden in einer Region gruppieren.

    
CodeSpeaker 31.07.2009 09:11
quelle
2
___ qstnhdr ___ C #: Warum können wir nicht innere Methoden / lokale Funktionen haben? ___ answer1211466 ___

Nun, wir können "anonyme Methoden" innerhalb einer Funktion definieren (ich empfehle nicht, sie zu verwenden, um eine große Methode zu organisieren):

%Vor%     
___ answer1211469 ___

Wenn etwas lang und kompliziert ist, ist es normalerweise eine gute Methode, es in eine separate Klasse umzuwandeln (entweder normal oder statisch - abhängig vom Kontext) - dort können Sie private Methoden haben, die nur für diese Funktionalität spezifisch sind.

>     
___ answer1211474 ___

Ich weiß, dass viele Leute Regionen nicht mögen, aber das ist ein Fall, in dem sie sich als nützlich erweisen könnten, indem Sie Ihre spezifischen Methoden in einer Region gruppieren.

    
___ antwort1211485 ___

Können Sie ein konkreteres Beispiel geben? Nach dem Lesen Ihres Posts habe ich folgenden Eindruck, der aufgrund der begrenzten Informationen natürlich nur eine Vermutung ist:

  • Private Methoden sind außerhalb Ihrer Klasse nicht verfügbar, daher sind sie sowieso vor jedem anderen Code verborgen.
  • Wenn Sie private Methoden vor anderem Code in derselben Klasse verbergen möchten, ist Ihre Klasse möglicherweise zu groß und verstößt möglicherweise gegen die Regel für die einfache Zuständigkeit.
  • Betrachten Sie anonyme Delegierte einen Lambda-Ausdruck. Es ist nicht genau das, wonach du gefragt hast, aber sie könnten die meisten deiner Probleme lösen.

Achim

    
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ answer1211476 ___

Wenn Ihre Methode zu groß wird, sollten Sie sie in eine separate Klasse einfügen oder private Hilfsmethoden erstellen. Generell erstelle ich immer dann eine neue Methode, wenn ich normalerweise einen Kommentar geschrieben hätte.

    
___ tag123net ___ Das .NET-Framework ist ein Software-Framework, das hauptsächlich für das Microsoft Windows-Betriebssystem entwickelt wurde. Es enthält eine Implementierung der Basisklassenbibliothek, Common Language Runtime (allgemein als CLR bezeichnet), Common Type System (allgemein als CTS bezeichnet) und Dynamic Language Runtime. Es unterstützt viele Programmiersprachen, einschließlich C #, VB.NET, F # und C ++ / CLI. NICHT für Fragen zu .NET Core verwenden. ___ answer1211801 ___

Die bessere Lösung besteht darin, diese Methode zu einer separaten Klasse umzuformen. Erstellen Sie eine Instanz dieser Klasse als privates Feld in Ihrer ursprünglichen Klasse. Machen Sie die große Methode public und refactor big Methode in mehrere private Methoden, so wird es deutlich sein, was es tut.

    
___ answer39914078 ___

Es scheint, als ob wir mit Lokale Funktionen in C # 7 / Visual Studio 15 genau das bekommen, was ich wollte:
Ссылка

%Vor%

Schade, dass ich dafür mehr als 7 Jahre warten musste: -)

Siehe auch andere Antworten für frühere Versionen von C #.

    
___ qstntxt ___

Sehr oft passiert es, dass ich private Methoden habe, die sehr groß werden und sich wiederholende Aufgaben enthalten, aber diese Aufgaben sind so spezifisch, dass es keinen Sinn macht, sie für andere Code-Teile verfügbar zu machen.

Es wäre also wirklich großartig, in diesem Fall 'innere Methoden' erstellen zu können.

Gibt es technische (oder auch philosophische?) Einschränkungen, die verhindern, dass C # uns das gibt? Oder habe ich etwas vermisst?

Update von 2016: Das kommt und es heißt "lokale Funktion". Siehe markierte Antwort.

    
___
Achim 31.07.2009 09:14
quelle
1

Wenn Ihre Methode zu groß wird, sollten Sie sie in eine separate Klasse einfügen oder private Hilfsmethoden erstellen. Generell erstelle ich immer dann eine neue Methode, wenn ich normalerweise einen Kommentar geschrieben hätte.

    
Jesper Fyhr Knudsen 31.07.2009 09:12
quelle
0

Die bessere Lösung besteht darin, diese Methode zu einer separaten Klasse umzuformen. Erstellen Sie eine Instanz dieser Klasse als privates Feld in Ihrer ursprünglichen Klasse. Machen Sie die große Methode public und refactor big Methode in mehrere private Methoden, so wird es deutlich sein, was es tut.

    
Pavel Podlipensky 31.07.2009 10:24
quelle

Tags und Links