狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#程序開發(fā)入門基礎(chǔ)技術(shù)—delegate(委托)

admin
2024年12月29日 8:20 本文熱度 86

1. 委托的定義和使用

  • 委托的作用:如果要把方法作為函數(shù)來進(jìn)行傳遞的話,就要用到委托。委托是一個類型,這個類型可以賦值一個方法的引用。C#的委托 通過 delegate 關(guān)鍵字來聲明。
  • 聲明委托的方式:
    // 第一種方式
    delegate void MyDelegate_1(int x);
    // 第二種方式
    delegate void MyDelegate_2<T>(T x);
  • 使用委托的方式:
    // 第一種方式
    MyDelegate_1 mydelegate = new MyDelegate_1( func );
    // 第二種方式
    MyDelegate_1 mydelegate = func;
委托調(diào)用方法
// 例子
public class Delegate : MonoBehaviour
{
 public delegate void ShowDelegate();
 public delegate double MultiplyDelegate(double x, double y);
 void Start()
    {
 ShowDelegate show = new ShowDelegate(Show_1);
 MultiplyDelegate mul = Multiply;
 // 直接調(diào)用
 show();
 Debug.Log(mul(2f, 3f));
 // 調(diào)用invoke方法
 show.Invoke();
 Debug.Log(mul.Invoke(2f, 3f));
    }
 public void Show_1()
    {
 Debug.Log("Show1");
    }
 public double Multiply(double x, double y)
    {
 return x * y;
    }
}

2. 系統(tǒng)內(nèi)置Action委托

Action委托:

  • Action<T>
    是 .NET Framework 內(nèi)置的泛型委托,可以使用 Action<T>委托以參數(shù)形式傳遞方法,而不用顯式聲明自定義的委托。
  • 封裝的方法必須與此委托定義的方法簽名相對應(yīng)。即 封裝的方法必須具有一個通過值傳遞給它的參數(shù),并且不能有返回值。 還有一種是非泛型委托 Action

注意:

  • Action
    委托至少 0 個參數(shù),至多 16 個參數(shù),無返回值;
  • Action
    表示無參,無返回值的委托;
  • Action<int, string>
    表示有傳入?yún)?shù)intstring無返回值的委托;
  • Action<int, string, bool>
    表示有傳入?yún)?shù)intstringbool無返回值的委托;
  • Action<int, int, int, int>
    表示有傳入4個int型參數(shù),無返回值的委托。
// 案例
// 使用Action、Func等委托時,需要添加 using System;
public class SystemAction : MonoBehaviour
{
    void Start()
    {
        // 無參
        Action action_1 = Show_1;
        action_1();

        // 帶參
        Action<int, int> action_2 = Show_2;
        action_2(1, 2);

    }
    void Show_1()
    {
        Debug.Log("Show_1");
    }
    void Show_2(int a, int b)
    {
        Debug.Log("Show_2 " + (a + b));
    }
}

3. 系統(tǒng)內(nèi)置Func委托

Func委托:Func是 .NET Framework 內(nèi)置的帶有返回類型的泛型委托

注意:

  • Func
    至少 0 個輸入?yún)?shù),至多 16 個輸入?yún)?shù),根據(jù)返回值泛型返回。必須有返回值,不可用void
  • Func<int>
    表示沒有輸入?yún)?shù),返回值為int類型的委托;
  • Func<object, string, int>
    表示傳入?yún)?shù)為objectstring,返回值類型為int的委托;
  • Func<T1, T2, T3, int>
    表示傳入?yún)?shù)為T1, T2, T3(泛型),返回值為int類型的委托。
/**
 * System.Func 可以不帶參數(shù),但是必須帶一個返回值
 * System.Func 若是調(diào)用的多個泛型的委托定義,最后參數(shù)的數(shù)據(jù)類型是函數(shù)的返回值類型,需要保持一致;
 * 非最后一個泛型的聲明,需要與實現(xiàn)函數(shù)的參數(shù)個數(shù)及類型保持一致
 */
public class SystemFunc : MonoBehaviour
{
    void Start()
    {
        // 不帶參數(shù),返回值為string類型
        Func<string> func_1 = Show_1;
        string a = func_1();
        Debug.Log(a);
        // 帶int類型參數(shù),返回值為string類型
        Func<int, string> func_2 = Show_2;
        string b = func_2(100);
        Debug.Log(b);
        // 拋出異常FormatException: Input string was not in a correct format.
        /*Func<string, int > func_3 = Show_3;
        int c = func_3("s");
        Debug.Log(c);*/
    }
    string Show_1()
    {
        return "Show_1";
    }
    String Show_2(int a)
    {
        return a.ToString();
    }
    int Show_3(string x)
    {
        return int.Parse(x);
    }
}

4. 匿名方法、event事件、多播委托

匿名方法:沒有名字的方法稱之為匿名方法。

Event事件:Event事件本身就是一種委托,只是該委托只能作為類的成員,且不可在類外進(jìn)行調(diào)用。

多播委托:在 C# 語言中,多播委托是指在一個委托中注冊多個方法,在注冊方法時可以在委托中使用加號運算符或者減號運算符來實現(xiàn)添加或撤銷方法。

/**
 * 1. 匿名事件
 * 2. event事件
 * (1)event事件 只允許作為類的成員變量,且僅在類的內(nèi)部使用才可以,外部不得直接調(diào)用
 * (2)當(dāng)作為一個類的成員,event事件在外部類賦值時,只能通過 +=/-= 的方式;而對于普通的Action則可以 =/+=/-=的方式進(jìn)行賦值
 * (3)可通過在類中定義方法調(diào)用event事件,外部類間接地調(diào)用這個方法來調(diào)用event
 * 3. 多播委托 += -=
 * 委托屬于引用類型,引用類型的默認(rèn)值為null,直接使用會報空異常;
 * 故在使用之前需要先判斷委托對象(引用對象)是否為空
 */
public class MyEventClass
{
    public event Action action_3;
    public Action action_4;

    // event事件調(diào)用
    public void Send()
    {
        if(action_3 != null)
        {
            action_3();
        }
    }
}

public class Broadcast : MonoBehaviour
{
    // event事件
    event Action action_2;

    void Start()
    {
        // Action action = Show_1; 將該語句轉(zhuǎn)為匿名
        Action action = delegate ()  // 匿名函數(shù)
        {
            Debug.Log("匿名函數(shù)被執(zhí)行");
        };
        action();
        // 多播委托
        Action action_1 = Show_1;
        action_1 += Show_2;
        //action_1 -= Show_2;
        //action_1 -= Show_1;
        if (action != null)
        {
            action_1();
        }

        action_2 = Show_1;
        action_2();

        MyEventClass mEvent = new MyEventClass();
        mEvent.action_3 += Show_2;
        mEvent.Send();
        mEvent.action_4 = Show_2;
        mEvent.action_4();
    }
    void Show_1()
    {
        Debug.Log("Show_1被執(zhí)行");
    } 
    void Show_2()
    {
        Debug.Log("Show_2被執(zhí)行");
    }
}

該文章在 2024/12/30 12:41:29 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved