Methode in einer Methode - Scope Problematik
-
Hey Leute!
Ich habe hier wieder ein ziemlich peinliches Problem. Ich möchte in einer Methode einen Aufruf einer anderen Methode tätigen. Jedoch soll die aufgerufene Methode im Block die Variablen nutzen die ich in der parent Methode deklariert habe.
Beispiel:
void AlphaMethode() { int zahl = 1; DrawZahl(); } void DrawZahl() { Console.WriteLine(zahl); }
Ich weiss das dies eigentlich Bullshit ist - mir geht es aber um die Übersicht im Code. Ich kann das alles bei VStudio auch in 'nem #region Klappladen verstecken, das wäre auch die andere Lösung. Nur möchte ich meinen Denkfehler hier vorher aufklären lassen.
Ich versuche ständig die var zahl als static zu deklarieren. Das wird aber nicht klappen. Kann es sein das "C" das möglich macht? Habe irgendwie in Erinnerung das ich das dort damals so gehandled hab.
gruß Charlie
-
Parentmethode, was ist das? Willst du
zahl
vielleicht als Membervariable deiner Klasse deklarieren?
-
Hallo
Entweder musst du wie bereits schon gesagt die Variable in einen höheren Score packen, in deinem Fall als Member Variable der Klasse, oder du übergibst die Variable als Referenz in die 2te Funktion.
Stativ hilft dir hier gar nicht, ist in C auch nicht anders, da Stativ nur die Variable für die Funktion in der sie definiert ist bekannt ist nur beim nächsten Aufruf den Wert vom vorherigen Aufruf noch beinhaltet.
Was du Vllt noch meinst war Pascal, da könnte man Funktionen in Funktionen definieren, geht in C und C# nicht, und dort könnte man auf "Parent" Variablen zugreifen.
Mfg mdn
-
Okay alles klar, Danke Jungs
-
@Marc-O
Anstatt "Score" meinst Du "Scope", "Stativ" wäre korrekterweise "Static".
Und Dein Absatz zu "Static" ist falsch. Die Verwendung unterscheidet sich in C und C# drastisch. C-Static bedeutet, wie Du richtig erläuterst, dass der Wert der Variablen von einem Funktionsaufruf zum nächsten erhalten bleibt.
C-Static heißt aber, dass die Variable für alle Instanzen einer Klasse verwendet wird. Der Normalfall (ohne "static") ist die Verwendung einer Variable pro Instanz.@Falke88
Soll die aufgerufene Methode tatsächlich auf dem gesamten Variablensatz der aufrufenden Methode arbeiten? Dann scheint es mir richtiger, den Code in einer Methode zu belassen.
Wenn die aufgerufene Methode nur einen Teil der Variablen der aufrufenden Methode verwendet, kann die Übergabe nicht so kompliziert werden.
Wenn Du viele Methoden hast, die alle immer auf demselben (oder nur leicht veränderten) Variablensatz arbeiten, solltest Du sie zu einer Klasse zusammenfassen und Instanzen davon herumreichen.