target:利用泛型,委託 自定義sort排序規則
已有類vector,要對很多的vector例項自定義排序規則。
思路,定義乙個類vectors,繼承list這樣就有了乙個vector型別的集合vectors。這個vectors還有很多的list的方法。
實現list中的sort()方法。
public class vectorpublic class vectors : list
public static class vectordelegates
}vectors route = new vectors();
comparisonsorter = new comparison(vectordelegates.compare);
route.sort(sorter);
以上**省略具體的實現。
1. 首先,.net framework 中有很多模板。原來如果希望某個類有某些功能,因為通用的關係,需要繼承很多的介面。模板類,就是具有固定的方法、屬性的乙個模板。
2. 以list為例:
它裡面有個public void sort(comparisoncomparison); 方法
其中的的引數comparison是委託。
讓我們來看看他的原型:
namespace system
3. 現在我們要自定義這個sort方法,在我們呼叫 route.sort的時候,可以按照我們要求的方式排序。
為了實現自定義的sort,我需要去傳遞乙個函式委託,大概的形式是這樣的:
的例項的名字》.sort(comparison的委託)
4. 那麼就涉及到函式委託怎麼寫:
comparisonsorter= new comparison(被委託的函式名)
要注意,是函式名,不是函式宣告也不是呼叫!
5. 那麼什麼樣的函式可以匹配給委託呢。返回值和引數相同。
觀察這個
public delegate int comparison(t x, t y);,他的返回值是int, 接受兩個t型別的引數。那麼我們也要定義乙個這樣的函式。假定,t是vector型別
public int int compare(vector x, vector y)
於是我們可以在靜態類vectordelegates定義乙個靜態方法compare,用這個方法建立乙個sorter的委託。
comparisonsorter = new comparison(vectordelegates.compare);
最後達到自定義排序規則的目的。
route.sort(sorter); //route 是public class vectors : list的乙個例項。
6.上面的語句也可以簡化為:
route.sort(vectordelegates.compare);
sort的引數是乙個例項,上面的方式是隱式建立的這個類的例項。對vectordelegates.compare()的引用沒有括號,稱為方法組(method group)
C 自定義泛型
using system using system.collections.generic using system.text namespace customgenericcollection public car public class sportscar car 其他方法 public cl...
自定義java泛型
自定義泛型 泛型介面,泛型實現類,泛型方法 泛型介面 package genericity public inte ce box泛型實現類 package genericity public class boximpimplements box override public e get int i...
16 1自定義泛型
自定義泛型 自定義泛型就是乙個資料型別的佔位符或者是乙個資料型別的變數。方法上自定義泛型 修飾符 宣告自定義的泛型 返回值型別 函式名 使用自定義泛型 在泛型中不能使用基本資料型別,如果需要使用基本資料型別,那麼就使用基本資料型別對應的包裝型別。byte byte short short int i...