2016-04-21 9 views
1

Wie this.name nicht funktionieren Felder zugreifen mit dem gleichen Namen wie ein Methodenparameter in statischen Klassen, ich bin auf der Suche nach einem Weg, dies zu tun.C# statisches Klassenfeld und Parameter mit demselben Namen

Als Beispiel Ich mag würde, dies zu tun:

static class test 
{ 
    private static string aString; 
    public static void method(string aString) 
    { 
     // aString (field) = aString (parameter) 
    } 
} 
+2

Eine bessere Option wäre, den * Parameter * in 'astring' umzubenennen. Die Konvention ist, dass die Parameter mit einem Kleinbuchstaben beginnen –

Antwort

7

Verwendung:

test.Astring = x; 

heißt ersetzen diese mit dem Klassennamen, Test in diesem Fall.

+0

Genau danke! –

+0

Es ist * weit * besser, den Parameter in 'aString' umzubenennen. Andernfalls wird die nächste Frage lauten: "Warum kann ich mein statisches Feld nicht verändern?" –

+0

@PanagiotisKanavos Ich stimme – Henningsson

0
static class test 
{ 
    private static string Astring="static"; 
    public static void method(string Astring) 
    { 
     string passedString = Astring; // will be the passed value 
     string staticField = test.Astring; // will be static 
    } 
} 

wenn wir die Methode, wie test.method("Parameter"); nennen die staticField den Wert haben wird static und passedString den Wert Parameter haben.

Das Schlüsselwort this bezeichnet die aktuelle Instanz der Klasse; Auf statische Felder , auf die nicht über die Instanz zugegriffen werden kann, sollten Sie stattdessen den Namen der Klasse für den Zugriff auf das statische Feld verwenden.

Hinweis: - Aber bitte passen Sie auf, während naming the variables. Vermeiden Sie es, denselben Namen in derselben Klasse anzugeben. Es wird am besten sein, wenn Sie die Klasse wie folgt definieren

static class test 
    { 
     private static string StaticAstring="static"; 
     public static void method(string passedAstring) 
     { 
      string staticField = StaticAstring; // will be static 
      string passedString = passedAstring; // will be the passed value 
     } 
    } 
+0

Sie haben Ihre lokalen Variablen im Moment die falsche Runde genannt. –

+0

@JonSkeet: Danke für die Erwähnung, das habe ich korrigiert –

Verwandte Themen