【问题标题】:How to declare/set a static variable inside a method如何在方法中声明/设置静态变量
【发布时间】:2012-04-10 01:05:46
【问题描述】:

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

    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";

【问题讨论】:

标签: c# methods static get set


【解决方案1】:

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

试试这个:

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

【讨论】:

  • +1 即使 OP 没有说明他如何尝试“获取”静态值,也很可能是问题所在。
  • 变量静态声明在哪里??? (顺便说一句有效!!)为什么在我的例子中不起作用?
  • @kmxillo 静态变量声明是通过一个名为“自动实现属性”或“自动属性”的功能,其语法为 PropName { get; set; },其中 get 或 set 都没有内容。您访问该属性,编译器会自动为其创建一个支持字段,您永远不会看到或无法在 C# 中访问该字段。 msdn.microsoft.com/en-us/library/bb384054.aspx
  • @phoog:如何在类内部设置私有静态变量,而不是从外部设置?我想从外部课程中获得,没有设置。
  • @kmxillo 此答案中的两个示例都有一个只能在声明类中设置的私有字段。
猜你喜欢
  • 1970-01-01
  • 2011-03-23
  • 2014-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-14
相关资源
最近更新 更多