委托与Lambda-浅谈

  委托概述

    委托是寻址方法的.NET版本.

    在C++中,函数指针只不过是一个指向内存位置的指针,它不是类型安全的.我们无法判断这个指针实际指向什么,更不知晓像参数和返回类型等项了.

    而.NET委托完全不同,委托是类型安全的类,它定义了返回类型参数的类型.委托不仅包含对方法的引用,也可以包含对多个方法的引用.

 

  Lambda概述

    Lambda表达式与委托直接相关.当参数委托类型时,就可以使用Lambda表达式实现委托引用的方法.

 

  如下例子

1 int i = int.Parse("9");

  我们习惯于将数据作为参数传递给方法,而当需要把方法传递给方法的时候,需要委托.有时,某个方法执行的操作并不是针对数据进行的,而是要对另一个方法进行操作,更麻烦的是,在编译的时候,我们不知道第二个方法的名称是什么,这个信息只能在运行期间得到,所以我们需要把第二个方法作为参数传递给第一个方法,就需要委托.

  举个"启动线程和任务"的例子,我们可以告诉计算机并行运行某些新的执行序列同时运行当前的任务.这种序列就称为线程.在其中一个基类System.Threading.Thread的一个实例上使用Start()方法,就可以启动一个线程.但是如果告诉计算机启动一个新的执行序列,必须说明要在哪里启动该序列,必须为计算机提供开始启动的方法的细节,即Thread类的构造函数中必须有一个参数,该参数定义了线程调用的方法.

  在C和C++中,只能提取函数的地址,并作为一个参数传递它.C没有类型安全.可以将任何函数传递给需要函数指针的方法.然而,这种直接方法不仅会导致一些关于类型安全性的问题,而且没有意识到,在进行面向对象的编程中,几乎没有方法是独立存在的,而是在调用方法前通常需要与实例相关联.所以.Net Framework在语法上不允许使用这种直接方法.如果要传递方法,就必须把方法封装在一种新类型的对象中,即委托.

  委托只是一种特殊类型的对象,其特殊之处在于,我们以前定义的所有对象都包含数据,而委托包含的只是一个或多个方法的地址.

  理解委托的一种好的方式是,把委托当作这样一件事情,它给方法的签名返回类型指定名称.

你可能感兴趣的:(lambda)