如何在方法中声明/设置静态变量

kmx*_*llo 2 c# methods static get set

我无法在方法中获取/设置静态变量.我该怎么做?

    public class LoginDialog
{
    // class members

    private static string _user=""  ;

    public  void RunDialog()
    {

        _user = "Peter";

    }

    public static string _User { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

阅读完答案后,我编辑了我的代码,但我仍然无法获得静态变量_user.我做错了什么?

    public class LoginDialog
{   
    private static string _user;  

    public void RunDialog()
    {
       LoginDialog._user = "Peter";
    }
    public static string _User { get {return _user;}  }
}
Run Code Online (Sandbox Code Playgroud)

当我声明一切正常时,我宁愿在方法内部声明.

 private static string _user="Peter";
Run Code Online (Sandbox Code Playgroud)

pho*_*oog 9

问题是你正在设置一个私有静态字段,然后可能是在别处读取公共静态属性.在您的代码中,public static属性完全独立于私有静态字段.

试试这个:

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

    public static string _User { get; private set; } 
} 
Run Code Online (Sandbox Code Playgroud)

该属性_User创建自己的隐形私有支持字段,这就是它与_user您在其他地方声明的私有字段完全分开的原因.

(样式指南规定了User公共静态属性的名称,但这只是一个指导原则.)

这是另一种方法,对于不支持自动属性的早期版本的C#,以及公共属性名称中没有下划线:

public class LoginDialog 
{
    private static string _user;

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

    public static string User { get { return _user; } } 
}
Run Code Online (Sandbox Code Playgroud)

  • @kmxillo静态变量声明是通过一个名为"Auto Implemented Properties"的功能,或"Auto Properties",其语法为"PropName {get; 组; }`get或set都没有内容.您可以访问该属性,并且编译器会自动为其创建一个支持字段,您永远不会在C#中看到或无法访问此字段.http://msdn.microsoft.com/en-us/library/bb384054.aspx (3认同)