C#委托的引用

来源:互联网 发布:10月经济数据公布 编辑:程序博客网 时间:2024/06/05 14:27

定义一个学生类—-student类,然后定义一个方法fun(),通过委托实现方法回调,使之能求出成绩最好的学生,也能求出成绩最差的学生。
代码:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace usingDelegate{    class Student    {        private string name;      //姓名        private double score;     // 成绩        public Student(string name, double score)  //定义构造函数,初始化姓名和成绩        {            this.name = name;            this.score = score;        }        public void showInfo()    //显示学生信息        {            Console.WriteLine("姓名:{0},\t成绩:{1}", name, score.ToString());        }        public static object max(object obj1, object obj2)   //求最大值(静态方法)        {            Student st1 = (Student)obj1;            Student st2 = (Student)obj2;            if (st1.score > st2.score) return st1;            return st2;        }        public static object min(object obj1, object obj2)  //最小值(静态方法)        {            Student st1 = (Student)obj1;            Student st2 = (Student)obj2;            if (st1.score > st2.score) return st2;            return st1;        }        //申明委托类型,可以关联静态方法student.max()和student.min()    }    class Program    {        delegate object xnDelegate(object o1, object o2);        //以委托作为参数,定义方法fun(),以求st1和st2中成绩较好的和较差的        static Student fun(Student st1, Student st2,xnDelegate fxn)        {            return (Student)fxn(st1, st2);        }        static void Main(string[] args)        {            Student[] sts =                //创建学生数组            {                new Student ("zhangsan",90),                new Student("lisi",100),                new Student ("wangwu",89),                new Student ("wanger",69),            };            //创建委托对象mx,关联静态方法student.max            xnDelegate mx = new xnDelegate(Student.max);            //创建委托对象mi,关联静态方法studnet.min            xnDelegate mi = new xnDelegate(Student.min);            Student maxst, minst;            maxst = minst = sts[0];            sts[0].showInfo();            //利用fun()方法求成绩最好的学生和成绩最差的学生            for (int i = 1; i <= sts.Length-1; i++)            {                sts[i].showInfo();                maxst = fun(maxst, sts[i], mx);                minst = fun(minst, sts[i], mi);            }            Console.WriteLine("-------------------------------");            Console.WriteLine("成绩最好的学生:");            maxst.showInfo();            Console.WriteLine("------------------------------");            Console.WriteLine("成绩最差的学生:");            minst.showInfo();            Console.ReadKey();        }    }}

运行截图
这里写图片描述
该程序中,方法的回调体现了在方法fun()中,它包含一个xnDelegate类型的参数fxn。通过该参数,可以将student.max()方法传递到方法fun中,以求得成绩较好的学生,同理可以求成绩最差的学生。