【问题标题】:How to override a private method from a different library in Dart?如何在 Dart 中覆盖来自不同库的私有方法?
【发布时间】:2020-04-10 15:05:19
【问题描述】:

我有这样的课:

class A {
  int _foo () {
    return 5;
  }
}

我有另一个类扩展了上面的方法并覆盖了私有方法:

class B extends A {
  @override
  int _foo() {
    return super._foo() + 1;
  }
}

BA 在同一个库中时,这将按预期工作。 但是当它们在不同的文件中时,似乎我无法覆盖_foo() 或调用super._foo()

对此有什么解决方法?这甚至可能吗?

请注意,我的真实用例是 A 是第 3 方库,我想覆盖私有方法。

【问题讨论】:

  • 你不能覆盖另一个库中的私有方法。
  • 甚至没有扩展?
  • Dart 扩展是语法糖。它们不允许您从根本上做任何独立功能无法做到的事情。虽然您可以创建一个恰好与现有私有方法同名的扩展方法,但该类库中的现有调用者不会神奇地使用它。
  • 好的。只需将您的评论作为答案,我就会接受。谢谢。

标签: dart


【解决方案1】:

从根本上说,您不能覆盖库的私有方法。

您可以使用其他一些技巧。
1)复制当前代码中的包文件夹并根据需要进行更改。
2)在库类中创建一个公共方法并在其中传递该私有方法。您可以像定义的公共方法一样访问该私有方法。
3) 示例代码:

class A {
  String toString() => _p();
  String _p() => 'A';
}

class B extends A {
  String _p() => 'B';
}

void main() {
  print(new A());
  print(new B());
}

我希望 referanceongoing conversations 一定会有所帮助。 :)。

【讨论】:

    猜你喜欢
    • 2015-08-03
    • 2023-04-09
    • 1970-01-01
    • 2014-05-28
    • 2011-01-01
    • 2013-01-31
    • 2021-09-09
    • 1970-01-01
    相关资源
    最近更新 更多