泛型委托

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 泛型委托
{
    public delegate int DelCompare<T>(T t1, T t2);
    // public delegate int DelCompare(object o1, object o2);
    class Program
    {
        static void Main(string[] args)
        {
            int[] nums = { 1, 2, 3, 4, 5 };
            int max = GetMax<int>(nums, Compare1);//第一个参数是Object sender,第二个参数是BoiledEventArgs e,这里没有用event事件封装delegate委托,直接传方法作委托参数
            Console.WriteLine(max);

            string[] names = { "abcdefg", "fdsfds", "fdsfdsfdsfdsfdsfdsfdsfsd" };
            string max1 = GetMax<string>(names, (string s1, string s2) =>//lamda表达式,可以理解成匿名函数的另一种写法
            {
                return s1.Length - s2.Length;
            });
            Console.WriteLine(max1);
            Console.ReadKey();
        }
        public static T GetMax<T>(T[] nums, DelCompare<T> del)
        {
            T max = nums[0];
            for (int i = 0; i < nums.Length; i++)
            {

                if (del(max, nums[i]) < 0)//if的括号里面del(max, nums[i])是直接调用运行委托对象,给委托传参(max, nums[i]),等价于传入并调用Compare1()方法
                {
                    max = nums[i];
                }
            }
            return max;
        }


        public static int Compare1(int n1, int n2)//这个方法只能用于比较泛型的T为int的情况,换另一种Type就必须另外写方法
        {
            return n1 - n2;
        }
    }
}

 

posted @ 2016-10-25 22:48  影落明湖  阅读(162)  评论(0编辑  收藏  举报