2013年9月11日 星期三

[轉貼] 泛用方法 Generic Method

出處:http://www.dotblogs.com.tw/atowngit/archive/2011/03/08/21734.aspx


「泛用方法」甚麼鬼(自己亂取)?以往我們都只用 泛型,哪來這東西。
先來個示意
2011-03-09_093241
2011-03-09_093329

是的,聰明的你,已經看出來。(我都貼一些粗淺的東西)

某些時候我們可能需要定義並使用方法來處理不同資料型別的項目,若是使用 System.Object
又需負擔型別檢查與效能,這時後也許可以考慮使用泛用方法。
1int[] IntArray = { 1, 12, 5, 0, 78, 21 };
2Sort<int>(IntArray);

1string[] arrNames = { "C""A""E" };
2Sort<string>(arrNames);

型別推斷
01//泛用方法
02T Compare<T>(T arg1,Targ2){
03    ...
04}
05 
06//沒有錯誤
07//推斷出型別引數 T 為  int
08Compare(100,65);
09 
10//錯誤
11//無法推斷出型別
12Compare(2,"R");

另外對於陣列,維度數目不同也是會失敗
1void Demo<T>(T[] arg){
2    ...
3}
4 
5void CallDemo(){
6    int[,] MyArray;
7    Demo(MyArray);
8}

注意:
  • 我們可以省略所有的型別引數來叫用型別推斷。如果提供了一個型別引數,就必須提供所有的。
  • 只有泛用方法才支援型別推斷。不可在 類別、結構、介面、委派上叫用型別推斷。

沒有留言:

張貼留言