C# 重载操作符的实现

 1 namespace ProCSharp
 2 {
 3     struct Vector : IEquatable<Vector>    // For value type performance 
 4     {
 5         public Vector(double x, double y, double z)
 6         {
 7             X = x;
 8             Y = y;
 9             Z = z;
10         }
11         public Vector(Vector v)
12             : this(v.X, v.Y, v.Z)
13         {
14         }
15 
16         public double X { get; }
17         public double Y { get; }
18         public double Z { get; }
19         public override string ToString() => $"( {X}, {Y}, {Z} )";
20 
21         public static Vector operator +(Vector left, Vector right)
22             => new Vector(left.X + right.X, left.Y + right.Y, left.Z + right.Z);
23 
24         public static Vector operator *(double left, Vector right)
25             => new Vector(left * right.X, left * right.Y, left * right.Z);
26 
27         public static Vector operator *(Vector left, double right)
28             => right * left;
29 
30         public static double operator *(Vector left, Vector right) 
31             => left.X * right.X + left.Y * right.Y + left.Z * right.Z;
32 
33         // implement IEquatable<Vector> for value type
34         public bool Equals(Vector other)
35         {
36             if (object.ReferenceEquals(other, null))
37                 return false;
38 
39             if (object.ReferenceEquals(this, other))
40                 return true;
41 
42             return (this.X == other.X && this.Y == other.Y && this.Z == other.Z);
43         }
44 
45         // implement override equals
46         public override bool Equals(object obj)
47             => Equals((Vector)obj);
48 
49         public static bool operator ==(Vector left, Vector right)
50             => left.Equals(right);
51 
52         public static bool operator !=(Vector left, Vector right)
53             => !left.Equals(right);
54 
55         public override int GetHashCode() 
56             => X.GetHashCode() ^ Y.GetHashCode() ^ Z.GetHashCode();
57 
58         public static void TestVector()
59         {
60             var vect1 = new Vector(3.0, 3.0, -10.0);
61             var vect2 = new Vector(3.0, 3.0, -10.0);
62             var vect3 = new Vector(2.0, 3.0, 6.0);
63             Console.WriteLine($"vect1 == vect2 returns {(vect1 == vect2)}");
64             Console.WriteLine($"vect1 == vect3 returns {(vect1 == vect3)}");
65             Console.WriteLine($"vect2 == vect3 returns {(vect2 == vect3)}");
66             Console.WriteLine();
67             Console.WriteLine($"vect1 != vect2 returns {(vect1 != vect2)}");
68             Console.WriteLine($"vect1 != vect3 returns {(vect1 != vect3)}");
69             Console.WriteLine($"vect2 != vect3 returns {(vect2 != vect3)}");
70         }
71     }
72 }

 

posted @ 2020-09-26 22:54  libin810610  阅读(112)  评论(0)    收藏  举报