2011-06-06 126 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內使用它的數據 - 緩存的共享數據這可能會過期/依賴關係