Dart 有像 c# 这样的扩展方法吗?

Posted

技术标签:

【中文标题】Dart 有像 c# 这样的扩展方法吗?【英文标题】:Does Dart have extension methods like c#? 【发布时间】:2013-07-26 17:33:47 【问题描述】:

你可以在 dart 中创建扩展方法吗?就像你可以在 C# 中一样,例如:

void swap(this CssClassSet ccs, String oldClass, String newClass)

    ccs.remove(oldClass);
    ccs.add(newClass);

用 Dart 可以做这种事情吗?我想扩展 CssClassSet 以拥有 swap(String oldClass, String newClass) 方法。

【问题讨论】:

【参考方案1】:

6 年后,扩展功能终于出现了: https://github.com/dart-lang/language/issues/41#issuecomment-539251446

它们将包含在 dart 2.6 中

【讨论】:

【参考方案2】:

还没有。见issue 9991 - scoped object extensions。

【讨论】:

Rejected 在这种情况下,这是不明智的。这降低了吸引力。 Accepted 在这种情况下没有任何意义。请阅读本期的 Gilad Bracha cmets Add C#-style extension methods。 有一个更新,现在讨论转移here【参考方案3】:

是的,这是introduced in Dart 2.6

语法如下:

extension YourExtension on YourClass 
  void yourFunction() 
    this.anyMember(); // You can access `anyMember` of `YourClass` using `this`.
    anyMember(); // You can access `anyMember` of `YourClass` without `this`.
  


void main() 
  YourClass yourVariable;

  yourVariable.yourFunction(); // valid

您还可以扩展类型,例如 int:

void main() 
  5.fancyPrint();
  3.minusThree; // returns 0


extension FancyInt on int 
  void fancyPrint() => print('The magic number is $this.');

  int get minusThree => this - 3;

你可以learn more here。

【讨论】:

以上是关于Dart 有像 c# 这样的扩展方法吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中重载扩展方法,它有效吗?

如何使用 c# 扩展方法扩展类? [复制]

jsonEncode 不适用于枚举扩展;有解决方法吗?

Dart 语言扩展方法

C# 中是不是有像 C++ 这样的指针?安全吗?

尝鲜 Dart 2.7 最新语法之扩展方法