C#中的事件

之前看过刘铁猛老师视频关于C#中事件的讲解,感觉受益匪浅,将视频中的演示的示例放在这里,便于以后的学习。

事件5要素:

1、发布者

2、订阅者

3、事件的声明

4、事件的注册/事件的订阅

5、事件的触发

复制代码
namespace EventExercise
{
    class Program
    {
        static void Main(string[] args)
        {
            Customer customer = new Customer();
            Waiter waiter = new Waiter();
            customer.Order += waiter.Action;//5、事件的注册
            customer.OrderDish();
            customer.PayTheBill();
        }
    }

    //1、发布者
    public class Customer
    {
        public event EventHandler Order;//3、事件声明
        public double bill;
        public void PayTheBill()
        {
            Console.WriteLine("I will pay the ${0}.", this.bill);
        }

        public void OrderDish()
        {
            Console.WriteLine("I walk into a restaurant,and sit down.");
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine("let me think...");
                Thread.Sleep(1000);
            }
            OrderEventArgs orderInfo = new OrderEventArgs()
            {
                DishName = "yuxiang rousi",
                Size = "big"
            };
            this.Order(this, orderInfo);//4、事件的触发
        }
    }

    public class OrderEventArgs :EventArgs
    {
        public string DishName { get; set; }
        public string Size { get; set; }
    }

    //2、订阅者
    public class Waiter
    {
        
        public void Action(object sender, EventArgs e)
        {
            Customer customer = sender as Customer;
            OrderEventArgs orderInfo = e as OrderEventArgs;
            double price = 10;
            switch (orderInfo.Size)
            {
                case "small":
                    price -= 5;
                    break;
                case "big":
                    price += 5;
                    break;
                default:
                    break;
            }
            Console.WriteLine("I will serve you dish<{0}>.", orderInfo.DishName);
            customer.bill += price;
        }
    }
}
复制代码

 

//事件的触发

posted on   hanzq_go  阅读(206)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示