ASP.NET - срок службы статической переменной бритвы? - PullRequest
2 голосов
/ 20 февраля 2012

У меня есть три .cshtml, созданные с использованием WebMatrix:

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

 @functions
 {
    public static string x;

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

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

@{
    MyClass.setX();    
}

@MyClass.x

Без Сета.cshtml, расположенного в корне:

@MyClass.x

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

1 Ответ

3 голосов
/ 20 февраля 2012

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

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

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

...