2012-03-26 41 views
2

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

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 – 2012-03-26 14:07:51

回答

9

问题是你正在设置一个私有静态字段,然后大概读取其他地方的公共静态属性。在您的代码中,公共静态属性完全独立于私有静态字段。

试试这个:

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; } } 
} 
+0

+1即使OP没有说明他是如何试图“获取”静态值,但最有可能成为问题。 – 2012-03-26 14:09:05

+0

其中是变量静态声明? (BTW作品!!) 为什么在我的例子不起作用? – kmxillo 2012-03-26 14:10:28

+3

@kmxillo静态变量声明通过名为“Auto Implemented Properties”或“Auto Properties”的特性具有“PropName {get;组; }'get或set都没有内容。您访问该属性并且编译器自动为它创建一个后台字段,您从不会看到或能够在C#中访问此字段。 http://msdn.microsoft.com/en-us/library/bb384054.aspx – 2012-03-26 14:11:51