亚洲乱色熟女一区二区三区丝袜,天堂√中文最新版在线,亚洲精品乱码久久久久久蜜桃图片,香蕉久久久久久av成人,欧美丰满熟妇bbb久久久

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

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

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

在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