codecamp

C# 运算符重载

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>。

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

C# 可空类型
C# 扩展方法
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }