C#函数式编程中的惰性求值详解

如题所述

其实这个问题中有两个不正确的地方:
第一C#编程中所谓的函数其实是成员方法,函数是SP(面向过程编程中的术语,在面向对象中不存在这样的术语,只是很多程序员由SP转到OOP上,所以才有这种不规则的称呼)。有C#中没有独立到类之外的方法,也就是任何一个方法(包含静态成员方法)都是属于某个类或对象的。所以没有函数之称。
第二个是惰性其实并非C#术语,也非.net术语,勉强可算得上是面向对象的一种不规则称呼,因为C#其实是静态编译而非动态编译,直到.net 4。0之后才支持动态编译(只是支持),而所谓的惰性其实指的是运算的结果延迟到使用时才会加载。所以是后期绑定的一种特殊形式,(一般认为早期绑定是指编译态绑定,而后期绑定则是运行态绑定),所以在编程时应该理解什么时早期绑定,什么是后期绑定就可以了,而面各对象术语中还存在一种延迟加载的形式,就是所谓的“懒加载”又叫惰性加载。凡是具有这种特性的属性或运算结果的,也有人叫惰性加载。
在设计模式中有一个单例模式,其实有一种就是“懒汉模式”,在第一次使用时才会真实初始化实例。在linq to sql中的lumbda表达式中的,有一种IEnumable<T>的形式,执行的结果中其实并没有真正的结果,只有第一次引用该结果时才会真正加载结果,以供调用。类似延迟加载的模式就是所谓的情性加载,它的目的就是提高性能。
但是对于应用程序员来说,IQuery<T>和IEnumerable<T>是没有任何区别的,基本上不需要去判断两者的任何区别,而追求性能与各方面的其他考虑的设计师或是高程才会考虑到两者的具体的区别,所以基本上来说对于应用程序员不需要理解,只有高级程序员才会在性能上考虑诸多因素,如果内存等各方面原因时才会考虑到延迟加载。
温馨提示:答案为网友推荐,仅供参考