Export (0) Print
Expand All

Overloadable Operators

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

Show:
© 2014 Microsoft