【C#】C# in deep 擴充方法

來源:互聯網
上載者:User

標籤:靜態   new   瞭解   none   where   理念   src   copy   web   

C#3 引入的擴充方法這一個理念.

擴充方法最明顯的特徵是在方法參數中第一個參數有this聲明. 其實C#庫中有很多已經是擴充方法了.比如linq中對序列使用的查詢語句, where, select等都是經過擴充的方法.

 

由於有很多抽象的方法, 比如stream這種, 在很多繼承類裡面沒有完全的達到使用者的目的, 使用者往往需要自己寫一個工具類, 例如StreamUtil來維護所有的繼承類, 一般這種工具類都是靜態. C#3可以使用擴充方法來改進這一需求的實現.

例如代碼:

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.IO; 7  8 namespace DennisDemos.Demos 9 {10     public static class StreamUtil11     {12         const int BufferSize = 8192;13         public static void Copy(Stream input, Stream output)14         {15             byte[] buffer = new byte[BufferSize];16             int read;17             while ((read = input.Read(buffer,0,buffer.Length)) > 0)18             {19                 output.Write(buffer, 0, read);20             }21         }22         public static byte[] ReadFully(Stream input)23         {24             using (MemoryStream ms = new MemoryStream())25             {26                 Copy(input, ms);27                 return ms.ToArray();28             }29         }30     }31 }
StreamUtil
1 WebRequest request = WebRequest.Create("http://www.baidu.com");2             using (WebResponse response = request.GetResponse())3             using (Stream responseStream = response.GetResponseStream())4             using (FileStream output = File.Create("response.dat"))5             {6                 StreamUtil.Copy(responseStream, output);7             }
View Code

瞭解擴充方法的使用時機以及方式

並不是所有方法都可以作為擴充方法使用, 他必須具備以下特徵:

1. 必須在一個非嵌套的, 非泛型的靜態類中(所以必須是一個靜態方法)

2. 至少要有一個參數

3. 第一個參數必須附加this

4. 第一個參數不能有其他任何修飾符, 比如ref

5. 第一個參數的類型不能使指標類型.

這裡第一個參數的類型成為方法的擴充類型.

【C#】C# in deep 擴充方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.