网站首页 > 基础教程 正文
如何理解委托?
- 委托的定义:
委托是一种类型安全的函数指针,用于存储对方法的引用,允许将方法作为参数传递、存储对方法的引用,允许动态的指定要执行的方法。
- 委托的声明:
委托通过 delegate关键字定义可以指定委托可以引用的方法的签名
// 定义一个委托类型,用于引用一个方法
delegate void MyDelegate();
- 委托实例化
// 实例化委托并指定方法
MyDelegate myDelegate = new MyDelegate(Method1);
- 委托调用:
// 调用委托,委托会执行它所持有的方法
myDelegate();
- 委托的主要作用有哪些?
- 实现回调机制
- 事件处理
- 异步编程
具体代码部分:
using System;
// 定义一个委托类型,用于引用折扣计算方法
delegate double DiscountCalculation(double totalPrice);
class Program
{
static void Main()
{
// 模拟不同会员等级的折扣计算方法
// 基础会员 9折
DiscountCalculation basicMemberDiscount = totalPrice => totalPrice * 0.9;
// 高级会员 8折
DiscountCalculation premiumMemberDiscount = totalPrice => totalPrice * 0.8;
// VIP会员 7折
DiscountCalculation vipMemberDiscount = totalPrice => totalPrice * 0.7;
// 模拟用户会员等级string memberLevel = "VIP"; // 假设用户是VIP会员
// 根据会员等级动态选择折扣计算方法
DiscountCalculation discountMethod;switch (memberLevel)
{
case "Basic":
discountMethod = basicMemberDiscount;
break;
case "Premium":
discountMethod = premiumMemberDiscount;
break;
case "VIP":
discountMethod = vipMemberDiscount;
break;
default:
discountMethod = totalPrice => totalPrice; // 默认不打折 break;
}
}
}
- 多播委托
将多个方法赋值给同一个委托,使委托持有多个方法的应用,并依次调用这些方法。
// 定义一个委托类型,用于引用一个方法
delegate void MyDelegate();
class Program{
static void Main()
{
// 实例化委托并绑定多个方法
MyDelegate myDelegate = Method1;
myDelegate += Method2;
myDelegate += Method3;
// 调用多播委托,依次执行绑定的方法
myDelegate();
}
}
猜你喜欢
- 2024-10-12 340.C# 中最有价值的语法糖及其应用场景
- 2024-10-12 Dev——手把手教你学会CheckedListBox(C#)
- 2024-10-12 流程控制-循环语句(5-5)-C#编程零基础到入门学习
- 2024-10-12 C#12那些有意思的特性 c# 特性的实现原理
- 2024-10-12 C#得到网关和DNS地址 .netcore 网关
- 2024-10-12 C#设计模式之4-原型模式 c++原型模式
- 2024-10-12 C#05(判断、循环语句) c#循环次数由什么决定
- 2024-10-12 C#:编程界的全能王,其他语言只能望尘莫及?
- 2024-10-12 C# 中的模式匹配与安全的类型转换:is 和 as 运算符的深入解析
- 2024-10-12 C# 循环语句介绍 c#循环输出
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)