2017-01-12 7 views
-8

ich nach Lösungen für diese alle über das Internet gesucht, aber keiner von ihnen arbeiten:Probleme mit globalen Variablen

public static void Main (string[] args) 
{ 
    Console.Write ("What is your name: "); 
    string input = Console.ReadLine(); 

    sayHi(); 
} 

public static string sayHi() { 
    Console.WriteLine ("Hello {0}!", input); 
} 

ich keine Antwort benötigen, die mich ohne eine globale Variable tun wird dazu beitragen, das ist nicht das, was ich suche

Wenn ich dies ausführen bekomme ich diesen Fehler:

The name 'input' does not exist in the current context 

ich habe versucht, eine der Linien machen

public string input = Console.ReadLine(); 

aber ich bekomme

Unexpected symbol 'public' 

Ich versuchte

static string input = Console.ReadLine(); 

Aber ich bekomme

Unexpected symbol 'static' 

Diese

public static string input = Console.ReadLine(); 

gibt mir

Unexpected symbol 'public' 

Ich will nicht eine Lösung, die keine globalen Variablen nicht verwendet

+4

In C# muss alles in einer Klasse sein. Wenn Sie eine globale Variable haben wollen, können Sie "static class Global {public string input;}" konstruieren. Sie werden in Ihrem Code auf "Global.input" zugreifen. – Julo

+7

Ich denke, dass Sie die grundlegende Syntax von C# und das Konzept von OO zuerst studieren müssen, es wird viel besser für Ihre zukünftige Kodierung sein – Prisoner

+2

Die Notwendigkeit globaler Variablen klingt wie ein XY-Problem. –

Antwort

3

In C# gibt es keine globalen Variablen. Dies wird den Trick für Sie tun. Sie können auch versuchen, die statische Klasse mit der statischen Member-Lösung zu verwenden, um so etwas wie globale Variablen zu simulieren, aber das wird immer noch keine globale Variable sein.

Versuchen Sie, diese (Sie verwenden ein Attribut in der Klasse in dieser Lösung, wird es "global" innerhalb dieser Klasse sein)

public class YourClass{ 

    private static string _input; 

    public static void Main (string[] args) 
    { 
     Console.Write ("What is your name: "); 
     _input = Console.ReadLine(); 

     sayHi(); 
    } 

    public static string sayHi() { 
     Console.WriteLine ("Hello {0}!", _input); 
    } 
} 
+0

Dies ist keine globale Variable. – Rawling

+0

@Rawling In C# gibt es keine globalen Variablen. Dies wird den Trick für ihn tun. Er könnte auch versuchen, die statische Klasse mit statischen Elementen zu simulieren, aber es wird immer noch keine globale Variable sein. –

+0

Dann ist das die Antwort auf die Frage. – Rawling

4

Sie sollten die Variable außerhalb des Main Methode in der Klasse enthalten beide Funktionen deklarieren:

private static string input; 

public static void Main (string[] args) 
{ 
    Console.Write ("What is your name: "); 
    input = Console.ReadLine(); 

    sayHi(); 
} 

public static string sayHi() { 
    Console.WriteLine ("Hello {0}!", input); 
} 

In diesem Fall ist der Gültigkeitsbereich der Variablen input die enthaltene Klasse und Sie können von allen Methoden innerhalb dieser Klasse darauf zugreifen.

+0

Dies ist keine globale Variable. – Rawling

+3

Es ist global für die umschließende Klasse. Es hängt also alles davon ab, was Ihre Definition von globaler Variable ist. –

+1

@Rawling Da C# keine globalen Variablen hat, und wenn man bedenkt, dass OP für C# neu zu sein scheint, würde ich annehmen, dass dies so nah ist, wie Sie bekommen werden - und was OP sucht. – Rob

0

Sie Static Klasse

static class Global 
{ 
    private static string _gVariable1 = ""; 

    public static string Variable1 
    { 
     get { return _gVariable1 ; } 
     set { _gVariable1 = value; } 
    } 
} 

verwenden können, und Sie können es wie

verwenden
Global.Variable1 = "any string value"