gpt4 book ai didi

c# - 何时使用扩展方法?

转载 作者:行者123 更新时间:2023-12-02 13:24:09 29 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





When should one prefer Kotlin extension functions?

(4 个回答)


4年前关闭。




我正在编写 Kotlin 代码,它的功能之一是扩展方法,除了您使用的语法看起来像实例方法调用外,它们实际上与普通函数相同。

正常功能

fun blah(x: Int) { println(x) }
val f = blah(1)

扩展方法
fun Int.blah() { println(this) }
val f = 1.blah()

据我了解,C# 扩展方法的工作方式类似。

原则上,实际上任何非空函数都可以通过将第一个参数的类型移动到函数名称的左侧并相应地调整函数体和调用位置来编写为扩展方法(如本例所示)。

那我应该把我所有的函数都写成扩展方法吗?他们都没有?我应该使用什么原则来决定正常编写哪些函数,以及编写哪些作为输入之一的扩展方法?

最佳答案

https://kotlinlang.org/docs/reference/extensions.html#extensions-are-resolved-statically

Extensions are resolved statically

Extensions do not actually modify classes they extend. By defining an extension, you do not insert new members into a class, but merely make new functions callable with the dot-notation on variables of this type.

We would like to emphasize that extension functions are dispatched statically, i.e. they are not virtual by receiver type



因此,将所有函数编写为扩展方法并不是一个好方法,因为它们是静态分派(dispatch)的。这消除了覆盖它们的能力,例如在派生类中。

当您进行扩展功能或“普通”功能时,它更像是一种设计选择。

我会向您推荐以下内容:
每当你有一个函数,你会写成一个实用程序函数,它带有一个实用程序类,如 StringUtil.isNullOrEmpty(String) ,使用扩展功能。将其余部分用作“正常”功能。

另请阅读 Kotlin 创建扩展的动机:
https://kotlinlang.org/docs/reference/extensions.html#motivation

关于c# - 何时使用扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46968635/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com