擴展方法使你能夠向現有類型“添加”方法,而無需創建新的派生類型、重新編譯或以其他方式修改原始類型。
擴展方法是一種特殊的靜態方法,但可以像擴展類型上的實例方法一樣進行調用。擴展方法被定義為靜態方法,但它們是通過實例方法語法進行調用的。 它們的第一個參數指定該方法作用於哪個類型,並且該參數以 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]; 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.