2014-07-17 92 views
0

在我的aspx.cs頁面中,我有一個int靜態變量,並將其傳遞給另一個類的構造函數,其中我有一個函數可以增加靜態變量。然而,當執行完成時,當我回到我的aspx.cs頁面我失去了我的靜態變量值。清除通過構造函數傳遞的C#靜態變量

aspx.cs頁面

public static int one; 

//Im creating an object to test class 
Test t = new Test(ref int one); 
t.Increment(); 

測試Class.cs

public class Test { 

int _one; 

public Test(ref one) { 
    this._one = one; 
} 

public void Increment() { 
_one++; 
} 

} 

編輯

我有兩個aspx.cs頁面保存靜態變量和測試類,它有遞增函數,遞增aspx.cs類的靜態變量。當我創建一個Test類的對象但沒有用時,我嘗試通過ref傳遞。有人能爲此提出最佳設計方案嗎?

one.aspx.cs

public static int one; 

//Im creating an object to test class 
Test t = new Test(ref int one); 
t.Increment(); 

Two.aspx.cs

public static int Two; 

//Im creating an object to test class 
Test t = new Test(ref int Two); 
t.Increment(); 

測試類

public class Test { 

int _value; 

public Test(ref one) { 
    this._value = one; 
} 

public void Increment() { 
    _value++; 
} 

} 
+1

你沒有在你的'Test'類(你不能)持有一個引用(指針)到靜態變量'one'。 – EZI

+1

不知道爲什麼這個問題應該得到一個downvote? – Rahul

+0

您的技術在ASP.NET中無法使用。如果你可以增加靜態變量,你可以爲頁面的所有用戶增加它。 –

回答

1

不知道有多好,這將是,但讓Increment函數接受的類名作爲參數就像

public class Test { 

public void Increment(string class_name) 
{ 
if(class_name == "One") 
One.one++; 
else 
Two.two++; 
} 

} 

然後在你的.aspx頁面叫它

//one.aspx.cs 
t.Increment("One"); 


//Two.aspx.cs 

t.Increment("Two"); 
3

你的靜態變量永遠不會改變它的值。您通過引用Test構造函數來傳遞它,但是您只需將它的值複製到_one即可。和_oneIncrement變化對靜態變量one沒有影響。

3

的問題是在這裏:

int _one; 

public Test(ref one) { 
    this._one = one; 
} 

即使你傳遞一個參考給變量one,要指定它的this._one。所以,當你增加你增加局部場,而不是引用中傳遞。

+0

如何按此順序增加我的靜態變量? – user2412230

+1

@ user2412230,如果你唯一的想法是增加那個靜態變量,那麼在你的增量方法中,只需說'classname.one ++;',其中'classname'是聲明'one'的類的名稱。 – Rahul

+1

你想完成什麼?嘗試持有對靜態成員的引用來改變它聽起來像一個奇怪的設計。 –