通过构造函数传递的C#静态变量被清除

时间:2014-07-17 00:49:04

标签: c#

在我的aspx.cs页面中,我有一个int静态变量,我将它传递给另一个类的构造函数,其中我有一个增加静态变量的函数。但是,当执行完成并且我回到我的aspx.cs页面时,我失去了我的静态变量值。

aspx.cs页面

public static int one;

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

Test Class.cs

public class Test {

int _one;

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

public void Increment() {
_one++;
} 

}

编辑

我有两个包含静态变量的aspx.cs页面和一个具有Increment函数的Test类,它增加了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++;
} 

}

3 个答案:

答案 0 :(得分:3)

您的静态变量永远不会更改其值。您通过引用传递给Test构造函数,但之后只需将其值复制到_one_oneIncrement的更改对静态变量one没有影响。

答案 1 :(得分:3)

问题在于:

int _one;

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

即使您将引用传递给变量one,您也可以将分配给this._one。因此,当您递增时,您将增加本地字段而不是传入的引用。

答案 2 :(得分: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");