1.1题目:
定义一个学生类——student类,然后定义一个方法fun(),通过委托实现方法回调,使之既能求出成绩好的学生,也能求出成绩差的学生。
1.2思路:
定义了一个Student类,具有姓名和成绩属性。然后定义了一个委托ComparisonDelegate,用于比较学生的方法回调。Main方法中创建了一个学生列表,并使用GetStudents`、方法通过委托实现的方法回调来获取成绩好的学生和成绩差的学生。最后,将结果打印输出。
1.3代码:
using System; using System.Collections.Generic; // 定义学生类 public class Student { public string Name { get; set; } public int Grade { get; set; } } // 定义委托类型 public delegate bool CheckStudentDelegate(Student student); class Program { static void Main(string[] args) { // 创建学生对象 Student student1 = new Student { Name = "张三", Grade = 80 }; Student student2 = new Student { Name = "李四", Grade = 90 }; Student student3 = new Student { Name = "王五", Grade = 70 }; // 创建学生列表 List<Student> students = new List<Student> { student1, student2, student3 }; // 调用求出成绩好的学生的方法 FindStudents(students, GoodStudent); // 调用求出成绩差的学生的方法 FindStudents(students, BadStudent); Console.ReadLine(); } // 求出成绩好的学生的方法 static bool GoodStudent(Student student) { return student.Grade >= 80; } // 求出成绩差的学生的方法 static bool BadStudent(Student student) { return student.Grade < 60; } // 方法回调,根据委托判断学生的成绩,输出符合条件的学生信息 static void FindStudents(List<Student> students, CheckStudentDelegate checkStudent) { foreach (var student in students) { if (checkStudent(student)) { Console.WriteLine($"学生姓名:{student.Name},成绩:{student.Grade}"); } } } }
1.4测试:
2.1题目:
定义一个学生类、厨师类和铃声类,利用事件,设计一个程序;当起床铃声响起,就引发学生起床、厨师做早餐两件事。
2.2思路:
定义一个学生类(Student),包含一个起床的方法(wake_up),定义一个厨师类(Chef),包含一个做早餐的方法(cook_breakfast),定义一个铃声类(Alarm),包含一个触发事件的方法(ring),在铃声类中,设计一个触发事件的方法(ring),当这个方法被调用时,会触发学生的起床方法和厨师的做早餐方法,在主程序中,创建一个学生对象和一个厨师对象,并将它们分别注册到铃声类的触发事件中,当需要起床和做早餐时,调用铃声类的触发事件方法(ring),即可同时触发学生起床和厨师做早餐的动作。
2.3代码:
using System; namespace EventExample { // 定义学生类 class Student { public void WakeUp() { Console.WriteLine("学生起床了!"); } } // 定义厨师类 class Chef { public void CookBreakfast() { Console.WriteLine("厨师正在做早餐!"); } } // 定义闹钟类 class AlarmClock { // 定义事件委托 public delegate void AlarmEventHandler(); // 定义事件 public event AlarmEventHandler Alarm; // 触发事件 public void Ring() { Console.WriteLine("起床铃声响起!"); if (Alarm != null) { Alarm(); // 触发事件 } } } class Program { static void Main(string[] args) { // 创建学生对象和厨师对象 Student student = new Student(); Chef chef = new Chef(); // 创建闹钟对象 AlarmClock alarmClock = new AlarmClock(); // 将学生起床方法和厨师做早餐方法绑定到闹钟的事件上 alarmClock.Alarm += student.WakeUp; alarmClock.Alarm += chef.CookBreakfast; // 触发闹钟的事件 alarmClock.Ring(); Console.ReadLine(); } } }
2.4测试: