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

相关文章
|
6月前
|
C#
C#一分钟浅谈:委托与事件的实现方式
本文详细介绍了C#编程中委托与事件的基础知识及应用场景。首先解释了委托的概念,包括定义与使用方法;接着介绍了事件这一基于委托的特殊类型,展示了如何在类中定义事件及跨类订阅与处理事件;最后讨论了常见问题如事件未处理异常、重复订阅及内存泄漏等,并提出了相应的解决方案。通过本文,读者将全面掌握委托与事件的使用技巧,提升应用程序的设计与开发水平。
219 7
|
7月前
|
图形学 C# 开发者
全面掌握Unity游戏开发核心技术:C#脚本编程从入门到精通——详解生命周期方法、事件处理与面向对象设计,助你打造高效稳定的互动娱乐体验
【8月更文挑战第31天】Unity 是一款强大的游戏开发平台,支持多种编程语言,其中 C# 最为常用。本文介绍 C# 在 Unity 中的应用,涵盖脚本生命周期、常用函数、事件处理及面向对象编程等核心概念。通过具体示例,展示如何编写有效的 C# 脚本,包括 Start、Update 和 LateUpdate 等生命周期方法,以及碰撞检测和类继承等高级技巧,帮助开发者掌握 Unity 脚本编程基础,提升游戏开发效率。
234 0
|
7月前
|
C# C++
C# 委托
C# 委托
63 0
|
7月前
|
C# 开发框架 .NET
C# 语法中级
本文介绍了C#语法中的多个中级主题,包括lambda表达式、匿名类型、匿名方法、异常处理、枚举器与迭代器以及可空类型。重点内容如下: - **Lambda表达式**:编译为私有方法,支持捕获外部变量和迭代变量。 - **匿名类型**:通过`var`关键字创建,可用于快速定义对象。 - **匿名方法**:无需命名的委托实现。 - **异常处理**:常见异常类型及`try..catch..finally`语句。 - **枚举器与迭代器** 这些特性增强了C#的灵活性和表达能力,适用于更复杂的编程场景。
72 0
|
7月前
|
C# 编译器 存储
C# 事件
C# 面向对象编程(二)——继承
66 0
|
7月前
|
C#
由浅入深理解C#中的事件
由浅入深理解C#中的事件
141 19
|
7月前
|
编译器 C#
C#中内置的泛型委托Func与Action
C#中内置的泛型委托Func与Action
94 4
|
7月前
|
C#
C#中的委托(一)
C#中的委托(一)
57 1
|
3月前
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
134 12
|
4月前
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
149 4