 |
| C# Programmer's Reference |
|
C# allows user-defined types to overload operators by defining static member functions using the operator keyword. Not all operators can be overloaded, however, and others have restrictions, as listed in this table:
| Operators |
Overloadability |
| +, -, !, ~, ++, --, true, false |
These unary operators can be overloaded. |
| +, -, *, /, %, &, |, ^, <<, >> |
These binary operators can be overloaded. |
| ==, !=, <, >, <=, >= |
The comparison operators can be overloaded (but see note below). |
| &&, || |
The conditional logical operators cannot be overloaded, but they are evaluated using & and |, which can be overloaded; see 7.11.2 User-defined conditional logical operators. |
| [] |
The array indexing operator cannot be overloaded, but you can define indexers. |
| () |
The cast operator cannot be overloaded, but you can define new conversion operators (see explicit and implicit). |
| +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>= |
Assignment operators cannot be overloaded, but +=, for example, is evaluated using +, which can be overloaded. |
| =, ., ?:, ->, new, is, sizeof, typeof |
These operators cannot be overloaded. |
Note The comparison operators, if overloaded, must be overloaded in pairs; that is, if == is overloaded, != must also be overloaded. The reverse is also true, and similar for < and >, and for <= and >=.
See Also
C# Operators | Operator Overloading Tutorial
|
 |