公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

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

C#委托的常見模式及應(yīng)用舉例

admin
2024年3月11日 16:37 本文熱度 1098

在C#編程中,委托是一種類型安全的函數(shù)指針,它允許將方法作為參數(shù)傳遞或賦值給變量。委托的靈活性和強(qiáng)大功能使得它在事件處理、異步編程、回調(diào)函數(shù)等場(chǎng)景中得到了廣泛應(yīng)用。下面將介紹C#中幾種常見的委托模式,并通過具體例子來說明它們的應(yīng)用。

1. 事件模式

事件模式是C#中最常見的委托應(yīng)用之一。通過定義事件,類可以通知其他對(duì)象當(dāng)某些特定事情發(fā)生時(shí)。事件通常使用委托類型來聲明,并且只允許在定義它的類內(nèi)部觸發(fā)。

// 聲明一個(gè)委托類型用于事件處理

  public delegate void MyEventHandler(object sender, EventArgs e);

  // 定義一個(gè)包含事件的類

  public class MyClass

  {

      // 聲明事件

      public event MyEventHandler MyEvent;

        // 保護(hù)方法,用于觸發(fā)事件

      protected virtual void OnMyEvent(EventArgs e)

      {

          MyEvent?.Invoke(this, e);

      }

        // 一個(gè)方法,當(dāng)某些條件滿足時(shí)觸發(fā)事件

      public void DoSomething()

      {

          // ... 執(zhí)行一些操作 ...

          OnMyEvent(EventArgs.Empty); // 觸發(fā)事件

      }

  }

    // 使用事件的客戶端代碼

  class Program

  {

      static void Main(string[] args)

      {

          MyClass myObject = new MyClass();

          myObject.MyEvent += new MyEventHandler(MyObject_MyEvent); // 訂閱事件

          myObject.DoSomething(); // 執(zhí)行操作,觸發(fā)事件

      }

        static void MyObject_MyEvent(object sender, EventArgs e)

      {

          Console.WriteLine("MyEvent was raised!"); // 事件處理邏輯

      }

  }

2. 回調(diào)模式

回調(diào)模式允許將一個(gè)方法作為參數(shù)傳遞給另一個(gè)方法,并在適當(dāng)?shù)臅r(shí)候調(diào)用它。這在異步操作、定時(shí)器回調(diào)等場(chǎng)景中非常有用。

// 聲明一個(gè)委托用于回調(diào)

  public delegate void Callback(string result);

// 一個(gè)執(zhí)行異步操作并回調(diào)的類

  public class AsyncOperation

  {

      public void Start(Callback callback)

      {

          // 模擬異步操作(例如,使用TaskThread

          string result = "Operation completed";

          callback?.Invoke(result); // 調(diào)用回調(diào)方法

      }

  }

    // 使用回調(diào)的客戶端代碼

  class Program

  {

      static void Main(string[] args)

      {

          AsyncOperation op = new AsyncOperation();

          op.Start(OperationCompleted); // 開始異步操作并指定回調(diào)方法

      }

        static void OperationCompleted(string result)

      {

          Console.WriteLine(result); // 處理異步操作的結(jié)果

      }

  }

3. 多播委托

多播委托允許將一個(gè)委托變量關(guān)聯(lián)到多個(gè)方法,當(dāng)委托被調(diào)用時(shí),所有關(guān)聯(lián)的方法都會(huì)按順序執(zhí)行。

// 聲明一個(gè)多播委托用于處理事件或回調(diào)

  public delegate void MultiCastDelegate(string message);

  class Program

  {

      static void Main(string[] args)

      {

          MultiCastDelegate mcd = MessageHandler1; // 關(guān)聯(lián)第一個(gè)方法

          mcd += MessageHandler2; // 關(guān)聯(lián)第二個(gè)方法,形成多播委托

          mcd("Hello, world!"); // 調(diào)用委托,兩個(gè)方法都會(huì)被執(zhí)行

      }

        static void MessageHandler1(string message)

      {

          Console.WriteLine("Handler 1: " + message);

      }

        static void MessageHandler2(string message)

      {

          Console.WriteLine("Handler 2: " + message);

      }

  }

class Program

  {

      static void Main(string[] args)

      {

          // 創(chuàng)建一個(gè)Action委托實(shí)例,它不接受任何參數(shù)且沒有返回值

          Action myAction = null;

            // 使用+=運(yùn)算符來添加多個(gè)方法或Lambda表達(dá)式到多播委托

          myAction += () => Console.WriteLine("Lambda expression 1 executed.");

          myAction += () => Console.WriteLine("Lambda expression 2 executed.");

          myAction += MethodToInvoke; // 添加一個(gè)方法到多播委托

            // 調(diào)用多播委托,所有添加的方法或Lambda表達(dá)式都會(huì)被執(zhí)行

          myAction();

            // 也可以繼續(xù)添加更多的方法或Lambda表達(dá)式到多播委托

          myAction += () => Console.WriteLine("Another lambda expression executed.");

            // 再次調(diào)用多播委托,新添加的方法或Lambda表達(dá)式也會(huì)被執(zhí)行

          myAction();

      }

        // 一個(gè)與Action委托簽名匹配的方法

      static void MethodToInvoke()

      {

          Console.WriteLine("MethodToInvoke executed.");

      }

  }

4.委托作為返回值

// 聲明一個(gè)委托

  public delegate string StringOperation(string input);

class Program

{

      static void Main(string[] args)

      {

          // 創(chuàng)建一個(gè)返回委托的方法實(shí)例

          StringOperation operation = GetOperation();

          // 調(diào)用返回的委托

          string result = operation("Hello, world!");

          Console.WriteLine(result); // 輸出: HELLO, WORLD!

      }

        // 一個(gè)方法,它返回一個(gè)委托實(shí)例,該實(shí)例指向ToUpper方法

      static StringOperation GetOperation()

      {

          // 返回指向ToUpper方法的委托

          return new StringOperation(string.ToUpper);

      }

  }

5.Lambda表達(dá)式和委托

Lambda表達(dá)式提供了一種簡(jiǎn)潔的方式來創(chuàng)建匿名函數(shù),這些函數(shù)可以直接賦值給委托變量。Lambda表達(dá)式使得委托的使用更加靈活和方便。

// 聲明一個(gè)委托類型

  public delegate int BinaryOp(int x, int y);

  class Program

  {

      static void Main(string[] args)

      {

          // 使用Lambda表達(dá)式創(chuàng)建一個(gè)BinaryOp委托實(shí)例

          BinaryOp add = (x, y) => x + y;            // 調(diào)用委托實(shí)例

          int sum = add(5, 3);

          Console.WriteLine("Sum: " + sum); // 輸出: Sum: 8

      }

  }


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

主站蜘蛛池模板: 国产女同女互慰流白浆视频 | 国产成人综合欧 | 国产精品国产三级国av | 国产精品白浆无码流出 | 国产毛片三级在线 | 成人欧美一区二区三区黑人 | 国产精品一级aa片 | 国产精品成人免费视频网站 | 2025国产无码免费视频 | 精品国产免费观看久久久 | 国产精品一区二区av麻豆 | 国产精品丝袜综合区另类 | 国产v乱码一区二 | 国产成人电影在线观看 | 国产日韩欧美一区二区三区在线 | 国产成a人片 | 国产av无码专区亚洲av桃花 | 精品无码av毛片一区二区三区 | 国产99久60在线视频 | 国产精品孕妇video视频 | 国产麻豆精品久 | 国产精品亚洲玖玖玖在线靠爱 | 国产欧美日韩av成人久久 | 国产不卡在线观看免费视频 | 国产做a爰片久久毛片a片 | 国产欧美日韩综合精品二区久久 | 91国内精品线免费播放 | 国产美女自慰喷水 | 成人国产综合一区二区在 | 国产对白叫床清晰在线播放中 | 精品一区二区三区国产在线观看 | 国产喷水在线观看 | 国产成人综合美国十次 | 国产精品一品二区三区的使用体验 | 国产高级会所按摩 | 国产欧美日韩视频在线不卡 | 国产精品白浆精子流水合集 | 国产极品白嫩精品无码视频 | 国产精品三级在线播放 | 2025国产成人福利精品视频 | 国产精品视频白浆免费视频 |