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