статическая переменная в веб-приложении asp.net - PullRequest
4 голосов
/ 06 июня 2011

у меня есть:

  1. MyNameSpace.MyClass1
  2. MyNameSpace.MyClass2

Мне нужно получить значение из MyClass1.myvar1 из MyClass2. Должен ли я сделать это со статической переменной

Что происходит со значением переменной, если оно статично в веб-приложении. Я использую MyClass1 как: var mClass=new MyNameSpace.MyClass1(), и из этого я использую mClass.

спасибо

Ответы [ 4 ]

3 голосов
/ 06 июня 2011

Нет, вы не должны использовать статическую переменную здесь.Помните, static означает, что переменная является глобальной для приложения.В ASP.Net у вас есть один экземпляр приложения, который используется всеми, кто посещает ваш сайт.Использование статических переменных может привести к тому, что один пользователь увидит данные другого пользователя.

2 голосов
/ 06 июня 2011

Если контекст значения является глобальным, тогда можно использовать статическую переменную.Помните, что если значение обновляется, оно обновляется для всех пользователей.Если данные отличаются или принадлежат пользователю, чем никогда не использовать статические, вместо создания экземпляра объекта MyClass1 внутри MyClass2 метода.

вы можете использовать следующий подход.* как общедоступный и доступ с MyClass2.

class MyClass1{
public int myvar1 = 7;
}

class MyClass2{
 public void TestMethod(){
  MyClass1 obj = new MyClass1();
  int val = obj.myvar1; 
 }
}

В этом случае ваши данные в безопасности.

1 голос
/ 07 июня 2011

Нельзя использовать статическую переменную в ASP.NET, если вы не учитываете безопасность потоков. Один запрос обычно выполняется в одном потоке. Различные запросы, вероятно, будут выполняться в разных потоках. (См. http://blogs.msdn.com/b/tmarq/archive/2010/04/14/performing-asynchronous-work-or-tasks-in-asp-net-applications.aspx для получения хорошей информации о потоках.)

Если вы не научитесь писать потокобезопасный код, я бы подумал об использовании следующих объектов вместо сохранения статических данных:

  1. Приложение - для статических данных всего приложения
  2. Сессия - если это пользовательские статические данные
  3. HttpContext.Items - если это данные, которые будут использоваться различными объектами в рамках одного запроса
  4. HttpRuntime.Cache / HttpContext.Cache - для кэширования общих данных, которые могут иметь срок действия / зависимости
0 голосов
/ 06 июня 2011

Все, что вам нужно - это создать новый экземпляр вашего class2 и вызвать вашу переменную из созданного экземпляра в class1 , как

myclass1
{
    string Variable = string.empty;
    protected void YourMethod()
    {
        myclass2 c2 = new myclass2()
        this.Variable = c2.Variable;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...