请向我解释扩展方法

我刚看了一下这篇文章: 你见过的扩展方法的最佳或最有趣的用途是什么?

我从来没有听说过扩展方法。 他们适用于所有语言吗?

他们有什么意义? 在那个特定的post中,我不明白这个例子。

它们可用于C#和VB。 它们允许您模拟不受您控制的类的方法添加。

例如,您可以将WordCount方法添加到字符串中。

而不是

MyStringUtils.WordCount( "some string" )

你可以写"some string".WordCount()

 public static class MyExtensions { public static int WordCount(this String str) { return MyStringUtils.WordCount( str ); } } 

这是严格的“语法糖”,有助于提高可读性。 您实际上是在创建一个静态方法,该方法将在IntelliSense中显示为目标类型。

不,他们不适用于所有语言。 它们是一种特定于语言的function,由C#和Visual Basic提供(其他语言可能已采用它们,我不知道)。

它们的关键是为类或接口上的实用程序方法提供方便的语法。 在C#2中,将通过静态类调用实用程序方法,以正常方式传递参数:

 IEnumerable someStrings; int count = EnumerableHelpers.Count(someStrings); 

使用扩展方法,可以使用看起来像普通成员方法语法的东西更方便地编写它:

 int count = someStrings.Count(); 

即使Count()不是IEnumerable接口的成员。 因此,扩展方法允许您将成员添加到您无法控制的类或接口。

他们适用于所有语言吗?

不,但有些语言具有相同的function,但不一定使用相同的名称。 我所知道的是Objective-C和Groovy ,其中的function称为“类别”。