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

4

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

    public class LoginDialog
{
    // class members

    private static string _user=""  ;

    public  void RunDialog()
    {

        _user = "Peter";

    }

    public static string _User { get; set; }

}

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

    public class LoginDialog
{   
    private static string _user;  

    public void RunDialog()
    {
       LoginDialog._user = "Peter";
    }
    public static string _User { get {return _user;}  }
}

当我像这样声明时,一切都正常工作,但我更愿意在方法内部声明。
 private static string _user="Peter";

4
如果你期望设置 _user 并通过 _User 访问它,那么是行不通的,因为 _User 目前是一个自动属性。http://msdn.microsoft.com/en-us/library/bb384054.aspx - Adam Houldsworth
1个回答

11
问题在于你设置了一个私有静态字段,然后在别处可能会读取公共静态属性。在你的代码中,公共静态属性与私有静态字段完全独立。
尝试这样做:
public class LoginDialog 
{ 
    // class members
    public  void RunDialog() 
    {
        _User = "Peter";
    }

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

属性_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; } } 
}

变量的静态声明在哪里???(顺便说一句,它有效!!!)为什么我的示例不起作用? - Daniel Camacho
3
静态变量的声明是通过一个称为“自动实现属性”或“自动属性”的功能来完成的,其语法为PropName { get; set; },其中既没有get也没有set的内容。 你访问该属性,编译器会自动创建一个后备字段,但在C#中你永远看不到或无法访问此字段。http://msdn.microsoft.com/en-us/library/bb384054.aspx - Adam Houldsworth
@phoog: 我该如何在类内部设置私有静态变量,而不是从外部设置?我想从外部获取,而不是设置。 - Daniel Camacho
@kmxillo 这个答案中的两个示例都有一个私有字段,只能在声明类内部设置。 - phoog
@phoog 好的,我可以从声明类中获取私有静态值。但是我的解决方案需要从另一个类检索该变量,但它并没有按照我的期望工作。它没有被检索到。在另一个类中,我正在执行以下操作:string s = LoginDialog.User;(调用LoginDialog的get方法) - Daniel Camacho
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接