JUST DO IT ~

          我只想當個程序員

          dotnet 委托


          委托 是一個類型



          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ǔ)是有效的,但是并不理想。因為進行比較的能力屬于類,

          而比較算法不會在運行時改變,

          所以單一方法接口是理想的。






          posted on 2009-02-01 11:06 小高 閱讀(238) 評論(0)  編輯  收藏 所屬分類: DotNet

          導航

          <2009年2月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          1234567

          統(tǒng)計

          常用鏈接

          留言簿(3)

          隨筆分類(352)

          收藏夾(19)

          關(guān)注的blog

          手冊

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 潞西市| 宜宾县| 齐齐哈尔市| 四会市| 漾濞| 湖北省| 灵川县| 台中县| 丽水市| 皮山县| 翼城县| 辽阳县| 锦屏县| 杨浦区| 峨山| 泰宁县| 葵青区| 高州市| 新巴尔虎左旗| 内黄县| 贺兰县| 隆回县| 衡阳县| 齐河县| 新营市| 四子王旗| 吉安县| 漠河县| 襄樊市| 瑞金市| 察雅县| 五常市| 乐昌市| 全椒县| 张家口市| 九龙县| 萨嘎县| 台中市| 宾阳县| 醴陵市| 南投县|