2011-06-06 226 views
4

我:静态变量

  1. MyNameSpace.MyClass1
  2. MyNameSpace.MyClass2

我需要从MyClass2从MyClass1.myvar1获得价值。 我是否应该使用静态变量

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

谢谢

回答

2

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

您可以使用以下方法。

声明MyClass1.myvar1作为公共和MyClass2访问。

class MyClass1{ 
public int myvar1 = 7; 
} 

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

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

+0

问题是“我需要从MyClass1获得价值。myvar1 MyClass2“。我不认为使用会话是回答。 – sinisa 2011-06-06 04:39:52

+0

@sinisa更新了答案。 – Adeel 2011-06-06 05:04:42

3

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

+0

这是否意味着类中使用新的类()的静态var,是跨asp.net web应用程序中的所有线程相同的值? – sinisa 2011-06-06 04:37:20

+0

@sinisa尚未,这正是这意味着 – 2011-06-06 12:20:45

0

所有YOUNEED是让你类class2的新实例,并从创建的实例调用你的变量class1的

myclass1 
{ 
    string Variable = string.empty; 
    protected void YourMethod() 
    { 
     myclass2 c2 = new myclass2() 
     this.Variable = c2.Variable; 
    } 
} 
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内使用它的数据 - 缓存的共享数据这可能会过期/依赖关系