C# 委託及各種寫法

來源:互聯網
上載者:User

標籤:

  • 委託是嘛?

委託是一個型別安全的對象,它指向程式中另一個以後會被調用的方法(或多個方法)。通俗的說,委託是一個可以引用方法的對象,當建立一個委託,也就建立一個引用方法的對象,進而就可以調用那個方法,即委託可以調用它所指的方法。

  • 如何使用委託?

1、定義委託類型

[存取修飾詞]delegate 傳回型別 委託名(形參);

2、聲明委派物件

委託名 委託執行個體名;

3、建立委派物件(確定與哪些方法進行綁定)

委託執行個體名=new 委託名(某個類的方法)

4、使用委託調用方法

委託執行個體名(實參)

  • 委託注意事項:

1、委託和方法必須具有相同的參數。

2、委託可以調用多個方法,即一個委派物件可以維護一個可調用方法的列表而不是單獨的一個方法,稱為多路廣播(多播)。

3、使用+=和-=運算實現方法的增加和減少

  • 樣本
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Delegate;

namespace Delegate
{

public delegate int Call(int num1, int num2);//第一步:定義委託類型
class SimpleMath
{
// 乘法方法
public int Multiply(int num1, int num2)
{
return num1 * num2;
}

// 除法方法
public int Divide(int num1, int num2)
{
return num1 / num2;
}
}
}
class Test
{
static void Main(string[] args)
{
Call objCall;//第二步:聲明委派物件
// Math 類的對象
SimpleMath objMath = new SimpleMath();
// 第三步:建立委派物件,將方法與委託關聯起來
objCall = new Call(objMath.Multiply);

Call objCall1 = new Call(objMath.Divide);
objCall += objCall1;//向委託增加一個方法
//objCall -= objCall1;//向委託減去一個方法
            // 調用委託執行個體,先執行objMath.Multiply,然後執行objMath.Divide
int result = objCall(5, 3);
System.Console.WriteLine("結果為 {0}", result);
Console.ReadKey();
}
}

寫法:

1、委託 委託名=new 委託(會調用的方法名); 委託名(參數);

2、委託 委託名 =會調用的方法名; 委託名(參數);

3、匿名方法

委託 委託名=delegate(參數){會調用的方法體};委託名(參數);

4、拉姆達運算式

委託 委託名=((參數1,。。參數n)=>{會調用的方法體});委託名(參數);

5、用Action<T>和Func<T>,第一個無傳回值

Func<參數1, 參數2, 傳回值> 委託名= ((參數1,參數2) => {帶傳回值的方法體 });傳回值=委託名(參數1,參數2);

貼代碼:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using @delegate; namespace @delegate{        public delegate int Call(int num1, int num2);        class SimpleMath        {            // 乘法方法            public static int Multiply(int num1, int num2)            {                return num1 * num2;            }             // 除法方法            public int Divide(int num1, int num2)            {                return num1 / num2;            }        }    class Test    {        static void Main(string[] args)        {            //--------------------第一種寫法------------------------//            //Call objCall = new Call(SimpleMath.Multiply);            //Call objCall1 = new Call(new SimpleMath().Divide);            //--------------------第二種寫法------------------------//            //Call objCall = SimpleMath.Multiply;            //Call objCall1 = new SimpleMath().Divide;            //--------------------第三種寫法------------------------//            //Call objCall = delegate(int a, int b)            //{            //    return a * b;            //};            //Call objCall1 = delegate(int a, int b)            //{            //    return a / b;            //};            //--------------------第四種寫法------------------------//            //Call objCall =((int a,int b)=> { return a*b;});            //Call objCall1 = ((int a, int b) => { return a / b; });            //--------------------第五種寫法------------------------//            Func<int, int, int> objCall = ((a, b) => { return a * b; });            Func<int, int, int> objCall1 = ((a, b) => { return a / b; });             Action<int, int> ob = ((a, b) => { Console.WriteLine(a * b); });             ob(5, 3);            //----------------------------------------------------//             int result = objCall(5, 3);             int result1 = objCall1(5, 3);             System.Console.WriteLine("結果1為 {0},結果2為{1}", result,result1);            Console.ReadKey();        }    }}

 

C# 委託及各種寫法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.