请向我解释扩展方法

时间:2010-03-06 00:31:43

标签: c# vb.net extension-methods

我刚看过这篇帖子:What is the best or most interesting use of Extension Methods you’ve seen?

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

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

3 个答案:

答案 0 :(得分:7)

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

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

IEnumerable<string> someStrings;
int count = EnumerableHelpers.Count(someStrings);

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

int count = someStrings.Count();

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

答案 1 :(得分:5)

它们可用于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中显示为目标类型。

答案 2 :(得分:1)

  

他们是否适用于所有语言?

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

相关问题