是否可以覆盖Dart中的顶级功能?

cor*_*ath 2 function dart

让我们说我有这个顶级功能:

function log(String message) {
    print(message);
}
Run Code Online (Sandbox Code Playgroud)

是否可以在Dart中覆盖此功能?

Mar*_*ioP 6

简单回答:不可以.顶层不能被子类化,因此无法覆盖.

更长的答案:你可以"掩盖"它们,但根据你的用例,这可能不是你想要的.

如果您想要更改由库本身调用的第三方库的顶级方法的行为,这是不可能的(至少,我不知道如何做到这一点).

如果您只想定义一个具有相同名称的方法以在您自己的库中使用,您可以只定义该方法并使用它.如果导入dart文件中需要库和您自己的方法,则可以在库前添加前缀并使用前缀来调用它以区分方法:

import "lib1.dart" as mylib;

void main() {
    log(); // log() method defined in this file
    mylib.log(); // log() method defined in lib1.dart
}
Run Code Online (Sandbox Code Playgroud)