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

C# 里 7 個(gè)創(chuàng)建委托的方法

admin
2024年11月22日 14:41 本文熱度 1026

前言

嗨,大家好!

委托是一種強(qiáng)大的工具,可以讓你將方法作為參數(shù)傳遞。

在 C# 中,創(chuàng)建委托有多種方法,每種方法都有其特點(diǎn)和適用場(chǎng)景。

我總結(jié)了 7 個(gè)創(chuàng)建委托的方法,看看有沒(méi)有你不知道的方法?

1. 使用 delegate 關(guān)鍵字

這是最基本的創(chuàng)建委托的方法,通過(guò) delegate 關(guān)鍵字定義一個(gè)委托類(lèi)型

using System;

// 定義一個(gè)委托類(lèi)型
public delegate void MyDelegate();

class Program
{
    static void Main()
    {
        // 創(chuàng)建委托實(shí)例
        MyDelegate myDelegate = new MyDelegate(Method1);
        
        // 添加另一個(gè)方法到委托
        myDelegate += Method2;

        // 調(diào)用委托
        myDelegate();
    }

    static void Method1()
    {
        Console.WriteLine("Method1 called");
    }

    static void Method2()
    {
        Console.WriteLine("Method2 called");
    }
}

2. 使用 Func 泛型委托

C# 提供了內(nèi)置的泛型委托 Func 委托,它可以簡(jiǎn)化創(chuàng)建能夠返回值的方法委托

using System;

class Program
{
    static void Main()
    {
        // 定義一個(gè) Func 委托,接受兩個(gè) int 參數(shù),返回一個(gè) int
        Func<intintintadd = Add;

        // 調(diào)用委托
        int result = add(105);
        Console.WriteLine(result); // 輸出: 15
    }

    static int Add(int a, int b)
    {
        return a + b;
    }
}

Func 委托可以接受最多16個(gè)參數(shù),最后一個(gè)類(lèi)型參數(shù)是方法的返回值。

3. 使用 Action 泛型委托

C# 提供了內(nèi)置的泛型委托 Action 委托,它可以簡(jiǎn)化創(chuàng)建不返回任何值的方法委托

using System;

class Program
{
    static void Main()
    {
        // 定義一個(gè) Action 委托,接受一個(gè) string 參數(shù)
        Action<string> greet = Greet;

        // 調(diào)用委托
        greet("World"); // 輸出: Hello, World
    }

    static void Greet(string name)
    {
        Console.WriteLine($"Hello, {name}");
    }
}

和 Func 委托一樣,Action 委托也可以接受最多16個(gè)參數(shù)

4. 使用匿名方法

匿名方法允許你在定義委托時(shí)直接編寫(xiě)方法體,而不需要單獨(dú)定義一個(gè)方法。

示例

using System;

class Program
{
    static void Main()
    {
        // 定義一個(gè)委托類(lèi)型
        delegate void MyDelegate();

        // 使用匿名方法創(chuàng)建委托實(shí)例
        MyDelegate myDelegate = delegate
        {
            Console.WriteLine("Anonymous method called");
        };

        // 調(diào)用委托
        myDelegate();
    }
}

5. 使用 Lambda 表達(dá)式

Lambda 表達(dá)式是匿名方法的簡(jiǎn)化形式,語(yǔ)法更簡(jiǎn)潔,使用更方便。

示例

using System;

class Program
{
    static void Main()
    {
        // 定義一個(gè) Action 委托,接受一個(gè) string 參數(shù)
        Action<string> greet = name => Console.WriteLine($"Hello, {name}");

        // 調(diào)用委托
        greet("World"); // 輸出: Hello, World
    }
}

6. 使用方法組轉(zhuǎn)換

直接將一個(gè)符合委托簽名的方法名賦值給委托變量,不需要顯式地使用 new 關(guān)鍵字

public delegate void MyDelegate(string message);

public class Program
{
    public static void Main()
    {
        // 直接將方法名賦值給委托
        MyDelegate del = PrintMessage;
        del("你好,通過(guò)方法組轉(zhuǎn)換創(chuàng)建的委托!");
    }

    public static void PrintMessage(string message)
    {
        Console.WriteLine(message);
    }
}

7. 多播委托

多播委托(multicast delegates)是一種特殊的委托類(lèi)型,允許一個(gè)委托引用多個(gè)方法,在調(diào)用委托時(shí),依次執(zhí)行所有引用的方法。

在創(chuàng)建多播委托時(shí),通過(guò) += 操作符將多個(gè)方法添加到一個(gè)委托中。

public delegate void MyDelegate(string message);

public class Program
{
    public static void Main()
    {
        MyDelegate del = PrintMessage;
        del += AnotherMessage; // 添加第二個(gè)方法
        del("你好,多播委托!"); // 調(diào)用所有注冊(cè)的方法
    }

    public static void PrintMessage(string message)
    {
        Console.WriteLine("PrintMessage: " + message);
    }

    public static void AnotherMessage(string message)
    {
        Console.WriteLine("AnotherMessage: " + message);
    }
}

需要注意的是,如果多播委托有返回值,那么返回值將是最后一個(gè)方法的返回值。在應(yīng)用中,建議將多播委托用于void類(lèi)型的返回值的場(chǎng)景,以避免返回最后一個(gè)方法的結(jié)果。

總結(jié)

通過(guò)上述幾種方法,你可以靈活地創(chuàng)建和使用委托。

  • delegate 關(guān)鍵字:適用于需要自定義委托類(lèi)型的情況。
  • Func 和 Action 泛型委托:適用于標(biāo)準(zhǔn)的委托需求,語(yǔ)法簡(jiǎn)潔。
  • 匿名方法:適用于簡(jiǎn)單的、一次性的委托。
  • Lambda 表達(dá)式:語(yǔ)法簡(jiǎn)潔,適用于簡(jiǎn)單的委托。
  • 方法組轉(zhuǎn)換:適用于直接將方法賦值給委托的情況。
  • 多播委托:適用于需要依次調(diào)用多個(gè)方法的情況,比如在 WinForms 中單擊按鈕處理多個(gè)任務(wù)。

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

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
亚洲国产午夜精品理论片 | 中文字幕无线码一区二区 | 日韩精品一区二区三线 | 在线6区不卡一区二区 | 日韩国产亚洲欧美不卡观看 | 最新精品国偷自产在线美女足 |