创建一个与另一个类相同的实例。 - 如何取消?

我有:

instance1 = instance2;

我该如何将它们彼此断开连接,以便更改一个不会影响另一个?

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

谢谢

编辑:

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.

附:

class myclass
{
    public int integer;
}

编辑:

这就是答案:@ispiro,但是当你说a.integer = 1时,你并没有改变指针,你正在跟踪指针并在结尾改变它的值。 - Davy8

我曾经想过,改变'a'和'a.integer'的意思是,改变它们或者改变指针'a'或者不改变。 但事实上:第一个,第二个没有。

感谢大家。

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

a = c;// where c is another instance of 'myclass'.

改变'a'指向'b'以外的其他位置。 但:

a.integer = 1;

没有。


你的代码:

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

如果你围绕一个参考:

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.

变量是对象的标签,而不是对象本身。 在你的情况下,原来的a不再有引用,所以即使它存在,也无法访问它。 (并且只要垃圾收集器得到摆脱它,它就会停止存在,除非有其他引用)

如果有帮助,可以这样想,当你说a = ba = new myclass()你正在移动a指向的那一行。 当你说a.integer = 1. 有点像说按照a指向的那一行,然后改变目的地。


假设你在一张纸上写上“1600 Pennsylvania Avenue”。 这个地址是指一所房子,实际上是白宫。

假设你在第二张纸上写上“1600 Pennsylvania Avenue”。 该地址与第一张纸相同。

绝对没有办法改变这两个地址是指同一家的事实。 你可以换一张纸来说“123芝麻街”,然后他们不再提及同一所房子,但这并没有改变白宫的事实,这正在改变关于一张纸的事实。

如果你把白宫画成蓝色,你仍然没有改变任何一张纸; 现在都指蓝屋。

你能否更详细地解释你在这里试图做什么? 你的问题很混乱。


我想根据你的意见,我更好地理解你在说什么。

答案非常非常简单。

此代码:

instance1 = instance2;

除了指向相同的事物之外,不以任何方式链接instance1和instance2。 您始终可以重新指向任一变量(包括“忽略”它们)而不会影响其他变量。 将任一实例设置为null不会更改对象,只会使其停止指向内存中的对象。

本质上,这个问题的前提是不准确的。 这里没有问题要解决。

要理解的要点:变量instance1和instance2只是将对象的位置存储在内存中,而不是实际的对象。 如果你想操作实际的对象,你可以在该对象上使用方法或属性,例如:

instance1.ChangeColor; // call the ChangeColor method on the object pointed to by instance1.

更新:

假设a和b是索引卡,其中包含一个可容纳数字的邮箱地址。 以下是您的代码正在进行的演示

//create a mailbox (call it X)  and write the address on index card A
myclass a = new myclass();  

//put the number 1 in the mailbox at the address written on index card A (currently x)
a.integer = 1;   //mailbox x now contains 1

//create ANOTHER mailbox (call it Y) and write the address on index card B
myclass b = new myclass(); 

//put the number 2 in the mailbox at the address written on index card B (currently Y) 
b.integer = 2;  //mailbox y now contains 2

// change the address on index card A to the address from card B (currently Y)
a = b;  //both cards now have the address of mailbox Y (which contains 2) written on them. 

// if you want a to go back to having the address of mailbox X, you are
// out of luck because you don't have it written down on any of your cards anymore.

//put the number 1 in the mailbox at the address pointed to on Card A (Currently Y)
a.integer = 1;  //mailbox Y now contains 1

//Set text to the number from the mailbox at the address on card B (currently Y)
Text = b.integer.ToString();  
链接地址: http://www.djcxy.com/p/79365.html

上一篇: Made one instance of a class equal to another. – How to cancel that?

下一篇: Default assignment operator= in c++ is a shallow copy?