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#中windows应用窗体程序的输入输出方法实例
C#中windows应用窗体程序的输入输出方法实例
46 0
|
2月前
|
C#
C#一分钟浅谈:委托与事件的实现方式
本文详细介绍了C#编程中委托与事件的基础知识及应用场景。首先解释了委托的概念,包括定义与使用方法;接着介绍了事件这一基于委托的特殊类型,展示了如何在类中定义事件及跨类订阅与处理事件;最后讨论了常见问题如事件未处理异常、重复订阅及内存泄漏等,并提出了相应的解决方案。通过本文,读者将全面掌握委托与事件的使用技巧,提升应用程序的设计与开发水平。
113 7
|
3月前
|
C#
由浅入深理解C#中的事件
由浅入深理解C#中的事件
109 19
|
3月前
|
编译器 C#
C#中内置的泛型委托Func与Action
C#中内置的泛型委托Func与Action
63 4
|
3月前
|
图形学 C# 开发者
全面掌握Unity游戏开发核心技术:C#脚本编程从入门到精通——详解生命周期方法、事件处理与面向对象设计,助你打造高效稳定的互动娱乐体验
【8月更文挑战第31天】Unity 是一款强大的游戏开发平台,支持多种编程语言,其中 C# 最为常用。本文介绍 C# 在 Unity 中的应用,涵盖脚本生命周期、常用函数、事件处理及面向对象编程等核心概念。通过具体示例,展示如何编写有效的 C# 脚本,包括 Start、Update 和 LateUpdate 等生命周期方法,以及碰撞检测和类继承等高级技巧,帮助开发者掌握 Unity 脚本编程基础,提升游戏开发效率。
77 0
|
3月前
|
C#
C#中的委托(一)
C#中的委托(一)
37 1
|
3月前
|
存储 算法 安全
C#语言进阶(二)—事件全解
C#语言进阶(二)—事件全解
37 0
|
3月前
|
C# C++
C#语言进阶(一)—委托
C#语言进阶(一)—委托
49 0
|
3月前
|
传感器 开发框架 JSON
聊聊 C# dynamic 类型,并分享一个将 dynamic 类型变量转为其它类型的技巧和实例
聊聊 C# dynamic 类型,并分享一个将 dynamic 类型变量转为其它类型的技巧和实例
155 0
|
4月前
|
文字识别 自然语言处理 C#
印刷文字识别使用问题之C#发票识别的代码实例在哪里可以查看
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。