创建一个与另一个类相同的实例。 - 如何取消?
我有:
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 = b
或a = 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?