【发布时间】:2017-10-27 06:19:18
【问题描述】:
我正在编写 Kotlin 代码,它的功能之一是扩展方法,除了您使用的语法看起来像实例方法调用之外,它们实际上与普通函数相同。
普通函数
fun blah(x: Int) { println(x) }
val f = blah(1)
扩展方法
fun Int.blah() { println(this) }
val f = 1.blah()
据我了解,C# 扩展方法的工作方式类似。
原则上,通过将第一个参数的类型移动到函数名称的左侧并相应地调整函数体和调用位置(如本例所示),实际上任何非空函数都可以编写为扩展方法。
那么我应该把我所有的函数都写成扩展方法吗?他们都没有?我应该使用什么原则来决定正常编写哪些函数,以及编写哪个作为输入之一的扩展方法?
【问题讨论】:
-
一般来说,IMO,你应该避免扩展你不拥有的对象
-
@AlexeiLevenkov 那是关于扩展方法与继承的。我在问扩展方法与普通函数/静态方法。
-
@MarcusHöglund 你为什么这么认为?您可以确定扩展功能的范围。它们不是全球性的。在我看来,在你不拥有的类上编写扩展是扩展函数的最佳用例之一。它让你编写可读的 DSL。
标签: c# kotlin extension-methods