C#高级编程学习笔记(二)

31.比较值类型的相等性 
ReferenceEquals()用于比较引用,Equals()用于比较值。比较运算符可以看作一个中间项,但最大的区别是值类型需要装箱才能把它转化为引用。

32.比较运算符重载
语句if(a==b)对于类,这个语句在默认状态下会比较引用a和b,检测这两个引用是否指向内存中的同一个地址,而不是检测两个实例实际上是否包含相同的数据。
C#要求成对的重载运算符,比较运算符必须返回bool类型的值。

33.比较运算符:浅度比较与深度比较
如果有嵌入的类,浅度比较:比较引用是否指向同一个对象  深度比较:比较对象的值是否相等

34.基类和派生类之间的类型强制转换
在进行类型强制转换时,会检查被引用的对象,因为基类引用原则上可以引用一个派生类的实例,如果该对象不是派生类的一个实例,强制转换就会失败。

35.委托 
委托是类型安全的类,它定义了返回类型和参数的类型,委托类不仅包含对方法的引用,也可以包含对多个方法的引用。
当参数是委托类型时,就可以使用lambda表达式实现委托引用的方法。
当要把方法传送给其他方法时,需要使用委托。

36.声明委托
使用委托时,首先必须定义要使用的委托,必须创建该委托的一个或多个实例。定义的前面加上关键字delegate,

37.委托推断
为了减少输入量,只要需要委托实例,就可以只传送地址的名称。委托推断可以在需要委托实例的任何地方使用,也可以用于事件,因为事件基于委托。

38.泛型Action<T>委托表示引用一个void返回类型的方法,这个委托存在不同的变体,可以传递至多16种不同的参数类型。没有泛型参数的Action类可以调用没有参数的方法。

39.多播委托
如果要调用多个方法,就需要多次显式调用这个委托。但是,委托也可以包含多个方法。这种委托称为多播委托。如果调用多播 委托,就可以按顺序连续调用多个方法。为此,委托的签名就必须返回void

40.GetInvocationList()
为了避免因为前面方法抛出异常,导致迭代停止,可以自己迭代方法列表。delegate类定义GetInvocationList()方法,它返回一个Delegate对象数组。使用这个委托调用捕获异常,继续下一次迭代。

41.闭包和lambda表达式
通过lambda表达式可以访问lambda表达式块外部的变量,称为闭包。
若要创建 Lambda 表达式,需要在 Lambda 运算符 => 左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。 例如,lambda 表达式 x => x * x 指定名为 x 的参数并返回 x

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值