程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c#重要特性之一委托,

c#重要特性之一委托,

編輯:C#入門知識

c#重要特性之一委托,


委托的構成必須滿足的4個條件:

委托包裝的方法需要滿足以下條件

  • 方法的簽名必須與委托一致,方法簽名包括參數的個數、類型和順序;
  • 方法的返回類型要和委托一致,注意,方法的返回類型不屬於方法簽名的一部分

示例一:

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

namespace ConsoleAppDelegate
{
    class Program
    {
        //1、使用delegate關鍵字來定義一個委托類型
        delegate void MyDelegate(int parm1, int parm2);

        static void Main(string[] args)
        {
            //2、聲明委托變量d
            MyDelegate d;
            //3、實例化委托類型,傳遞的方法也可以為靜態方法,這裡傳遞的是實例方法
            d = new MyDelegate(new Program().Add);
            //4、委托類型作為參數傳遞給另一個方法
            MyMethod(d);
            Console.Read();
        }
        //該方法的定義必須與委托定義相同,即返回類型void,兩個int類型的參數
        void Add(int parm1,int parm2)
        {
            int sum = parm1 + parm2;
            Console.WriteLine("兩個數的和為:"+sum);
        }
        //方法的參數是委托類型
        private static void MyMethod(MyDelegate mydelegate)
        {
            //5、在方法中調用委托
            //mydelegate.Invoke(1, 2);
            mydelegate.Invoke(1, 2);
        }
    }
}

 示例二:

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

namespace ConsoleAppDelegateGreeting
{
    class Program
    {

        static void Main(string[] args)
        {
            Program p = new Program();
            p.Greeting("蒼井空",p.ChineseGreeting);
            p.Greeting("Tommy Li", p.EnglishGreeting);
            Console.Read();
        }
        //定義委托類型
        public delegate void GreetingDelegate(string name);

        //有了委托之後可以像下面這樣實現打招呼方法
        public void Greeting(string name,GreetingDelegate callback)
        {
            //調用委托
            callback(name);
        }
        //美國人打招呼方法
        public void EnglishGreeting(string name)
        {
            Console.WriteLine("Hello, " + name);
        }
        //中國人打招呼方法
        public void ChineseGreeting(string name)
        {
            Console.WriteLine("你好, " + name);
        }
    }
}

總結:

  • 委托封裝了包含特殊返回類型和一組參數的行為,類似包含單一方法的接口;
  • 委托類型聲明中所描述的類型簽名決定了哪個方法可用於創建委托實例,同時決定了調用的簽名;
  • 為了創建委托實例,需要一個方法以及(對於實例方法來說)調用方法的目標;
  • 委托實例是不易變的;
  • 每個委托實例都包含一個調用列表---一個操作列表;
  • 委托實例可以合並到一起,也可以從一個委托實例中刪除另一個;
  • 事件不是委托實例-----只是成對的add/remove方法(類似於屬性的取值方法/賦值方法)

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved