# operator

Most of the built-in operators (including conversion operators) can be overloaded by using the `operator` keyword along with the `public` and `static` modifiers.

The operators comes in three forms: unary operators, binary operators and conversion operators.

Unary and binary operators requires at least one parameter of same type as the containing type, and some requires a complementary matching operator.

Conversion operators must convert to or from the enclosing type.

```public struct Vector32
{

public Vector32(int x, int y)
{
X = x;
Y = y;
}

public int X { get; }
public int Y { get; }

public static bool operator ==(Vector32 left, Vector32 right)
=> left.X == right.X && left.Y == right.Y;

public static bool operator !=(Vector32 left, Vector32 right)
=> !(left == right);

public static Vector32 operator +(Vector32 left, Vector32 right)
=> new Vector32(left.X + right.X, left.Y + right.Y);

public static Vector32 operator +(Vector32 left, int right)
=> new Vector32(left.X + right, left.Y + right);

public static Vector32 operator +(int left, Vector32 right)
=> right + left;

public static Vector32 operator -(Vector32 left, Vector32 right)
=> new Vector32(left.X - right.X, left.Y - right.Y);

public static Vector32 operator -(Vector32 left, int right)
=> new Vector32(left.X - right, left.Y - right);

public static Vector32 operator -(int left, Vector32 right)
=> right - left;

public static implicit operator Vector64(Vector32 vector)
=> new Vector64(vector.X, vector.Y);

public override string ToString() => \$"{{{X}, {Y}}}";

}

public struct Vector64
{

public Vector64(long x, long y)
{
X = x;
Y = y;
}

public long X { get; }
public long Y { get; }

public override string ToString() => \$"{{{X}, {Y}}}";

}
```

Example

```var vector1 = new Vector32(15, 39);
var vector2 = new Vector32(87, 64);

Console.WriteLine(vector1 == vector2); // false
Console.WriteLine(vector1 != vector2); // true
Console.WriteLine(vector1 + vector2);  // {102, 103}
Console.WriteLine(vector1 - vector2);  // {-72, -25}```

↑ ↓ to navigate     ↵ to select     Esc to close