Kap*_*aG3 2 c# variables reference
我的问题,缩小到一个简单的解释,如下:我有一个类需要使用一个数字(不改变它),这可能会改变.这个数字不一定来自另一个类,它可以是任何类.但是我想只给它一次"给"它一次,而不是经常不得不调用更新方法或不得不创建一个包装器(因为我再说过,这应该适用于任何类型的数字并且必须包装一切都是不切实际的).
这是一些代码,希望它有所帮助:
public class SimpleExample
{
int value;
public SimpleExample(int variableOfWhichINeedAReference)
{
//Of course this won't work, but I'll keep it simple.
value = variableOfWhichINeedAReference;
}
public void DisplayValue()
{
print(value);
}
}
public class RandomClass
{
int myValue = 10;
SimpleExample s = new SimpleExample(myValue);
public void WorkWithValue()
{
myValue++;
}
public void Display()
{
print(foo);
print(bar);
s.DisplayValue();
}
}
Run Code Online (Sandbox Code Playgroud)
现在,问题似乎非常明显:如果我实例化一个SimpleExample并给它一个变量作为参数,它将获得它的值而不是它的引用.有一种简单的方法可以避免我创建一个包装器吗?谢谢.
做一个非常简单的课程:
class Ref<T>
{
public T Value;
public Ref<T>()
{
}
public Ref<T>(T value)
{
this.Value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
class A
{
Ref<int> x;
public A(Ref<int> x)
{
this.x = x;
}
public void Increment()
{
x.Value++;
}
}
...
Ref<int> x = new Ref<int>(7);
A a = new A(x);
a.Increment();
Debug.Assert(x.Value == 8);
Run Code Online (Sandbox Code Playgroud)
请注意,Ref<T>
此处的类是对值的引用 - 而不是对变量的引用.如果您想要引用变量,请使用Eric Lippert的解决方案(如Filip所指出的).