说明我有这个:
CustomObject myCO1 = new CustomObject();
CustomObject myCO2 = myCO1;
CustomObject myCO3 = new CustomObject();
myCO1 = myCO3;
我希望myCO2与myCO1具有相同的参考值,与myCO3相同。有没有办法做到这一点?
非常感谢。
答案 0 :(得分:4)
不,分配新参考只是将参考值复制到新变量中。当您更改它的引用时,引用相同位置的其他变量不会受到影响。
因此,在您的情况下,myCO2
会引用myCO1
的旧位置。 myCO1
和myCO3
引用了相同的位置。
答案 1 :(得分:2)
听起来有点像你可以在references and values in C#使用引物。具体来说:“如果x是变量且其类型是引用类型,则更改x的 值 与更改 <中的数据不同em> x的值指的对象 “
但是,让我稍微清楚地编辑你的例子: -
CustomObject myCO1 = new CustomObject("A");
CustomObject myCO2 = myCO1;
CustomObject myCO3 = new CustomObject("B");
myCO1 = myCO3;
即使您更改myCO1以引用“B”,您也可以清楚地看到myCO2
引用“A”。这是因为虽然引用将引用到另一个对象,但本身是值。
有很多方法可以达到你想要的结果。
第一个选项是使用引用类型(而不是值)来引用您的CustomObject
: -
public sealed class Reference<T>
{
public T Value { get; set; }
}
...
Reference<CustomObject> myCO1 = new Reference<CustomObject>()
{
Value = new CustomObject("A");
};
Reference<CustomObject> myCO2 = myCO1;
CustomObject myCO3 = new CustomObject("B");
myCO1.Value = myCO3;
您拥有的第二个选项是在方法中封装所需的逻辑并使用{{3}}