C#委托的引用

定义一个学生类—-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();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/boiled_water123/article/details/81706460