c#入门-多播委托,匿名函数

多播委托

委托作为变量,也可以+=和-=。委托可以和方法组相加,但方法组和方法组不能相加。
储存多个函数时,调用委托会按照加的顺序依次执行。但返回值只使用最后绑定的函数
使用 – =时,如果储存了这个值,那么会移除第一个。如果没有则无事发生。
在这里插入图片描述
委托是引用类型,默认值是null。委托可以和null相加,不会出现异常。
但调用null委托会发生异常。调用委托时为了保险期间,应使用Invoke方法使用委托并配合空合并运算。

Func<int, int> fun1 = Square;
fun1?.Invoke(10);

int Square(int i)
{
	return i * i;
}

int Cube(int i)
{
	return i * i * i;
}

匿名函数

如果一个函数的参数是一个委托类型。而你此刻没有合适的方法组使用,也不想为他专门声明一个局部函数。
则可以使用匿名函数。匿名函数的创建更为简单,语法为:返回类型 + 参数列表+ => +函数主体

Func<int, string> func = string (int i) =>
{ 
	return i.ToString();
};
  • 如果参数列表有且仅有1个参数,则可以省略参数的括号。
  • 函数主体可以使用表达式语法(如果只有一句话)。
  • 如果参数或返回值的类型是确定的,比如已知被赋值的变量类型,那么可以省略类型。
Fun(i => i.ToString());//因为知道这里要赋值的参数(变量)类型需要一个int类型的参数,也知道返回值是string类型。

void Fun(Func<int, string> func)
{
	Console.WriteLine(func);
}

匿名函数每次取值时会创建一个新的值。而多播委托必须要原值才能解绑。
也就是说多播委托无法使用匿名函数进行解绑。

Func<int, string> func = i => i.ToString();
func -= i => i.ToString();//无事发生
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第Ⅰ部分 C# 语 言 第1章 .NET体系结构.... 3 1.1 C#与.NET的关系...... 3 1.2 公共语言运行库...... 3 1.3 详细介绍中间语言...... 6 1.3.1 面向对象和接口的支持..... 7 1.3.2 相异值类型和引用类型..... 8 1.3.3 强数据类型..... 8 1.3.4 通过异常方法处理错误..... 14 1.3.5 特性的使用..... 14 1.4 程序集...... 14 1.4.1 私有程序集..... 15 1.4.2 共享程序集..... 16 1.4.3 反射..... 16 1.5 .NET Framework类...... 16 1.6 命名空间...... 17 1.7 用C#创建.NET应用程序...... 18 1.7.1 创建ASP.NET应用程序..... 18 1.7.2 创建Windows窗体..... 20 1.7.3 Windows控件..... 20 1.7.4 Windows服务..... 20 1.8 C#在.NET企业体系结构中 的作用...... 20 1.9 小结...... 22 第2章 C#基础.... 23 2.1 引言...... 23 2.2 第一个C#程序...... 23 2.2.1 代码..... 24 2.2.2 编译并运行程序..... 24 2.2.3 详细介绍..... 25 2.3 变量........ 27 2.3.1 变量的初始化..... 27 2.3.2 变量的作用域..... 28 2.3.3 常量..... 31 2.4 预定义数据类型...... 32 2.4.1 值类型和引用类型..... 32 2.4.2 CTS类型..... 33 2.4.3 预定义的值类型..... 33 2.4.4 预定义的引用类型..... 36 2.5 流控制...... 39 2.5.1 条件语句..... 39 2.5.2 循环..... 43 2.5.3 跳转语句..... 46 2.6 枚举...... 47 2.7 数组...... 49 2.8 命名空间...... 50 2.8.1 using语句..... 51 2.8.2 命名空间的别名..... 52 2.9 Main()方法...... 53 2.9.1 多个Main()方法..... 53 2.9.2 给Main()方法传送参数..... 54 2.10 有关编译C#文件的更多内容...... 55 2.11 控制台I/O.... 56 2.12 使用注释...... 58 2.12.1 源文件中的内部注释..... 58 2.12.2 XML文档说明..... 59 2.13 C#预处理器指令...... 61 2.13.1 #define和 #undef. 61 2.13.2 #if, #elif, #else和#endif. 62 2.13.3 #warning和# error. 63 2.13.4 #region和#endregion.. 63 2.13.5 #line.. 64 2.13.6 #pragma.. 64 2.14 C#编程规则...... 64 2.14.1 用于标识符的规则..... 64 2.14.2 用法约定..... 65 2.15 小结...... 71 第3章 对象和类型.... 72 3.1 类和结构...... 72 3.2 类成员...... 73 3.2.1 数据成员..... 73 3.2.2 函数成员..... 74 3.2.3 只读字段..... 88 3.3 结构...... 89 3.3.1 结构是值类型..... 90 3.3.2 结构和继承..... 91 3.3.3 结构的构造函数..... 91 3.4 部分类...... 92 3.5 静态类...... 94 3.6 Object类...... 94 3.6.1 System.Object方法..... 94 3.6.2 ToString()方法..... 95 3.7 小结...... 97 第4章 继承.... 98 4.1 继承的类型...... 98 4.1.1 实现继承和接口继承..... 98 4.1.2 多重继承..... 99 4.1.3 结构和类..... 99 4.2 实现继承...... 99 4.2.1 虚方法..... 100 4.2.2 隐藏方法..... 101 4.2.3 调用函数的基类版本..... 102 4.2.4 抽象类和抽象函数..... 103 4.2.5 密封类和密封方法..... 103 4.2.6 派生类的构造函数..... 104 4.3 修饰符...... 109 4.3.1 可见性修饰符..... 109 4.3.2 其他修饰符..... 110 4.4 接口...... 111 4.4.1 定义和实现接口..... 112 4.4.2 派生的接口..... 116 4.5 小结...... 118 第5章 运算符和类型强制转换.... 119 5.1 运算符...... 119 5.1.1 运算符的简化操作..... 120 5.1.2 三元运算符..... 121 5.1.3 checked和unchecked运算符..... 122 5.1.4 is运算符..... 123 5.1.5 as运算符..... 123 5.1.6 sizeof运算符..... 123 5.1.7 typeof运算符..... 124 5.1.8 可空类型和运算符..... 124 5.1.9 空接合运算符..... 124 5.1.10 运算符的优先级..... 125 5.2 类型的安全性...... 125 5.2.1 类型转换..... 126 5.2.2 装箱和拆箱..... 130 5.3 对象的相等比较...... 130 5.3.1 引用类型的相等比较..... 131 5.3.2 值类型的相等比较..... 132 5.4 运算符重载...... 132 5.4.1 运算符的工作方式..... 133 5.4.2 运算符重载的示例: Vector结构..... 134 5.5 用户定义的数据类型转换...... 141 5.5.1 执行用户定义的类型转换..... 142 5.5.2 多重数据类型转换..... 149 5.6 小结...... 152 第6章 委托和事件.... 153 6.1 委托...... 153 6.1.1 在C#中声明委托..... 154 6.1.2 在C#中使用委托..... 155 6.2 匿名方法...... 158 6.2.1 简单的委托示例..... 159 6.2.2 BubbleSorter示例..... 161 6.2.3 多播委托..... 164 6.3 事件...... 166 6.3.1 从客户的角度讨论事件..... 167 6.3.2 生成事件..... 169 6.4 小结...... 173

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值