请向我解释扩展方法

l--*_*''' 6 c# vb.net extension-methods

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

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

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

ito*_*son 7

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

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

IEnumerable<string> someStrings;
int count = EnumerableHelpers.Count(someStrings);
Run Code Online (Sandbox Code Playgroud)

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

int count = someStrings.Count();
Run Code Online (Sandbox Code Playgroud)

即使Count()不是IEnumerable<string>界面的成员.所以扩展方法让你看起来成员添加到类或你不控制接口.


Rya*_*rle 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 );
    }
} 
Run Code Online (Sandbox Code Playgroud)

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