You only have one, mutable Bar
instance through the whole process.
Foo y = new Bar();
y.Zed = 1;
y.SetX(3);
Func(y);
y.Zed == 2
and y.x == 2
at the end of this, because those are the values they were assigned in Func
. The fact that one was set via a property and the other via a method is unimportant.