C#高級功能(四)擴展方法和索引


擴展方法使你能夠向現有類型“添加”方法,而無需創建新的派生類型、重新編譯或以其他方式修改原始類型。
擴展方法是一種特殊的靜態方法,但可以像擴展類型上的實例方法一樣進行調用。擴展方法被定義為靜態方法,但它們是通過實例方法語法進行調用的。  它們的第一個參數指定該方法作用於哪個類型,並且該參數以 this 修飾符為前綴。  僅當你使用 using 指令將命名空間顯式導入到源代碼中之后,擴展方法才位於范圍中。

最常見的擴展方法是 LINQ 標准查詢運算符,它將查詢功能添加到現有的 System.Collections.IEnumerable
和 System.Collections.Generic.IEnumerable<T> 類型。
若要使用標准查詢運算符,請先使用 using System.Linq 指令將它們置於范圍中。
在 IEnumerable<T> 類型的實例后鍵入“.”時,可以在 IntelliSense 語句完成中看到這些附加方法。

int[] ints = { 1, 2, 4,3, 2, 2 };
var result = ints.OrderBy(x=> x);
    public static class MyExtensions
    {
        public static void WordCount(this string str)
        {
            Console.Write(str);
        }
    }  

索引器允許類或結構的實例就像數組一樣進行索引。 索引器類似於屬性,不同之處在於它們的取值函數采用參數。

索引器概述
使用索引器可以用類似於數組的方式為對象建立索引。
get 取值函數返回值。 set 取值函數分配值。
this 關鍵字用於定義索引器。
value 關鍵字用於定義由 set 索引器分配的值。
索引器不必根據整數值進行索引;由你決定如何定義特定的查找機制。
索引器可被重載。
索引器可以有多個形參,例如當訪問二維數組時。

class SampleCollection<T>
{
    private T[] arr = new T[100];  
    /**
     * 索引器在語法上方便您創建客戶端應用程序可將其作為數組訪問的類、結構或接口。 索引器經常是在主要用於封裝內部集合或數組的類型中實現的。
     * 索引器允許類或者結構的實例按照與數組相同的方式進行索引取值,索引器與屬性類似,不同的是索引器的訪問是帶參的。
     * 索引器和數組比較:
     * (1)索引器的索引值(Index)類型不受限制
     * (2)索引器允許重載
     * (3)索引器不是一個變量
     * 索引器和屬性的不同點
     * (1)屬性以名稱來標識,索引器以函數形式標識
     * (2)索引器可以被重載,屬性不可以
     * (3)索引器不能聲明為static,屬性可以
     * 索引器值不屬於變量;因此,不能將索引器值作為 ref 或 out 參數進行傳遞。
     * **/
   public T this[int i] { get { return arr[i]; } set { arr[i] = value; } }

     public string this[ string s] { get { return " Test Return " + s; } }
}

class Program
{
    static void Main(string[] args)
    {
        SampleCollection<string> stringCollection = new SampleCollection<string>();
        stringCollection[0] = "Hello, World";
        System.Console.WriteLine(stringCollection[0]);
 System.Console.WriteLine(stringCollection["Hello,World"]);
} }
// Output:
//Hello, World.
// Hello, World.
 

 

其他的基礎功能

1.  C#高級功能(四)擴展方法和索引

2. C#高級功能(三)Action、Func,Tuple

3. C#高級功能(二)LINQ 和Enumerable類

4. C#高級功能(一)Lambda 表達式

5. C#中泛型的解釋(object,list,var,dynamic的區別)

6. C#中委托

7. C#和.NET版本對比


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM