日韩欧美人妻无码精品白浆,夜夜嗨AV免费入口,国产欧美官网在线看,高校回应聋哑女生因长相完美被质疑

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

簡單說說C#中委托的適用場景

freeflydom
2025年6月3日 9:27 本文熱度 432

??委托簡述

在C#中,委托(Delegate)是一種類型,它定義了方法的類型,使得可以將方法作為參數(shù)傳遞或作為返回值。

?委托使用

例子

假設(shè)我們有一個訂單系統(tǒng),需要根據(jù)不同的促銷策略計算訂單的最終價格。不同的促銷策略可能是:

  1. 固定折扣(減 10 元)。

  2. 百分比折扣(打 8 折)。

  3. 滿減優(yōu)惠(滿 100 減 20)。

我們希望通過委托動態(tài)傳遞這些策略,而不是寫死邏輯。

博主寫法

public static void Main()
{
    // 假設(shè)訂單的原價為 100 元
    decimal price = 100;
    // 假設(shè)促銷類型為 "Fixed"
    string type = "Fixed";
    // 計算訂單的最終價格
    decimal finalPrice = ProcessOrder(price, type);
    // 輸出最終價格
    Console.WriteLine("Final price: " + finalPrice);
}
private static decimal ProcessOrder(decimal price, string type)
{
    if (type == "Fixed")
        return price - 10;
    else if (type == "Percentage")
        return price * 0.8m;
    else
        return price;
}

太優(yōu)雅了~

委托寫法

第一步:定義委托類型

// 委托類型:輸入訂單金額(decimal),返回折扣后的金額(decimal)
public delegate decimal DiscountStrategy(decimal originalPrice);

第二步:實現(xiàn)具體折扣方法

為每種促銷策略寫一個匹配委托簽名的方法:

// 固定折扣(減 10 元)
public static decimal FixedDiscount(decimal originalPrice)
{
	return originalPrice - 10;
}
// 百分比折扣(打 8 折)
public static decimal PercentageDiscount(decimal originalPrice)
{
	return originalPrice * 0.8m;
}
// 滿減優(yōu)惠(滿 100 減 20)
public static decimal ThresholdDiscount(decimal originalPrice)
{
	if (originalPrice >= 100)
	{
		return originalPrice - 20;
	}
	return originalPrice;
}

第三步:使用委托傳遞方法

新建訂單類,接收外部傳入的折扣策略:

public class OrderProcessor
{
    // 方法:計算訂單最終價格,接收一個委托參數(shù)
    public decimal ProcessOrder(decimal originalPrice, DiscountStrategy discountStrategy)
    {
        // 調(diào)用委托,自動執(zhí)行傳入的策略方法
        return discountStrategy(originalPrice);
    }
}

第四步:調(diào)用

public static void Main()
{
	var processor = new OrderProcessor();
	// 選擇策略
	DiscountStrategy currentStrategy = PercentageDiscount;
	// 計算價格
	decimal finalPrice = processor.ProcessOrder(100, currentStrategy);
	Console.WriteLine($"百分比折扣后價格:{finalPrice}");
}

輸出結(jié)果

 

進(jìn)階委托寫法

使用 Func/Action 實現(xiàn)委托

第一步:使用 Func<decimal, decimal> 定義替代delegate委托

// 不需要定義 delegate,直接用 Func<輸入?yún)?shù)類型, 返回值類型>
public class OrderProcessor
{
    // 接收 Func<decimal, decimal> 作為折扣策略
    public decimal ProcessOrder(decimal originalPrice, Func<decimal, decimal> discountStrategy)
    {
        return discountStrategy(originalPrice);
    }
}

第二步:無需修改

?第三步:調(diào)用

public static void Main()
{
	var processor = new OrderProcessor();
	// 方式 1:直接傳入具名方法
	decimal price1 = processor.ProcessOrder(50, FixedDiscount);
	// 方式 2:用 Lambda 表達(dá)式
	decimal price2 = processor.ProcessOrder(100, price => price * 0.5m); 
	Console.WriteLine($"價格 1:{price1}");
	Console.WriteLine($"價格 2:{price2}");
}

輸出結(jié)果

 

??總結(jié)

委托適用于任何需要傳遞方法的地方(如回調(diào)、策略模式、事件處理)。

delegate關(guān)鍵字聲明委托,也可以使用Func/Action + Lambda方式。


    轉(zhuǎn)自https://www.cnblogs.com/ZYPLJ/p/18897174


    該文章在 2025/6/3 9:32:18 編輯過
    關(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