C# Frage zu Variable in einer Funktion

eightcore

Lt. Commander
🎅Rätsel-Elite ’24
Registriert
Juli 2008
Beiträge
1.656
Guten Tag.

In einer Funktion wird eine Variable erstellt und ein Wert zugewiesen.

Wie kann ich diese Variable ausserhalb der Funktion aufrufen?

Finde nichts im Netz.


MfG | eightcore
 
@eightcore: Zurück zu den Grundlagen.

Gar nicht kannst du diese Funktion aufrufen außerhalb der Funktion, da sie nur im Scope der Funktion zugreifbar. Und das du nichts im Netz findest ist eine schlechte Ausrede dafür das du nicht gründlich gesucht hast.
Willst du den Wert der Variable später weiterbenutzen, gib einfach die Variable(je nach dem was es für ein Typ ist) von der Funktion zurück.
 
Soweit ich weis existiert die Variable in deinem Fall nur innerhalb der Funktion. Du könntest die Variable via
Code:
[B]return[/B] var;
zurück geben, so wärs z. B. in Java möglich.
 
Also eine in der Funktion erstellte Variable kannst du nicht abrufen. Du kannst sie aber:
- "global" definieren (wie schon erwähnt)
- den wert der Variable mit return zurückgeben http://msdn.microsoft.com/de-de/library/1h3swy84(v=vs.80).aspx
- den Wert mit out zurückgeben: http://msdn.microsoft.com/en-us/library/t3c3bfhx(v=vs.80).aspx

@pizza ja, es gibt keine "echten" globalen variablen, man kann sich halt höchstens, wie in dem ersten google ergebnis, eine Klasse mit statischen Variablen und Methoden anlegen, von der keine Instanz erzeugt werden darf.
 
Zuletzt bearbeitet:
Geht auch nicht. Wenn Du den Wert eine Variable außerhalb einer Funtion haben willst, dann mußt du ihn zurückgeben.
public int Fkt()
{
int Var = 0;
//berechnung mit Var
return Var;
}
oder Du übergibst sie als out Parameter oder ref, wenn ihr wert vorher wichtig ist.
 
globale Variablen gibt es nicht.
Und out hat ja nichts damit zu tuen das er eine Variable referenzieren will die er IN der funktion definiert und nicht außerhalb der funktion und diese nur an die funktion übergibt ;)
 
Ich denk mal es geht ja letzenendes darum wieder Daten von der Funktion zurück zu bekommen =) Das er keine Variable die er in der Funktion definiert hat rausholen kann dürfte inzwischen klar sein.
 
Seit wann gibts is in der OO Sprache eine Globale Variable?

Du kannst vielleicht DEF deklarieren...

Wenn man eine Globale Variable will, dann ist man bei OO Sprachen wie Java/C# falsch. Eightcore, vielleicht solltest du nachlesen was der Sinn der OO Sprachen ist. Man kapselt die Objekte, damit das mit dem globalen mist nichts falsches passieren kann. Wenn du global willst, schreibe das in eine Datei uns lese jedes mal einfach aus.

Was du eventuell verwenden kannst ist

  1. ref, wenn du den Wert der Variable weitergeben willst.
  2. out, hier musst die die Variable zuerst initialisieren, wenn du mit out angibst. Es ist aber ähnlich wie return.

Ich tippe ehe auf ref, wobei bei Objekten immer ref genutzt wird (hierbei REF optional, da Objekte referenziert sind, Zeiger im Speicherbereich) und bei den Structs expliziert angegeben werden muss.
 
Seit wann gibts is in der OO Sprache eine Globale Variable?

Mal davon abgesehen, dass man globale Variablen möglichst vermeiden sollte, gibt es in den meisten "OO Sprachen" globale Variablen.

Auch in C# kann man mit einer static Class und einer Klassenvariable in dieser eine globale Variable erzeugen:

Code:
static class Global 
  {
    private string variable = "";
    public static string Variable
      {
        get { return variable; }
        set { variable = value; }
      }
}

Verwendung:
Code:
Global.Variable = "so gehts schon";

string testVar = Global.Variable;
 
Zuletzt bearbeitet: (Verwendung hinzugefügt)
@dacleric

Du hast keine globale Variable. Es ist lediglich nur ein statischer verweis, was für alle anderen Klassen sichtbar ist.

Ich denke, was eightcore will ist eine richtig globale Variable wie in C oder PHP, wo alle drauf zugreifen können ohne die Klasse in der es gekapselt ist aufzurufen.

Sobald du aber Multithreading orientiert programmierst solltest du auch die statics vermeiden, oder die Klasse locken, damit kein Mist passiert. Klar static ist MT safe, aber sobald da mehrere Threads auf die static zugreifen, wirds nicht mehr lustig!
 
Zurück
Oben