This documentation is archived and is not being maintained.
Visual Studio .NET 2003
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:
|+, -, !, ~, ++, --, 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 >=.