public void DoSomeThing() { var arr = new List <int>() { 1, 2, 3, 4, 5, 6, 7 }; //这里创建MoreOrLessDelegate委托类型的实例,实际上是定义d1委托引用变量,指向RutrenTrue方法。 var d1 = new MoreOrLessDelegate(this.RutrenTrue); //这里调用方法,把指向RutrenTrue方法引用的d1委托类型变量传入到该方法的委托参数中。 //那么在实际的调用中也是调用RutrenTrue这个方法。 Print(arr, d1); var d2 = new Predicate <string>(this.RutrenTrue); //.net定义的无返回值的泛型委托。是对无返回值的一类方法的引用。 var d3 = new Action <int>(delegate(int a) { }); //.net定义的有返回值的泛型委托。是对有返回值的一类方法的引用。 var d4 = new Func <string, bool>(this.RutrenTrue); //定义匿名方法。 //那么匿名方法的好处在意可读性强,不用跳转到具体的方法体看,因为定义时就已经定义了方法体。 //还有一个好处就是,可以在这里访问到arr集合变量,但是如果定义传统的方法,然后在方法里引用arr集合 //那么arr必须是类级别的私有变量才能访问的到, var d5 = new Predicate <int>(delegate(int item) { //如果是在传统的定义中,那么arr集合必须是类级别的变量,才能访问的到。 Console.WriteLine(arr.Count); return(false); }); }
/// <summary> /// 这个方法中需要一个委托参数,这个委托是一个对方法的引用,引用的方法必须是指定的返回值和参数列表。 /// 相当于对指定返回值和参数列表的方法的抽象。 /// </summary> /// <param name="arr"></param> /// <param name="d"></param> static void Print(List <int> arr, MoreOrLessDelegate d) { foreach (var item in arr) { if (d("")) { Console.WriteLine(item); } } }