C语言是一种广泛使用的计算机编程语言,由Dennis Ritchie在1972年发明,主要用于系统软件的开发。以下是关于C语言的一些简要介绍:1. **历史**:C语言起源于B语言,最初是为了开发Unix操作系统而设计的。2. **特点**: - **高级

摘要:简单说说C#中委托的使用-01 📑前言 距离上次更新文章,已经过去...月了。 没更新文章的主要原因,主要是因为参加工作后,感觉思维没有上学那会活跃,写文章没有思绪。再就是上班的时候把精力用光了,下班后只顾着
简单说说C#中委托的使用-01 📑前言 距离上次更新文章,已经过去...月了。 没更新文章的主要原因,主要是因为参加工作后,感觉思维没有上学那会活跃,写文章没有思绪。再就是上班的时候把精力用光了,下班后只顾着打游戏🎮,没有恢复精力和学习📚。 在公司网上冲浪🏄的时候,看到了一篇讲解C#委托的文章,文章中描述委托的使用,选择的例子很不错(链接在文末)。在日常开发中,我写的最多的就是CRUD了,他这篇文章使用的是导出excel的例子。 平时开发中,我也写过excel导出的功能,但是好像并没有用到委托。经过我的详细反复阅读之后,今天这篇文章我就用另外一个例子描述下如何在C#中使用委托。 📖委托简述 在C#中,委托(Delegate)是一种类型,它定义了方法的类型,使得可以将方法作为参数传递或作为返回值。 ✨委托使用 例子 假设我们有一个订单系统,需要根据不同的促销策略计算订单的最终价格。不同的促销策略可能是: 固定折扣(减 10 元)。 百分比折扣(打 8 折)。 满减优惠(满 100 减 20)。 我们希望通过委托动态传递这些策略,而不是写死逻辑。 博主写法 public static void Main() { // 假设订单的原价为 100 元 decimal price = 100; // 假设促销类型为 "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; } 太优雅了~ 委托写法 第一步:定义委托类型 // 委托类型:输入订单金额(decimal),返回折扣后的金额(decimal) public delegate decimal DiscountStrategy(decimal originalPrice); 第二步:实现具体折扣方法 为每种促销策略写一个匹配委托签名的方法: // 固定折扣(减 10 元) public static decimal FixedDiscount(decimal originalPrice) { return originalPrice - 10; } // 百分比折扣(打 8 折) public static decimal PercentageDiscount(decimal originalPrice) { return originalPrice * 0.8m; } // 满减优惠(满 100 减 20) public static decimal ThresholdDiscount(decimal originalPrice) { if (originalPrice >= 100) { return originalPrice - 20; } return originalPrice; } 第三步:使用委托传递方法 新建订单类,接收外部传入的折扣策略: public class OrderProcessor { // 方法:计算订单最终价格,接收一个委托参数 public decimal ProcessOrder(decimal originalPrice, DiscountStrategy discountStrategy) { // 调用委托,自动执行传入的策略方法 return discountStrategy(originalPrice); } } 第四步:调用 public static void Main() { var processor = new OrderProcessor(); // 选择策略 DiscountStrategy currentStrategy = PercentageDiscount; // 计算价格 decimal finalPrice = processor.ProcessOrder(100, currentStrategy); Console.WriteLine($"百分比折扣后价格:{finalPrice}"); } 输出结果 进阶委托写法 使用 Func/Action 实现委托 第一步:使用 Func<decimal, decimal> 定义替代delegate委托 // 不需要定义 delegate,直接用 Func<输入参数类型, 返回值类型> public class OrderProcessor { // 接收 Func<decimal, decimal> 作为折扣策略 public decimal ProcessOrder(decimal originalPrice, Func<decimal, decimal> discountStrategy) { return discountStrategy(originalPrice); } } 第二步:无需修改 第三步:调用 public static void Main() { var processor = new OrderProcessor(); // 方式 1:直接传入具名方法 decimal price1 = processor.ProcessOrder(50, FixedDiscount); // 方式 2:用 Lambda 表达式 decimal price2 = processor.ProcessOrder(100, price => price * 0.5m); Console.WriteLine($"价格 1:{price1}"); Console.WriteLine($"价格 2:{price2}"); } 输出结果 📕总结 委托适用于任何需要传递方法的地方(如回调、策略模式、事件处理)。 用delegate关键字声明委托,也可以使用Func/Action + Lambda方式。 本文有误地方欢迎指正~ 🔗参考链接 C# 委托 https://www.cnblogs.com/ysmc/p/18800819 deepseek https://chat.deepseek.com/