您可以重定义或重载 C# 中内置的运算符。因此,程序员也可以使用用户自定义类型的运算符。重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的。与其他函数一样,重载运算符有返回类型和参数列表。
例如,请看下面的函数
| 12
 3
 4
 5
 6
 7
 
 | public static Box operator+ (Box b, Box c) {Box box = new Box();
 box.length = b.length + c.length;
 box.breadth = b.breadth + c.breadth;
 box.height = b.height + c.height;
 return box;
 }
 
 | 
 可重载和不可重载运算符
下表描述了 C# 中运算符重载的能力:
运算符 描述
+, -, !, ~, ++, – 这些一元运算符只有一个操作数,且可以被重载。
+, -, *, /, % 这些二元运算符带有两个操作数,且可以被重载。
==, !=, <, >, <=, >= 这些比较运算符可以被重载。
实例
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 
 | using System;
 namespace OperatorOvlApplication
 {
 class Box
 {
 private double length;
 private double breadth;
 private double height;
 
 public double getVolume()
 {
 return length * breadth * height;
 }
 public void setLength( double len )
 {
 length = len;
 }
 
 public void setBreadth( double bre )
 {
 breadth = bre;
 }
 
 public void setHeight( double hei )
 {
 height = hei;
 }
 
 public static Box operator+ (Box b, Box c)
 {
 Box box = new Box();
 box.length = b.length + c.length;
 box.breadth = b.breadth + c.breadth;
 box.height = b.height + c.height;
 return box;
 }
 
 public static bool operator == (Box lhs, Box rhs)
 {
 bool status = false;
 if (lhs.length == rhs.length && lhs.height == rhs.height
 && lhs.breadth == rhs.breadth)
 {
 status = true;
 }
 return status;
 }
 public static bool operator !=(Box lhs, Box rhs)
 {
 bool status = false;
 if (lhs.length != rhs.length || lhs.height != rhs.height
 || lhs.breadth != rhs.breadth)
 {
 status = true;
 }
 return status;
 }
 public static bool operator <(Box lhs, Box rhs)
 {
 bool status = false;
 if (lhs.length < rhs.length && lhs.height
 < rhs.height && lhs.breadth < rhs.breadth)
 {
 status = true;
 }
 return status;
 }
 
 public static bool operator >(Box lhs, Box rhs)
 {
 bool status = false;
 if (lhs.length > rhs.length && lhs.height
 > rhs.height && lhs.breadth > rhs.breadth)
 {
 status = true;
 }
 return status;
 }
 
 public static bool operator <=(Box lhs, Box rhs)
 {
 bool status = false;
 if (lhs.length <= rhs.length && lhs.height
 <= rhs.height && lhs.breadth <= rhs.breadth)
 {
 status = true;
 }
 return status;
 }
 
 public static bool operator >=(Box lhs, Box rhs)
 {
 bool status = false;
 if (lhs.length >= rhs.length && lhs.height
 >= rhs.height && lhs.breadth >= rhs.breadth)
 {
 status = true;
 }
 return status;
 }
 public override string ToString()
 {
 return String.Format("({0}, {1}, {2})", length, breadth, height);
 }
 
 }
 
 class Tester
 {
 static void Main(string[] args)
 {
 Box Box1 = new Box();
 Box Box2 = new Box();
 Box Box3 = new Box();
 Box Box4 = new Box();
 double volume = 0.0;
 
 
 Box1.setLength(6.0);
 Box1.setBreadth(7.0);
 Box1.setHeight(5.0);
 
 
 Box2.setLength(12.0);
 Box2.setBreadth(13.0);
 Box2.setHeight(10.0);
 
 
 Console.WriteLine("Box1: {0}", Box1.ToString());
 Console.WriteLine("Box2: {0}", Box2.ToString());
 
 
 volume = Box1.getVolume();
 Console.WriteLine("Box1 的体积: {0}", volume);
 
 
 volume = Box2.getVolume();
 Console.WriteLine("Box2 的体积: {0}", volume);
 
 
 Box3 = Box1 + Box2;
 Console.WriteLine("Box3: {0}", Box3.ToString());
 
 volume = Box3.getVolume();
 Console.WriteLine("Box3 的体积: {0}", volume);
 
 
 if (Box1 > Box2)
 Console.WriteLine("Box1 大于 Box2");
 else
 Console.WriteLine("Box1 不大于 Box2");
 if (Box1 < Box2)
 Console.WriteLine("Box1 小于 Box2");
 else
 Console.WriteLine("Box1 不小于 Box2");
 if (Box1 >= Box2)
 Console.WriteLine("Box1 大于等于 Box2");
 else
 Console.WriteLine("Box1 不大于等于 Box2");
 if (Box1 <= Box2)
 Console.WriteLine("Box1 小于等于 Box2");
 else
 Console.WriteLine("Box1 不小于等于 Box2");
 if (Box1 != Box2)
 Console.WriteLine("Box1 不等于 Box2");
 else
 Console.WriteLine("Box1 等于 Box2");
 Box4 = Box3;
 if (Box3 == Box4)
 Console.WriteLine("Box3 等于 Box4");
 else
 Console.WriteLine("Box3 不等于 Box4");
 
 Console.ReadKey();
 }
 }
 }
 
 |