示例#1
0
        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);
            });
        }
示例#2
0
 /// <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);
         }
     }
 }