Entwickler-Ecke

C# - Die Sprache - Wie deklariert man eine unter Funktion in der Funktion


Baumunk - Fr 24.11.06 09:35
Titel: Wie deklariert man eine unter Funktion in der Funktion
Hallo,

Wie soll es möglich sein in der Funktion noch eine oder mehrere Interne Funktionen deklarieren?

Da ist beispiel aus Delphi:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
Function GetInteger (Value : String) : Integer;

  Function UnterFunktion (Var Value : String) : Boolend;
  Begin
    ....
  End;

Begin
  ....
  If UnterFunktion (Value) Then
  ...
End;


Voraus danke.


Delete - Fr 24.11.06 10:17

das geht nicht und macht auch wenig Sinn.


JüTho - Fr 24.11.06 12:32

user profile iconMagicAndre1981 hat folgendes geschrieben:
das geht nicht und macht auch wenig Sinn.

Teil 1 dieser Antwort bestätige ich. Es geht nicht anders, als innerhalb derselben Klasse weitere Methoden zu nutzen. Durch #region/endregion kann man das trotzdem übersichtlich unterbringen.

Zum zweiten Teil habe ich eine ausführliche Diskussion über Vor- und Nachteile z.B. über
Verschachtelte Function [http://www.delphipraxis.net/topic90444_verschachtelte+function.html] gelesen. Auch dazu bin ich der Meinung: nicht ideologisch, sondern pragmatisch handeln. Jürgen


Robert_G - Mo 27.11.06 22:28

user profile iconMagicAndre1981 hat folgendes geschrieben:
das geht nicht und macht auch wenig Sinn.
Nicht immer gleich "iss nich" schreien. ;)

Mein ganz besonderer Liebling, Delegates und speziell: Anonyme Methoden wären eine Möglichkeit:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
class Program
{
  static int HasNestedFunction(int input)
  {
    Action<int> addToInput = delegate(int value)
    {
      input += value;
    };

    addToInput(1);
    addToInput(2);

    return input;
  }

  static void Main(string[] args)
  {
    Console.WriteLine(HasNestedFunction(1));
  }
}


Delete - Mo 27.11.06 23:08

ich weiß, dass es über Delegates irgendwie geht, aber so richtig rund ist das nicht :?


Robert_G - Mo 27.11.06 23:17

user profile iconMagicAndre1981 hat folgendes geschrieben:
ich weiß, dass es über Delegates irgendwie geht, aber so richtig rund ist das nicht :?
Ist sogar viel schnieker als es nested methods in Delphi waren.
Nested Methods ließen sich nur indirekt dafür missbrauchen um bei einem callback mit fester Signatur Zugriff auf lokale Variablen zu haben.
Bei .Net Delegates ist das problemlos möglich, anonyme Methoden sind sogar genau dafür da. :)