2012-02-20 6 views
2

У меня есть три .cshtml созданы с помощью WebMatrix:ASP.NET - статическая переменная жизненного цикла бритвы?

MyClass.cshtml, расположенный в App_Code:

@functions 
{ 
    public static string x; 

    public static void setX() 
    { 
     x = "some data"; 
    } 
} 

WithSet.cshtml расположенный в корневом каталоге:

@{ 
    MyClass.setX();  
} 

@MyClass.x 

WithoutSet.cshtml, расположенной на корень:

@MyClass.x 

Когда я посещаю остроумие hSet.cshtml, MyClass.x будет установлен в «некоторые данные», а после этого, когда я нахожусь в файле безSet.cshtml, MyClass.x все равно содержит «некоторые данные». Я ожидал, что класс будет свежим, не инициализированным, и поэтому MyClass.x. Я думаю, что я не совсем понимаю, что происходит, какова продолжительность жизни в классе? Класс здесь статичен?

+0

Статические переменные уникальны для всего домена приложения на веб-сервере и будут сохраняться до перезапуска приложения. –

+0

@StefanH Итак, вы имеете в виду, что пользователи делятся одними и теми же данными? – dpp

+0

Исправить. Статические поля обычно следует избегать в веб-контексте именно по этой причине. –

ответ

3

Поскольку статические объекты совместно используются в домене приложений в .net - все пользователи получат один и тот же экземпляр класса с установленной статической переменной.

http://www.foliotek.com/devblog/avoid-static-variables-in-asp-net/

Существует хорошее объяснение того, что последствия использования статических полей в .net есть.

Смежные вопросы