我:靜態變量
- 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