0

私は何か基本的なものが欠けているかもしれませんが、どうしてこの方法はどうなるのでしょうか?

namespace System.Net
{
    public static class WebClientExtensions
    {        
        public static Task<byte[]> DownloadDataTask(this WebClient webClient, string address)
        {
            return DownloadDataTask(webClient, new Uri(address));
        }
    }
}

このように呼ばれます:

return new WebClient().DownloadDataTask(url)

これは、ParallelExtensionsExtras Tour-#16-WebClientの非同期タスクから取得したものです。

4

1 に答える 1

1

このようなメソッドは拡張メソッドと呼ばれます。これは、最初のパラメーターの前にあることで区別されthis、そのパラメーターのインスタンスメソッドであるかのように呼び出すことができます。

だから、あなたが書いたコード:

new WebClient().DownloadDataTask(url)

実際には、次とまったく同じです。

WebClientExtensions.DownloadDataTask(new WebClient(), url)

利点は、構文が優れていることです。たとえば、ほとんどすべてのLINQも拡張メソッドに基づいています。

于 2013-01-19T15:03:51.567 に答える