C#||委托和事件的实例

简介: C#||委托和事件的实例

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测试:

相关文章
|
1月前
|
C#
c# Gridview 点击checkbox 触发的事件
c# Gridview 点击checkbox 触发的事件
|
29天前
|
存储 安全 C#
C# - 委托与事件
这篇文档介绍了C#中的委托和事件。委托是存储方法引用的类型,支持回调、事件处理,具有引用方法、类型安全、多播性等特性,并在异步编程中发挥作用。事件是委托的封装,提供保护和订阅机制,防止外部直接访问。当需要在类内部控制方法调用,防止外部误触发时,可使用事件。
|
1月前
|
C#
c#委托详解
c#委托详解
20 0
|
1月前
|
C#
C# Dev解决gridview1_SelectionChanged和gridview1_RowCellClick事件触发两次等问题
C# Dev解决gridview1_SelectionChanged和gridview1_RowCellClick事件触发两次等问题
C# Dev解决gridview1_SelectionChanged和gridview1_RowCellClick事件触发两次等问题
|
1月前
|
C#
C# 禁止ComboBox滚动事件细谈
C# 禁止ComboBox滚动事件细谈
|
1月前
|
开发框架 安全 .NET
C# .NET面试系列三:集合、异常、泛型、LINQ、委托、EF!
<h2>集合、异常、泛型、LINQ、委托、EF! #### 1. IList 接口与 List 的区别是什么? IList 接口和 List 类是C#中集合的两个相关但不同的概念。下面是它们的主要区别: <b>IList 接口</b> IList 接口是C#中定义的一个泛型接口,位于 System.Collections 命名空间。它派生自 ICollection 接口,定义了一个可以通过索引访问的有序集合。 ```c# IList 接口包含一系列索引化的属性和方法,允许按索引访问、插入、移除元素等。 由于是接口,它只定义了成员的契约,而不提供具体的实现。类似于 IEnumera
226 2
|
1月前
|
存储 C# C++
C#进阶-委托(Delegrate)
类似于 C 或 C++ 中函数的指针,委托是C#的函数指针,是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。本篇文章我们将讲解C#里委托的类型及如何使用。委托的语法第一次接触难免感到陌生,最好的学习方式就是在项目中多去使用,相信会有很多感悟。
33 0
|
1月前
|
Java C# C++
【从Java转C#】第八章:委托、lambda、事件
【从Java转C#】第八章:委托、lambda、事件
|
1月前
|
C#
C#中的委托
C#中的委托
23 0