C#委托与事件,通俗易懂详细解释

本文通过一个具体的C#程序示例,详细介绍了如何使用委托和事件来组织不同类之间的通信。示例中包括了创建自定义事件参数类、定义委托类型、触发事件以及订阅和处理事件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

请尊重原创如果转载请注明出处和作者,尊重别人的劳动成果

 


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace @delegate
{
    //这里是充气娃娃拥有的一些特性,中国的娃娃叫声,日本的娃娃的叫声,娃娃的价格
    public class ChongQiWaWaArgs : EventArgs
    {
        public readonly string zhonggejiaofa; //中国娃娃叫声
        public readonly string yibenjiaofa; //日本娃娃叫声
        public readonly string jiage; //价格
        public ChongQiWaWaArgs(string zhonggejiaofa, string yibenjiaofa, string jiage)
        {
            this.zhonggejiaofa = zhonggejiaofa;
            this.yibenjiaofa = yibenjiaofa;
            this.jiage = jiage;
        }
    }

    //中国娃娃信息
    class zhonggejiaowawa
    {
        public static void zhonggejiaowawayanzhi(object sender, ChongQiWaWaArgs yanzhi)
        {
            Console.WriteLine("中国娃娃叫法:" + yanzhi.zhonggejiaofa + "  价格:" + yanzhi.jiage);
        }
    }

    //日本娃娃信息
    class yibenjiaowawa
    {
        public static void yibenjiaowawayanzhi(object sender, ChongQiWaWaArgs yanzhi)
        {
            Console.WriteLine("日本娃娃叫法:" + yanzhi.yibenjiaofa + "  价格:" + yanzhi.jiage);
        }
    }

    //这里是卖充气娃娃的淘宝店
    public class taobaodian
    {
        //声明一个卖充气娃娃的委托,也就是可以进货多种娃娃的仓库
        public delegate void wawa(object sender, ChongQiWaWaArgs yanzhi);
        //声明一个卖充气娃娃事件,也就是可以卖多种娃娃的店面
        public event wawa maiwawa;

        //如果有娃娃就卖娃娃
        public void MaiWaWa(ChongQiWaWaArgs yanzhi)
        {
            if (maiwawa != null)
            {
                //可以开始卖充气娃娃事件
                Console.WriteLine("娃娃专卖店:本店物美价廉,送货极速,欢迎选购!");
                maiwawa(this,yanzhi);
            }
        }

        //是否卖娃娃,做生意
        public void beginmaiwawa(ChongQiWaWaArgs yanzhi)
        {
            //已经进货娃娃了,可以卖了
            MaiWaWa(yanzhi);
        }     
    }

    //这里是给淘宝店添加各种各样商品的厂家
    class changjia
    {
        public changjia(taobaodian dianzu, ChongQiWaWaArgs waimao)
        {
            //给淘宝店添加中国、日本娃娃
            dianzu.maiwawa += new taobaodian.wawa(zhonggejiaowawa.zhonggejiaowawayanzhi);
            dianzu.maiwawa += new taobaodian.wawa(yibenjiaowawa.yibenjiaowawayanzhi);

            //淘宝店可以开始卖娃娃了
            dianzu.beginmaiwawa(waimao);
        }
    }

    public class Program
    {
        //这里是我们人们需求,想娃娃外貌和价格是怎么样的
        public static void Main()
        {
            //想要的娃娃外貌
            ChongQiWaWaArgs waimao = new ChongQiWaWaArgs("啊~啊~啊","ya ba de","100元");
            //通知厂长要给淘宝店生成一个外貌这样的娃娃,然后淘宝店才有得卖
            changjia changzhan = new changjia(new taobaodian(), waimao);

            Console.WriteLine(" ");
            Console.Write("请输入您想要娃娃(1 或者 2):");
            string wawadaihao = Console.ReadLine();

            if (wawadaihao == "1")
            {
                Console.WriteLine("您买了一个中国娃娃  " + "花费价格为:100元.");
            }
            else if (wawadaihao == "2")
            {
                Console.WriteLine("您买了一个日本娃娃  " + "花费价格为:100元.");
            }
            else
            {
                Console.WriteLine("对不起,我们没有生成这种娃娃.");
            }

            Console.ReadKey();
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值