c#委托與事件(詳解)

前言

.NET中的委托是一個類,它定義瞭方法的類型,是一個方法容器。委托把方法當作參數,可以避免在程序中大量使用條件判斷語句的情況。

項目名為Testclass類名為Program

一、聲明方法

class類中聲明幾個方法,以便委托的使用。

using System;
namespace Test
{
    class Program
    {
        /// <summary>
        /// 返回兩個數中較大者
        /// </summary>
        /// <param name="num1">int類型</param>
        /// <param name="num2">int類型</param>
        /// <returns></returns>
        public static int max(int num1, int num2)
        {
            return num1 > num2 ? num1 : num2;//如果num1大於num2時,就返回num1,否則返回num2
        }
        /// <summary>
        /// 返回兩個數中較小者
        /// </summary>
        /// <param name="num1">int類型</param>
        /// <param name="num2">int類型</param>
        /// <returns></returns>
        public static int min(int num1, int num2)
        {
            return num1 > num2 ? num2 : num1;//如果num1大於num2時,就返回num2,否則返回num1
        }
        static void Main(string[] args)
        {
        }
    }
}

二、聲明委托

聲明時使用delegate關鍵字來聲明委托,委托聲明定義瞭一個從System.Delegate類派生的類。

返回類型需要和方法的返回值類型相同,參數需要和傳入方法的參數列表相同。

在前方也可以添加訪問修飾符privatepublic

聲明委托: delegate [返回類型] [委托名](參數1,參數2,….);

using System;
namespace Test
{
    class Program
    {
        delegate int De(int num1,int num2);
        /// <summary>
        /// 返回兩個數中較大者
        /// </summary>
        /// <param name="num1">int類型</param>
        /// <param name="num2">int類型</param>
        /// <returns></returns>
        public static int max(int num1, int num2)
        {
            return num1 > num2 ? num1 : num2;//如果num1大於num2時,就返回num1,否則返回num2
        }
        /// <summary>
        /// 返回兩個數中較小者
        /// </summary>
        /// <param name="num1">int類型</param>
        /// <param name="num2">int類型</param>
        /// <returns></returns>
        public static int min(int num1, int num2)
        {
            return num1 > num2 ? num2 : num1;//如果num1大於num2時,就返回num2,否則返回num1
        }
        static void Main(string[] args)
        {
        }
    }
}

三、實例化委托

定義委托類後,可以創建委托類的實例,實例化委托的方式有兩種。

實例化委托方式一:[委托名] 變量名= new 委托名(方法名); 實例化委托方式二:[委托名] 變量名= 方法名;

using System;
namespace Test
{
    class Program
    {
        delegate int De(int num1,int num2);
        /// <summary>
        /// 返回兩個數中較大者
        /// </summary>
        /// <param name="num1">int類型</param>
        /// <param name="num2">int類型</param>
        /// <returns></returns>
        public static int max(int num1, int num2)
        {
            return num1 > num2 ? num1 : num2;//如果num1大於num2時,就返回num1,否則返回num2
        }
        /// <summary>
        /// 返回兩個數中較小者
        /// </summary>
        /// <param name="num1">int類型</param>
        /// <param name="num2">int類型</param>
        /// <returns></returns>
        public static int min(int num1, int num2)
        {
            return num1 > num2 ? num2 : num1;//如果num1大於num2時,就返回num2,否則返回num1
        }
        static void Main(string[] args)
        {
            De test1 = new De(max);//實例化委托與方法的對象
            De test2 = new De(min);//實例化委托與方法的對象
        }
    }
}

四、使用委托

在上一個步驟中,test1是委托De與方法max有關的實例化對象

test2是委托De與方法min有關的實例化對象

如果之後需要使用到max方法,就通過test1(參數列表)的方式調用該方法

如果之後需要使用到min方法,就通過test2(參數列表)的方式調用該方法

傳入的參數需要和方法定義的形參相同類型、相同個數

在這裡插入圖片描述

using System;
namespace Test
{
    class Program
    {
        delegate int De(int num1,int num2);
        /// <summary>
        /// 返回兩個數中較大者
        /// </summary>
        /// <param name="num1">int類型</param>
        /// <param name="num2">int類型</param>
        /// <returns></returns>
        public static int max(int num1, int num2)
        {
            return num1 > num2 ? num1 : num2;//如果num1大於num2時,就返回num1,否則返回num2
        }
        /// <summary>
        /// 返回兩個數中較小者
        /// </summary>
        /// <param name="num1">int類型</param>
        /// <param name="num2">int類型</param>
        /// <returns></returns>
        public static int min(int num1, int num2)
        {
            return num1 > num2 ? num2 : num1;//如果num1大於num2時,就返回num2,否則返回num1
        }
        static void Main(string[] args)
        {
            De test1 = new De(max);//實例化委托與方法的對象
            De test2 = new De(min);//實例化委托與方法的對象
            Console.WriteLine("max方法:{0}",test1(10, 20));//調用max方法,並將結果顯示到屏幕
            Console.WriteLine("min方法:{0}",test2(10,20));//調用min方法,並將結果顯示到屏幕
        }
    }
}

總結

本篇文章就到這裡瞭,想能給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: