C# 变量在";“原件”;对象传递到另一个窗体/对象并在其中更改后

C# 变量在";“原件”;对象传递到另一个窗体/对象并在其中更改后,c#,object,C#,Object,我在我的项目中遇到了一些奇怪的事情。我的一个对象值似乎正在更改,尽管它创建的表单中没有任何代码会更改该值 然而,这个对象被传递到另一个表单,在这个表单中变量确实被更改了。我是否误解了传递给其他对象/表单的对象是如何工作的,因为它不是一个副本,而是从(可能)几个层向下链接到原始对象的?是的,对象(实例)是对其类的每个新模板的引用。因此,传递对象意味着传递指针或引用。 与之相反的是结构,它是一种值类型,在堆栈中传递整个结构。因此,即使对象从未传递回原始位置,对该对象的任何实例所做的任何值更改都会根据

我在我的项目中遇到了一些奇怪的事情。我的一个对象值似乎正在更改,尽管它创建的表单中没有任何代码会更改该值

然而,这个对象被传递到另一个表单,在这个表单中变量确实被更改了。我是否误解了传递给其他对象/表单的对象是如何工作的,因为它不是一个副本,而是从(可能)几个层向下链接到原始对象的?

是的,对象(实例)是对其类的每个新模板的引用。因此,传递对象意味着传递指针或引用。
与之相反的是结构,它是一种值类型,在堆栈中传递整个结构。

因此,即使对象从未传递回原始位置,对该对象的任何实例所做的任何值更改都会根据其在“链”中的位置进行前向和后向过滤?现在它变得混乱了。对象的实例?从类实例化一个新对象。将此对象(通过引用)传递给另一个窗体。如果此表单更改实例的属性,它们也会在创建范围内更改,因为它是同一个实例(=对象)。不知道过滤器和前进/后退是什么意思。尝试一些示例代码。表单1创建对象,传递到表单2,表单2使用数据,然后传递到表单3(想象一系列窗口),如果对象值在任何点发生更改(例如,表单3调用表单2中更改值的方法)这会把filter改成其他形式吗?我不懂那种情况下的filter?看起来像是语言障碍:D。是的,这正是我的意思。谢谢你澄清这一点,我现在可以停止用头撞桌子了,阅读: