事件

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

namespace 委托和事件的介绍
{
    class Program
    {

        public delegate void SayHello(string name); //定义一个委托
        static event SayHello sayEvent; //事件  对上面的委托

SayHello进行包装 委托:=赋值 +=  事件:+=
        static void Main(string[] args)
        {
            sayEvent += SayHelloCha;
            sayEvent += SayHelloEng;
            sayEvent("事件");
            /*
             * 1.委托delegate
             * 委托是一个类,它定义了方法的类型,使得可以将方法当做

另一个方法的参数来进行传递,
             * 这种将方法动态地赋给参数的做法,可以避免在程序中大量

使用if  else switch 语句
             * 同时使得程序具有更好的可扩张性
             * 
             * 使用委托可以将多个方法绑定到同一个委托变量,当调用此

变量时候,可以依次调用所有
             * 绑定的方法
             * 
             * 2,事件 event
             *  事件其实没有什么不好理解的,声明一个事件不过是类似

于声明一个进行了封装的委托类型的变量而已
             *  在委托的基础上进行了包装
             *  
             * 作业:热水器  警报器  显示器
             * 当温度到90的时候观察者的状态发生改变
             * 
             */
            doSayHello("Tom", SayHelloEng);
            Console.ReadKey();
        }
        /// <summary>
        /// 打招呼
        /// </summary>
        static void SayHelloCha(string name)
        {
            Console.WriteLine(name + "早上好");
        }
        static void SayHelloEng(string name)
        {
            Console.WriteLine(name + "Hello");
        }

        static void doSayHello(string name, SayHello say) //say:相

当于一个方法,只关注返回值和参数
        {
            say(name);
        }
        
    }
}



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

namespace ConsoleApplication1
{
    class Program
    {
        delegate void weituo(); 
       static event weituo shijian ;//事件问题,定义了一个事件,把委托放进去
        enum enu { Chinese,English};
        static void Main(string[] args)
        {
            enu en=new enu();
            Console.WriteLine("请输入密码的语言");
            Console.WriteLine("A:Chinese");
            Console.WriteLine("B:English");
            string ss = Console.ReadLine();
            if (ss == "A")
            {
                en = enu.Chinese;
            }
            else
            {
                en=enu.English;
            }
            switch (en)
            {
                case enu.Chinese:
                   weituo w=SayC;
                    shijian+=w;//事件添加函数的方法和多播委托一样
                    shijian();
                    break;
                case enu.English:
                    weituo ww = new weituo(SayE);
                    shijian += ww;
                    shijian();
                    break;
            }
            
            Console.ReadKey();
        }
        static public void SayC()
        {
            Console.WriteLine("王尼玛,你好");
        }
        static public void SayE()
        {
            Console.WriteLine("王尼玛,hello");
        }
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值