委托 是一個類型
1.作用: 屏蔽方法名 ,靈活性動態(tài)性函數(shù)指針
2 .使用:
定義一個委托: 和一個類一樣的
delegatevoid Del (int x);
或者
delegatevoid Del <T> (T x);
定一個委托變量和賦值
Main(){
Del d = obj.DoWork; 實例方法或者靜態(tài)方法都可以
}
Del <int> g;
g= Goodone;
g(3333);
3 . 盡管委托可以使用不建議用 out 參數(shù)
但建議您不要將其用于多路廣播事件委托,因為您無法知道哪個委托將被調(diào)用。
4. 委托中的協(xié)變和逆變----
--- 其實函數(shù)傳遞的子類自動適應(yīng)父類參數(shù)和返回值
5 多播 : + - 操作符重載了 可以添加多個 ,
MethodClass obj = new MethodClass();
Del d1 = obj.Method1;
Del d2 = obj.Method2;
Del d3 = DelegateMethod;
Del allMethodsDelegate = d1 + d2;
allMethodsDelegate += d3;
System.Console.WriteLine("-1-");
allMethodsDelegate("xx");
委托和接口都允許-------類設(shè)計的時候-----分離----------類型聲明和實現(xiàn)。
條件:
任何類或結(jié)構(gòu)都能繼承和實現(xiàn)給定的接口。
可以為任何類上的方法創(chuàng)建委托,前提是該方法符合委托的方法簽名。
目的:
接口引用或委托可由不了解實現(xiàn)(動態(tài)性)該接口或委托方法的類的對象使用。
既然存在這些相似性,那么類設(shè)計器何時應(yīng)使用委托,何時又該使用接口呢?
使用委托:
· 當使用事件設(shè)計模式時。
· 當封裝靜態(tài)方法可取時。
· 當調(diào)用方不需要訪問實現(xiàn)該方法的對象中的其他屬性、方法或接口時。
· 需要方便的組合。
A - B - c
B –a –c
C –b –a
· 當類可能需要該方法的多個實現(xiàn)時。
--不是override 是函數(shù)返回值相同.但是參數(shù)不同
類型 A
Void method_a (string );
Void method_b(string);
Void method_c(string);
不同的方法名字,但是同一個方法的
使用接口:
· 當存在一組可能被調(diào)用的相關(guān)方法時。
--- 多個不同函數(shù) , 需要
一個接口里面包含多個方法, 因為一個邏輯關(guān)系可能被調(diào)用. 所以放在一起
· 當類只需要方法的單個實現(xiàn)時。
· 當使用接口的類想要將該接口強制轉(zhuǎn)換為其他接口或類類型時。
多個接口套用
· 當正在實現(xiàn)的方法鏈接到類的類型或標識時:例如比較方法。
使用單一方法接口而不使用委托的一個很好的示例是 IComparable 或泛型版本 IComparable(T)。IComparable聲明 CompareTo 方法,該方法返回一個整數(shù),指定相同類型的兩個對象之間的小于、等于或大于關(guān)系。
IComparable可用作排序算法的基礎(chǔ)。雖然將委托比較方法用作排序算法的基礎(chǔ)是有效的,但是并不理想。因為進行比較的能力屬于類,
而比較算法不會在運行時改變,
所以單一方法接口是理想的。