首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 委派入門:從加減法重構到委派模式

     編輯:關於C語言

傳統寫法:硬編碼運算


private static int Add(int x, int y)
{
    int result = x + y;
    Console.WriteLine($"x + y = {result}");
    return result;
}
private static int Sub(int x, int y)
{
    int result = x - y;
    Console.WriteLine($"x - y = {result}");
    return result;
}

static void Main()
{
    Add(8, 8);
    Sub(8, 1);
}

缺點:呼叫端必須知道具體方法名稱,難以擴充新運算。

委派重構:參數化演算法


// 1. 定義委派型別
public delegate int BinaryOp(int x, int y);

// 2. 統一入口
public static void Calculate(int a, int b, BinaryOp op)
{
    int result = op(a, b);
    Console.WriteLine($"Result: {result}");
}

// 3. 使用
static void Main()
{
    Calculate(10, 5, Add);
    Calculate(10, 5, Sub);
    Calculate(10, 5, (x, y) => x * y); // Lambda 內聯
}

委派的三重身分

視角說明
類別視角繼承 MulticastDelegate 的密封類別
C++ 視角型別安全的函式指標
介面視角單一方法介面的替代品

函式簽名概念

「函式簽名」= 參數型別清單 + 回傳型別。委派型別即為一組簽名的命名。


// 這些方法簽名相同,可指派給同一委派
int Add(int a, int b);
int Sub(int a, int b);
int Mul(int a, int b);

下一步學習

  1. 內建委派:Func<T, TResult>、Action<T>、Predicate<T>
  2. Lambda 運算式與閉包
  3. 事件模式:event 關鍵字限制委派存取
  4. 非同步委派:BeginInvoke/EndInvoke(歷史)vs Task(現代)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved