Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止重复对象相互影响C#_C#_Class_Oop - Fatal编程技术网

防止重复对象相互影响C#

防止重复对象相互影响C#,c#,class,oop,C#,Class,Oop,这可能看起来很傻,所以请原谅我的天真 如果我有一个整数,比如说int counter=2然后我可以创建integerint-anotherCounter=counter如果我要打印另一个计数器的值,它显然会返回2 现在,如果我说另一个计数器=5那么这不会改变我们的第一个值,计数器的值。同样,如果我将计数器的值更改为计数器=10,则这不会影响另一个计数器 但是,我创建了一个类,用于实例化某些对象,但如果我按照刚才对对象所描述的那样操作,它们似乎共享相同的值: HSVImage initial =

这可能看起来很傻,所以请原谅我的天真

如果我有一个整数,比如说
int counter=2
然后我可以创建integer
int-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(初始)这将创建一个与第一个具有相同属性的新对象。啊,对了,非常感谢!