使一个类的实例与另一个相等. - 如何取消?

isp*_*iro 3 c#

我有:

instance1 = instance2;
Run Code Online (Sandbox Code Playgroud)

如何将它们彼此断开,以便改变一个不会影响另一个?

编辑:我希望他们引用相同的对象(所以我不能克隆),后来 - 不是.但我仍然想要这个类的两个实例 - 所以我不能'空'它们.

谢谢

编辑:

myclass a = new myclass();
a.integer = 1;

myclass b = new myclass();
b.integer = 2;

a = b;
//All changes to one will affect the other, Which is what I want.



//<More lines of the program>



//Now I want 'a' to point to something else than 'b'. and I’m missing the code
//so that the next line will not affect 'b'.
a.integer = 1;

Text = b.integer.ToString();
//I need b.integer to still be = 2, it’s not.
Run Code Online (Sandbox Code Playgroud)

附:

class myclass
{
    public int integer;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

这是在答案:@ispiro但是当你说a.integer = 1,你不改变指针,你是以下的指针,并在它的结束更改值. - 戴维8

我曾经以为改变'a'和'a.integer'都是一样的,因为改变它们会改变指针 - 'a'或不会改变指针.但实际上:第一个没有,第二个没有.

感谢大家.

所以在上面的例子中,如果我添加:

a = c;// where c is another instance of 'myclass'.
Run Code Online (Sandbox Code Playgroud)

这将改变"A"点比"B"别的地方.但:

a.integer = 1;
Run Code Online (Sandbox Code Playgroud)

没有.

Dav*_*vy8 28

你的代码:

myclass a = new myclass();
a.integer = 1;

myclass b = new myclass();
b.integer = 2;

a = b;

//here I need code to disconnect them

a.integer = 1;

Text = b.integer.ToString();
//I need b.integer to still be = 2
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果你留下参考:

myclass a = new myclass();
a.integer = 1;

myclass b = new myclass();
b.integer = 2;

var c = a; //Keep the old a around
a = b;

//here I need code to disconnect them
a = c; //Restore it.

a.integer = 1;

Text = b.integer.ToString();
//It's still 2 now.
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

变量是对象的标签,而不是对象本身.在您的情况下,原始版本a不再具有对它的引用,因此即使它存在,也无法访问它.(并且只要垃圾收集器绕过去除它,它将不复存在,除非有其它参考)

如果它有所帮助,可以这样想,当你说a = b或a = new myclass()你正在移动a指向的线时.当你说a.integer = 1,.有点像跟着线a指向,然后改变目的地.

  • 很棒的解释 (2认同)

Eri*_*ert 8

假设你在一张纸上写下"1600宾夕法尼亚大道".那个地址指的是一所房子,实际上是白宫.

假设你在第二张纸上写下"1600宾夕法尼亚大道".该地址指的是与第一张纸相同的房屋.

你无能为力地改变这两个地址指的是同一个房子这一事实.你可以改变其中一张纸说"123芝麻街",然后他们不再提到同一所房子,但这并没有改变关于白宫的事实,这改变了一张纸的事实.

如果你然后把白宫涂成蓝色,你仍然没有改变任何一张纸; 现在两个都指的是一个蓝色的房子.

你能更详细地解释一下你在这里尝试做什么吗?你的问题很混乱.

  • @JohnFx:我没碰到那个. (6认同)