• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

游戏开发

常州微信小程序-C#观察者模式和委托联合使用

原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2019/0126/360.html

C#观察者模式和事件委托的联合使用

 

观察者模式(Observer Pattern)有时又被称为订阅——发布模式,它主要应对这样的场景:需要将单一事件的通知(比如对象状态发生变化)广播给多个订阅者(观察者)。下面我们常州软件技术培训就来说说观察者模式和事件委托的联合使用。

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

//观察者模式和事件委托的联合使用

namespace 委托和事件2

{

    //热水器的类,被监视的对象

    public class Heater

    {

        private int temperature;//水温

        public delegate void heatEventHandler(int para);

        public event heatEventHandler heat;  //声明事件 事件的命名为委托去掉EventHandler之后的部分

        //烧水

        public void boilWater()

        {

            for (int i = 0; i <= 100; i++)

            {

                temperature = i;

                if (temperature >= 98)

                {

                    if (heat != null) //有方法注册进事件中

                    {

                        heat(temperature); //在条件满足的情况下通知观察者

                    }

                }

            }

        }

    }

    //警报类,常州平台运营observer的角色

    public class Alarm

    {

        public void boilVoice(int para)

        {

            Console.WriteLine("嘀嘀嘀");

        }

    }

    //显示类。显示水温,observer的角色

    public class Show

    {

        public void ShowTemperature(int para)

        {

            Console.WriteLine("水温已经{0}度了",para);

        }

    }

    //

    class Program

    {

        static void Main(string[] args)

        {

            Heater heater = new Heater();

            Alarm alarm = new Alarm();

            Show show = new Show();

            heater.heat += alarm.boilVoice;

            heater.heat += show.ShowTemperature;

            heater.boilWater();

            Console.Read();

        }

    }

}

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace 常州微信公众平台事件访问器

{

    //定义委托

    public delegate string GeneralEventHandler();

    //定义事件的发布者

    public class Publisher

    {

        private GeneralEventHandler _delegate;

        public event GeneralEventHandler geneal //事件访问器的定义

        {

            add { _delegate = value; }

            remove { _delegate -= value; }

        }

        public void DoSomething()

        {

            if (_delegate != null)

            {

                string str = _delegate();

                Console.WriteLine(str);

            }

        }

    }

    //定义事件的订阅者

    public class Subscriber

    {

        public string method()

        {

            return "liK";

        }

    }

    class Program

    {

        static void Main(string[] args)

        {

            Publisher ps = new Publisher();

            Subscriber sb = new Subscriber();

            ps.geneal += sb.method;

            ps.DoSomething();

            Console.Read(); 

        }

    }

}

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace 委托和事件常州微信小程序开发返回值研究

{

    public delegate string testEventHandler();

    class AA

    {

        public testEventHandler test;

        public void method()

        {

            if (test != null)

            {

                Console.WriteLine(test());

            }

        }

    }

    class BB

    {

        public static string bb()

        {

            return "likang01";

        }

    }

    class CC

    {

        public static string cc()

        {

            return "likang02";

        }

    }

    class Program

    {

        static void Main(string[] args)

        {

            AA aa = new AA();   //委托变量可以供对个订阅者注册,如果定义了返回值,那么对个订阅者都会向发布者返回数值

            aa.test = BB.bb;    //结果就是后面的一个返回值将前面的返回值覆盖了,实际上只能获得最后一个方法调用的返回值

            aa.test += CC.cc;

            aa.test -= CC.cc;

            aa.method();

            Console.Read();

        }

    }

}

 

这篇文章是学习常州游戏开发的一位大神的笔记吧,大神还写了事件和委托的高级篇,无赖不甚理解,暂时不上了,要看的直接访问



上篇:上一篇:常州手机游戏-C++游戏服务器编程-LogServer
下篇:下一篇:常州手游开发-U3D中角色的动画脚本的编写