C# 中那些可以被重载的操作符,以及使用它们的那些丧心病狂的语法糖

栏目: C# · 发布时间: 6年前

内容简介:C# 中的操作符重载并不新鲜。然而,到底有哪些操作符可以重载,重载操作符可以用来做哪些丧心病狂的事情呢?本文收集了 C# 中所有可以重载的操作符,并且利用他们做了一些丧心病狂的语法糖。

C# 中的操作符重载并不新鲜。然而,到底有哪些操作符可以重载,重载操作符可以用来做哪些丧心病狂的事情呢?

本文收集了 C# 中所有可以重载的操作符,并且利用他们做了一些丧心病狂的语法糖。

可以重载的操作符

操作符的重载比想象中的更加强大。因为——重载操作符时可以随意定义操作符中操作数的数据类型和返回值的类型。

是的!不只是操作数,连返回值类型也能被重载!

一元操作符

+ , - , ! , ~ , ++ , -- , true , false

通过重载这些操作符,你可以改变某种类型操作后的返回类型和返回值。

不过,等等! +- 怎么会是一元操作符?不要忘了正数和负数哦! +5-6 这些其实是在使用一元操作符,而不是单纯的整数哦。

truefalse 也能被重载?是的,重载之后,你可以改变 if(foo) 这样的判断的行为。参见: C# 很少人知道的科技

二元操作符

+ , - , * , / , % , & , | , ~ , ^ , << , >>

其中 ~ 操作符的重载是微软操作符重载部分的官方文档中并没有提及的。不过 Avalonia 项目利用这个不怎么常用的运算符做出了丧心病狂的绑定语法糖。参见 Avalonia/Popup.cs at master · AvaloniaUI/Avalonia

_popupRoot = new PopupRoot(DependencyResolver)
{
    [~ContentControl.ContentProperty] = this[~ChildProperty],
    [~WidthProperty] = this[~WidthProperty],
    [~HeightProperty] = this[~HeightProperty],
    [~MinWidthProperty] = this[~MinWidthProperty],
    [~MaxWidthProperty] = this[~MaxWidthProperty],
    [~MinHeightProperty] = this[~MinHeightProperty],
    [~MaxHeightProperty] = this[~MaxHeightProperty],
};

必须成对重载的操作符

== , != , < , > , <= , >=

其实成对重载并不是什么很大的限制,大不了都写了就行。不过,重载它们依然能写出强大的语法糖代码来。

虽不可被重载,却能被定义的操作符

索引器 [] , 显示转换或隐式转换 (T) x

前面 Avalonia 的绑定语法糖就充分利用了索引器的特点,使得能够在对象初始化器中初始化那些本没有直接定义在类型中的属性。

虽不可被重载,却能够被间接重载的操作符

+= , -= , *= , /= , %= , &= , |= , ^= , <<= , >>=

这些操作符不可被重载。不过,其实它们都算作是原本的二元操作符与赋值操作的组合。所以,可以通过重载二元操作符来达到间接重载这些操作符。(当然,这样的方式,其赋值的作用是绝对丢不掉的)。

不可被重载的操作符

= , . , ?: , ?? , -> , => , as , checked , unchecked , default , delegate , is , new , sizeof , typeof

以上虽然 ?? 不可被重载,但可以间接修改其行为,阅读 C# 空合并操作符(??)不可重载?其实有黑科技可以间接重载! 就可以了解如何实现啦!

参考资料


以上所述就是小编给大家介绍的《C# 中那些可以被重载的操作符,以及使用它们的那些丧心病狂的语法糖》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

打造有吸引力的学习型社群

打造有吸引力的学习型社群

苏平、田士杰、吕守玉 / 机械工业出版社 / 45.00元

本书首先对社群的定位、准备和吸引粉丝方面等做了饶有趣味的介绍,从社群黏度的提升、社群知识的迭代与转化和社群的持续发展等多个角度入手,对学习型社群的运营手段、运营模式、运营规律和运营经验等进行了全方位剖析。从中国培训师沙龙这个公益社群近十年成功运营的经验中,为如何经营好学习型社群总结出了一套系统性的、具有实操价值的方法。并以此为基础,扩展到知识管理、团队管理、内容IP等领域,为有致于社团建设以及优质......一起来看看 《打造有吸引力的学习型社群》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具