将委托说透(1),总结了一天,结果草稿箱忘记保存了。。。。。
对博客委托实现的分析:http://www.cnblogs.com/kirinboy/archive/2009/08/26/1554296.html
首先构建log委托,创建UserService类中建立公共类log委托属性;接着建立无返回值的静态方法,也就是委托所调用的方法;在主函数中创建UserService实例,UserService实例.log委托属性‘-=’或者‘+=’委托方法
总结委托就是接口的单一化形式,可以使用接口实现委托方法。单独创建一个类库建立静态类,实例化委托接口,通过委托调用类库静态类。该方法的优势是将大量实现方法单独创建,然后使用‘+=’或者‘-=’调用。
开始委托说透(2)
.net强大的编译器和CLR掩盖了委托内部实现的复杂性
打开Reflector反编译Log委托,尽管继承System
委托链 (委托是一个类,可以清晰的看出Log-MulticastDelegate-Delegate这种继承机制。委托必须桑踹鞥delegate关键字声明,编译器才会为我们自动生成继承代码)
标识回调方法的指针,构建一个委托链指向一个委托数组,委托刚开始构建时设置为null
委托数组为空则不是委托链,不为空时,依次执行,返回值是最后一个委托的返回值。
lambda表达式与递归函数的随笔
概念:不动点组合子(高阶函数,匿名函数的递归,非递归的lambda抽象)
(f,x)=>x<=1?1:x*f(f,x-1) //f表示匿名函数
lambda构建不容易构建递归函数,伪递归:看上去像递归,但其实不是递归
函数式链表快速排序:
定义递归的<ga,<a,x>>c#可以在,签名分析法
haskell简化函数的表达式,改变左结合的函数,将其转为右函数,其中X是元素类型,XS是另外一个链表
局部作用域绑定的变量或者函数,类型并不是任意的,必须是一个函数能够接收Y(f)作为参数
求阶乘的函数Dim fact = Y(Function(self) Function(n) If(n = 0, 1, n * self(n - 1)))
为事件处理程序(委托)的名称添加EventHandler后缀。
观察者模式:分为观察者与被观察者,其中观察者是用户界面,而业务数据时观察者对象。当业务数据发生变化时,
页面就会做出相应的响应,并做出这样的响应,只需要重新构建一个界面,业务数据不需要变化。