委托

  引用存储为函数的类型。声明使用delegate关键字,指定一个函数的签名,包含一个返回类型和参数列表。定义委托后,可以声明该委托类型的变量。初始化该变量使为和该委托有相同函数签名的函数引用使用。就可以使用委托变量来调用这个函数。对该变量的使用就如同使用函数一样。

    有了引用函数变量,可以执行其它方式无法完成的操作。:把委托变量作为参数传递给一个函数。则该函数就可以通过委托调用它引用的函数,而且在运行前不需要知道是哪个函数。

class Person 
    {
        public Person(string name, int age) 
        {
            this.name = name;
            this.age = age;
        }
        private string name;//ctrl+r+e快捷键 封装字段

        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        private int age;

        public int Age
        {
            get { return age; }
            set { age = value; }
        }
        public override string ToString()
        {
            return this.name;
        }
    } 
//声明委托
delegate int DelCompare(object o1, object o2); class Program { static void Main(string[] args) { //比较整数 //object[] arr = { 1, 2, 6, 8 }; //DelCompare del = IntCompare; //Console.WriteLine(GetMax(arr,del)); //比较字符串 //object[] arr = { "34sdfazca", "asfaf ", "A ad" }; //DelCompare del = StringCompare; //Console.WriteLine(GetMax(arr,del)); //比较person object[] arr ={ new Person("abc",18), new Person("asd",12), new Person("ert",70) };
//定义委托,让委托指向方法 DelCompare del
= PersonCompare;
//调用委托 Console.WriteLine(GetMax(arr,del)); Console.ReadLine(); }
     /*匿名方法
      DelString del=delegate(string str)
      {
        return "\"" +str+ "\"";
      };*/
 
//比较数组 static int IntCompare(object o1, object o2) { int i1 = (int)o1; int i2 = (int)o2; return i1 - i2; } //比较字符串长度 static int StringCompare(object o1, object o2) { string s1 = o1.ToString(); string s2 = o2.ToString(); return s1.Length - s2.Length; } //比较人大小 static int PersonCompare(object o1, object o2) { Person p1 = o1 as Person; Person p2 = o2 as Person; return p1.Age - p2.Age; } static object GetMax(object[] arr, DelCompare del) { object max = arr[0]; for (int i = 1; i < arr.Length; i++) { if (del(arr[i],max)>0) { max = arr[i]; } } return max; } }
//从小到大的排序
        static void Sort(object[] arr,DelCompare del) 
        {
            //冒泡的次数
            for (int i = 0; i < arr.Length-1; i++)
            {
                //两两比较的次数
                for (int j = 0; j < arr.Length-1-i; j++)
                {
                    if (del(arr[j],arr[j+1])>0)
                    {
                        object tmp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = tmp;
                    }
                }
            }
        }

 

posted @ 2013-12-18 18:41  狰狞蛋子  阅读(211)  评论(0编辑  收藏  举报