防止重复对象相互影响C#
这可能看起来很傻,所以请原谅我的天真 如果我有一个整数,比如说防止重复对象相互影响C#,c#,class,oop,C#,Class,Oop,这可能看起来很傻,所以请原谅我的天真 如果我有一个整数,比如说int counter=2然后我可以创建integerint-anotherCounter=counter如果我要打印另一个计数器的值,它显然会返回2 现在,如果我说另一个计数器=5那么这不会改变我们的第一个值,计数器的值。同样,如果我将计数器的值更改为计数器=10,则这不会影响另一个计数器 但是,我创建了一个类,用于实例化某些对象,但如果我按照刚才对对象所描述的那样操作,它们似乎共享相同的值: HSVImage initial =
int counter=2
然后我可以创建integerint-anotherCounter=counter
如果我要打印另一个计数器的值,它显然会返回2
现在,如果我说另一个计数器=5那么这不会改变我们的第一个值,计数器的值。同样,如果我将计数器的值更改为计数器=10
,则这不会影响另一个计数器
但是,我创建了一个类,用于实例化某些对象,但如果我按照刚才对对象所描述的那样操作,它们似乎共享相同的值:
HSVImage initial = new HSVImage(1920, 1080);
HSVImage duplicate = initial;
出于某种原因,如果我现在在duplicate
中更改了任何内容,那么它也会影响initial
。有人能解释一下我哪里出错了吗?我想这与我如何设置我的HSVImage课程有关
多谢各位。
Sam这是因为对象由引用传递和复制而不是由值传递的原语
当你写作时
HSVImage initial = new HSVImage(1920, 1080);
HSVImage duplicate = initial;
int counter = 2;
int other = counter;
您将参考复制到初始
到复制
,这意味着初始
现在将指向与复制
相同的对象
另一方面,当你写作时
HSVImage initial = new HSVImage(1920, 1080);
HSVImage duplicate = initial;
int counter = 2;
int other = counter;
您将把计数器的值放入其他
中
您可以在这里阅读更多信息:不,它不是HSVImage
类设置的一部分,而是.Net framework如何处理引用类型,它是HSVImage
类的对象,而不是值类型,它是您的计数器
变量。请在下面的链接中阅读更多关于这个主题的内容,除了下面的答案,如果你想实现你的HVScript类的类似行为作为它的值类型,考虑将它从类转变为结构类型,那就是值类型。我理解你的意思,但我仍然不知道如何解决我的问题。我如何使我的副本成为一个值而不是一个引用?在文档中,它说我必须在参数中输入'ref',但我没有,那么为什么它认为它是一个引用呢?您可以使用复制构造函数HSVImage initial=new HSVImage(1920,1080);HSVImage duplicate=新的HSVImage(初始)代码>这将创建一个与第一个具有相同属性的新对象。啊,对了,非常感谢!