C# 运算符重载

2018-01-22 17:09 更新

C# 运算符重载

运算符可以为自定义类型重载。

以下符号运算符可以重载:


+(unary) 
-(unary) 
! 
~
++
--
+ 
-
*
/
% 
& 
|
^
<<
>> 
== 
!=
>
<
>= 
<=

以下运算符也是可重载的:隐式和显式转换true和false。

复合赋值运算符(例如,+ =,/ =)通过重写非复合运算符(例如,+,/)而隐式重写。

条件运算符&&和||通过重写按位运算符&和|隐式重写。

运算符函数

运算符通过声明运算符函数重载。

函数的名称使用运算符关键字和运算符符号指定。

运算符函数必须标记为static和public。

操作符函数的参数表示操作数。

运算符函数的返回类型表示表达式的结果。

至少一个操作数必须是声明操作符函数的类型。

在下面的示例中,我们定义一个名为Coin的结构,然后重载+运算符:


public struct Coin {
    int value;
    public Coin (int c) {
       value = c;
    }
    public static Coin operator + (Coin x, int p) {
       return new Coin (x.value + p);
    }
}

这个重载允许我们给一个Coin添加一个int:


Coin B = new Coin (2);
Coin A = B + 2;

重载赋值运算符会自动支持相应的复合赋值运算符。

在我们的示例中,由于我们覆盖+,我们也可以使用+ =:


B += 2;

注意

C#编译器强制执行要定义的逻辑对的运算符。这些运算符是(==!=),(<>)和(<=> =)。

如果你重载==和!=,你通常需要重写对象上定义的Equals和GetHashCode方法。

如果你重载(<>)和(<=> =),你应该实现IComparable和IComparable <T>。

隐式和显式转换是可重载的操作符。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号