2010-10-26 6 views
14

Если у меня был класс со статическим свойством, установленным, когда пользователь загружает определенную страницу, это статическое значение, уникальное для этого сеанса пользователей?Как работают статические свойства в среде asp.net?

Другими словами, если второй пользователь загружает страницу и устанавливает статическое свойство, будет ли каждый пользователь иметь отдельное значение или оба будут использовать значение второго пользователя?

+1

Вы читали документацию или пытались это сами? –

ответ

13

Статика уникальна для домена приложения, все пользователи этого домена приложения будут иметь одинаковое значение для каждого статического свойства. Когда вы видите слово static, подумайте: «будет только один экземпляр этого». Как долго длится этот экземпляр, это отдельный вопрос, но короткий ответ заключается в том, что он является переменным.

Если вы хотите сохранить значения, специфичные для пользователя, посмотрите на Session State.

1

Нет, это ничего особенного, потому что это asp.net. Сам ASP.NET - это просто сборка сборной .NET. Если вы хотите сохранить вещи за сеансы, вы должны использовать состояние сеанса. Если нет, будьте осторожны, так как существует много потоков, которые могут обращаться к вашим статическим данным. Вы должны прочитать и узнать, как работают нитки, замки и условия гонки.

2

Статические поля и свойства являются общими для всех экземпляров класса. Все ваши пользователи будут иметь одинаковое значение.

Значение будет до тех пор, пока рабочий процесс ASP.NET не переработает себя (что происходит периодически).

+0

+1 - Я получил бит один раз, глупо удалив логику назначения против статического свойства. Значение застряло вокруг достаточно долго для меня, чтобы почти забыть об этом, и иметь сено-день, разматывая беспорядок, когда бассейн * действительно * перерабатывал. Мораль истории: будьте осторожны со статикой, как в любом случае, но особенно в ASP.NET. – Dan

2

В дополнение к ответу Боба есть это исключение, конечно:

public static object Item { 
    get { return HttpContext.Current.Session["some_key"]; } 
} 
+0

И многие другие: сам HttpContext.Current, и 'DateTime.Now'. Статические поля являются общими (если они не украшены атрибутом 'ThreadStatic'), но статические свойства могут делать все, что они хотят. – Joe

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