asp.net Web应用程序中的静态变量

时间:2011-06-06 03:59:44

标签: asp.net variables static

我有:

  
      
  1. MyNameSpace.MyClass1
  2.   
  3. MyNameSpace.MyClass2
  4.   

我需要从MyClass2中获取MyClass1.myvar1的值。 我应该用静态变量吗

如果变量值在Web应用程序中是静态的,会发生什么。 我使用MyClass1作为:var mClass=new MyNameSpace.MyClass1(),并使用mClass。

谢谢

4 个答案:

答案 0 :(得分:3)

不,你不应该在这里使用静态变量。请记住,static表示变量是应用程序的全局变量。在ASP.Net中,您有一个应用程序实例,在访问您站点的每个人之间共享。使用静态变量可能导致一个用户看到另一个用户的数据。

答案 1 :(得分:2)

如果值上下文是全局的,则可以使用静态变量。请记住,如果值已更新,则会为所有用户更新该值。如果数据不同或属于用户,则永远不要使用静态,而是在MyClass1方法中实例化MyClass2对象。

您可以使用以下方法。

MyClass1.myvar1声明为公开,并从MyClass2进行访问。

class MyClass1{
public int myvar1 = 7;
}

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

在这种情况下,您的数据是安全的。

答案 2 :(得分:1)

在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 - 缓存可能具有过期/依赖关系的共享数据

答案 3 :(得分:0)

所有您需要的是创建 class2 的新实例,并从 class1 中的已创建实例调用您的变量,如

myclass1
{
    string Variable = string.empty;
    protected void YourMethod()
    {
        myclass2 c2 = new myclass2()
        this.Variable = c2.Variable;
    }
}