【发布时间】:2015-08-30 07:52:03
【问题描述】:
我希望我可以创建一个始终指向该特定变量而不是该变量当前表示的对象(或更准确地说是内存位置)的引用。
例如,假设我有以下程序,我想创建对 MyClass a 的引用,以便它始终返回 MyClass a 中的任何值,即使该值发生变化。我有一些看起来像的代码。
class MyClass
{
public int value = 0;
}
class Program
{
static MyClass saved; //maintained and used by the following two functions
static void StoreReference(MyClass input)
{
saved = input;
}
static void SetValue()
{
saved.value = 42;
}
static void Main(string[] args)
{
//A couple arbitrary classes I'd like to have references to
MyClass a = new MyClass();
MyClass b = new MyClass();
StoreReference(a);
a = b;
SetValue();
Console.Write(a.value); //should print 42, instead prints 0 since it reads in the original object a was set to
}
}
在 C# 中有什么可以做到这一点,或者有什么可以阻止变量被分配到新的内存位置(这样上面的代码会在 a = b 处返回错误)?
【问题讨论】:
-
可以定义为只读
-
你有没有尝试做 StoreReference(ref MyClass input)
-
readonly 的问题是我希望能够说 a.value = 42 而不是 a = new MyClass(),因为第二个示例更改了 a 指向的内存位置。
-
这有 REAL 用例吗?如果你想让
a不改变,你为什么坚持给它分配一个新的值? -
只读变量只会阻止你写
a=new MyClass(),不会阻止你写a.value=42。
标签: c# reference variable-assignment