Search code examples
c#operators

c# = operator problem


In C#, I have a simple 3D vector class.

static void Main(string[] args)
{
    Vector3D a, b;
    a = new Vector3D(0, 5, 10);
    b = new Vector3D(0, 0, 0);

    b = a;
    a.x = 10;

    Console.WriteLine("vector a=" + a.ToString());
    Console.WriteLine("vector b=" + b.ToString());
    Console.ReadKey();
}

the output is,

vector a= 10, 5, 10

vector b= 10, 5, 10

I assign a before i change a.x to 10. So i was expecting

vector a= 10, 5, 10

vector b= 0, 5, 10

From what i understand = operator assigns a reference to object like a pointer? And in C# i cant overload = operator.

Do i have to manually assign each property?


Solution

  • Yes, because Vecor3D is a class this is quite correct.

    Classes are reference types and your b = a; statement does not copy a Vector3D instance but a reference to an instance.

    If you want to 'clone' the instances, you could add the IClonable interface, but that is more or less abandoned.

    A better solution for an <X,Y,Z> type might be to make it a struct. Structs are values types and the meaning of b = a; would change (towards what you want).

    A 3D point meets all the criteria for a struct (small, no identity). The preferred way is to design it as immutable.