隨筆 - 78  文章 - 25  trackbacks - 0
          <2009年10月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿

          隨筆分類(75)

          隨筆檔案(78)

          相冊

          實用Links

          我的Links

          搜索

          •  

          積分與排名

          • 積分 - 114425
          • 排名 - 515

          最新評論

          閱讀排行榜

          評論排行榜

          委托是一種動態調用函數的方式,通過委托可以將一些相同類型的函數串聯起來依次執行。委托是函數回調和事件機制的基礎。
          委托,通過delegate關鍵字來聲明,通過new,+=,-=運算符為其分配函數。
          delegate void StrParaFunc(int no,string str);//定義一個委托,沒有返回值,依次包含兩個數據類型為int和string的參數

          using System;
          using System.Collections.Generic;
          using System.Linq;
          using System.Text;

          namespace useDelegate
          {
              
          class Program
              {
                  
          /// <summary>
                  /// 定義委托
                  /// </summary>
                  /// <param name="no"></param>
                  /// <param name="str"></param>
                  delegate void StrParaFunc(int no, string str);

                  
          static void PrintString(int no, string str) {
                      System.Console.WriteLine(
          "{0}:PrintString:{1}",no,str);
                  }
                  
          static void ShowString(int no, string str)
                  {
                      System.Console.WriteLine(
          "{0}:ShowString:{1}", no, str);
                  }
                  
          static void Main(string[] args)
                  {
                      
          //通過new初始化委托
                      System.Console.WriteLine("**********************");
                      StrParaFunc spfHandler1 
          = new StrParaFunc(PrintString);
                      System.Console.WriteLine(
          "第一個委托對象,有1個引用函數:");
                      spfHandler1(
          1,"a string 1");//委托類型中有一個引用函數,結果有1個    
                      System.Console.WriteLine("**********************");
                      
                      spfHandler1 
          += ShowString;//通過+=增加引用函數
                      System.Console.WriteLine("第一個委托對象,增加了一個引用函數,共2個引用函數:");
                      spfHandler1(
          2,"a string 2");//委托中有兩個引用函數,結果有2個       
                      System.Console.WriteLine("**********************");

                      spfHandler1 
          -= PrintString; //通過-=移除引用函數      
                      System.Console.WriteLine("第一個委托對象,減少了一個引用函數,剩1個引用函數:");
                      spfHandler1(
          3"a string 3"); //委托中有一個引用函數,結果1個
                      System.Console.WriteLine("**********************");

                      
          //通過函數地址直接初始化委托
                      StrParaFunc spfHandler2 = PrintString;
                      spfHandler2(
          4"a string 4");
                      System.Console.WriteLine(
          "**********************");
                      System.Console.ReadLine();
                  }
              }
          }

          運行結果:

          **********************
          第一個委托對象,有1個引用函數:
          1:PrintString:a string 1
          **********************
          第一個委托對象,增加了一個引用函數,共2個引用函數:
          2:PrintString:a string 2
          2:ShowString:a string 2
          **********************
          第一個委托對象,減少了一個引用函數,剩1個引用函數:
          3:ShowString:a string 3
          **********************
          4:PrintString:a string 4
          **********************



          posted on 2009-10-26 15:59 期待明天 閱讀(273) 評論(0)  編輯  收藏 所屬分類: CSharp
          主站蜘蛛池模板: 都江堰市| 泗水县| 西城区| 丹阳市| 西藏| 湄潭县| 安新县| 民丰县| 兴业县| 景泰县| 嘉义市| 吕梁市| 乌兰察布市| 仪陇县| 叙永县| 武功县| 昭通市| 铜鼓县| 高邑县| 靖边县| 万安县| 军事| 曲麻莱县| 桑植县| 营口市| 广汉市| 襄垣县| 大英县| 邯郸市| 茌平县| 广南县| 凉城县| 仪陇县| 邮箱| 宝应县| 九龙坡区| 彭水| 霸州市| 牡丹江市| 信宜市| 青州市|