Below c# code I run in Visual Studio 2019 Mac, I am a little surprise for the result:
using System;
namespace Test
{
public struct Point
{
public int x;
private int y;
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
}
class Program
{
static void Main(string[] args)
{
Point p1 = new Point(100, 100);
Point p2;
p2 = p1;
p1.x = 200;
Console.WriteLine("p1.x is {0},p2.x is {1} ", p1.x, p2.x);
// I think here should Output: p1.x is 200, p2.x is 200
// But the actual output is: p1.x is 200, p2.x is 100, why? is it a reference copy?
// p1 and p2 should share the same reference, right?
}
}
}
Actually when I read C# instruction, it explained that such code should output: p1.x is 200,p2.x is 200 because p2 and p1 share the same pointer to point to ONE address in heap, right? while when I try to test above code in VS2019 Mac. it's output is: p1.x is 200,p2.x is 100 which confused me so much? Is it a shallow copy or deep copy? Can somebody please explain why p2.x is still 100, when p1.x already changed to 200? Thanks a lot.