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

          常用鏈接

          留言簿

          隨筆分類(75)

          隨筆檔案(78)

          相冊

          實用Links

          我的Links

          搜索

          •  

          積分與排名

          • 積分 - 114333
          • 排名 - 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 期待明天 閱讀(271) 評論(0)  編輯  收藏 所屬分類: CSharp
          主站蜘蛛池模板: 从化市| 友谊县| 古田县| 巴塘县| 遂宁市| 万宁市| 囊谦县| 安丘市| 兴仁县| 宁南县| 宽甸| 融水| 岢岚县| 阜宁县| 隆化县| 喀喇| 娄烦县| 新宾| 平昌县| 山东省| 鄂尔多斯市| 措美县| 长葛市| 星子县| 大方县| 广丰县| 南开区| 饶平县| 金坛市| 民勤县| 高安市| 施甸县| 卓资县| 博白县| 军事| 彰武县| 玛曲县| 白河县| 拜泉县| 建湖县| 霍林郭勒市|