我:静态变量
- MyNameSpace.MyClass1
- MyNameSpace.MyClass2
我需要从MyClass2从MyClass1.myvar1获得价值。 我是否应该使用静态变量
如果变量值在Web应用程序中是静态的,会发生什么情况。 我使用MyClass1作为:var mClass=new MyNameSpace.MyClass1()
,并从该im使用mClass。
谢谢
我:静态变量
- MyNameSpace.MyClass1
- MyNameSpace.MyClass2
我需要从MyClass2从MyClass1.myvar1获得价值。 我是否应该使用静态变量
如果变量值在Web应用程序中是静态的,会发生什么情况。 我使用MyClass1作为:var mClass=new MyNameSpace.MyClass1()
,并从该im使用mClass。
谢谢
如果值上下文是全局的,则可以使用静态变量。请记住,如果值已更新,则会为所有用户更新。如果数据不同或属于某个用户,那么永远不要使用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;
}
}
在这种情况下,您的数据是安全的。
不,你不应该在这里使用一个静态变量。请记住,static
表示该变量是应用程序的全局变量。在ASP.Net中,您有一个应用程序实例在访问您的网站的每个人中共享。使用静态变量可能导致一个用户看到另一个用户的数据。
这是否意味着类中使用新的类()的静态var,是跨asp.net web应用程序中的所有线程相同的值? – sinisa 2011-06-06 04:37:20
@sinisa尚未,这正是这意味着 – 2011-06-06 12:20:45
所有YOUNEED是让你类class2的新实例,并从创建的实例调用你的变量class1的像
myclass1
{
string Variable = string.empty;
protected void YourMethod()
{
myclass2 c2 = new myclass2()
this.Variable = c2.Variable;
}
}
这是不正常使用ASP.NET中的静态变量,除非你考虑线程安全。单个请求通常会在单个线程上运行。不同的请求可能会运行在不同的线程上。 (一些好的线程信息,请参阅http://blogs.msdn.com/b/tmarq/archive/2010/04/14/performing-asynchronous-work-or-tasks-in-asp-net-applications.aspx)
除非你在编写线程安全的代码晚自习,我会考虑使用下面的对象,而不是保持静态数据:
问题是“我需要从MyClass1获得价值。myvar1 MyClass2“。我不认为使用会话是回答。 – sinisa 2011-06-06 04:39:52
@sinisa更新了答案。 – Adeel 2011-06-06 05:04:42