gpt4 book ai didi

C# - 通过引用传递值类型的好而灵活的方法?

转载 作者:行者123 更新时间:2023-11-30 19:05:56 24 4
gpt4 key购买 nike

我的问题,缩小到一个简单的解释,如下:我有一个类需要使用一个数字(不改变它),它可能会发生变化。这个数字不一定来自另一个类,它可以是任何东西。但是我只想将它“交给”一次类,而不是不断地调用更新方法或必须创建一个包装器(再一次,正如我所说,这应该适用于任何类型的数字并且必须包装一切都有点不切实际)。

下面是一些代码,希望对你有帮助:

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();
}

}

现在,问题似乎很明显:如果我实例化一个 SimpleExample 并给它一个变量作为参数,它将获得它的值而不是对它的引用。有没有足够简单的方法可以避免我创建包装器?谢谢。

最佳答案

创建一个非常简单的类:

class Ref<T>
{
public T Value;
public Ref<T>()
{
}
public Ref<T>(T value)
{
this.Value = value;
}
}

然后像这样使用它:

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);

请注意 Ref<T>这里的类是对 的引用 - 而不是对变量 的引用。如果要引用变量,请使用 Eric Lippert's solution (正如 Filip 所指出的那样)。

关于C# - 通过引用传递值类型的好而灵活的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16110187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com