Как объявить / установить статическую переменную внутри метода - PullRequest
2 голосов
/ 26 марта 2012

Я не могу получить / установить статическую переменную внутри метода. Как мне это сделать?

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

1 Ответ

9 голосов
/ 26 марта 2012

Проблема в том, что вы устанавливаете личное статическое поле, а затем, вероятно, читаете общедоступное статическое свойство в другом месте. В вашем коде открытое статическое свойство полностью не зависит от частного статического поля.

Попробуйте это:

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