2012-03-26 16 views
2

Ich kann keine statische Variable innerhalb einer Methode erhalten/setzen. Wie kann ich es tun?So deklarieren/setzen Sie eine statische Variable innerhalb einer Methode

Nachdem ich die Antworten gelesen habe, bearbeite ich meinen Code und bekomme immer noch die statische Variable _user. Was mache ich falsch?

Wenn ich das erkläre, funktioniert alles gut, aber ich würde lieber innerhalb der Methode deklarieren.

private static string _user="Peter"; 
+4

Wenn Sie '_user' erwarten und auf' _User' zugreifen, funktioniert das nicht, da '_User' momentan eine automatische Eigenschaft ist. http://msdn.microsoft.com/en-us/library/bb384054.aspx –

Antwort

9

Das Problem ist, dass Sie ein privates statisches Feld festlegen und dann vermutlich die öffentliche statische Eigenschaft woanders lesen. In Ihrem Code ist die öffentliche statische Eigenschaft vollständig unabhängig vom privaten statischen Feld.

Versuchen Sie folgendes:

public class LoginDialog 
{ 
    // class members 
    public void RunDialog() 
    { 
     _User = "Peter"; 
    } 

    public static string _User { get; private set; } 
} 

Das Anwesen _User seinen eigenen unsichtbaren privaten Träger Feld erzeugt, weshalb es aus dem privaten _user Feld völlig getrennt ist, dass Sie an anderer Stelle erklärt.

(Style-Richtlinien den Namen User für die öffentliche statische Eigenschaft diktieren, aber das ist nur ein Richtwert.)

Hier ist ein weiterer Ansatz, die für frühere Versionen von C#, die nicht automatischen Eigenschaften unterstützen, und ohne Unterstrich in der Name der öffentlichen Eigenschaft:

public class LoginDialog 
{ 
    private static string _user; 

    // class members 
    public void RunDialog() 
    { 
     _user = "Peter"; 
    } 

    public static string User { get { return _user; } } 
} 
+0

+1 Höchstwahrscheinlich muss das Problem sein, obwohl das OP nicht angibt, wie er versucht, den statischen Wert zu "bekommen". –

+0

wo ist die Variable statische Deklaration ??? (BTW funktioniert !!) warum in meinem Beispiel nicht funktioniert? – kmxillo

+3

@kmxillo Die Deklaration der statischen Variablen erfolgt über ein Feature namens "Auto Implemented Properties" oder "Auto Properties" mit der Syntax 'PropName {get; einstellen; } 'wo weder get oder set Inhalte haben. Sie greifen auf die Eigenschaft zu, und der Compiler erstellt automatisch ein Backing-Feld für das Feld. In C# wird dieses Feld nicht angezeigt oder kann nicht darauf zugreifen. http://msdn.microsoft.com/en-us/library/bb384054.aspx –

Verwandte Themen