2021-7-28 事件的基本练习

事件和委托的关系相当于属性和字段的关系,事件可以说是特殊的委托,下面是事件的简单练习1

using System;

namespace EventTest
{ 
    class Program
    {
        
        static void Main(string[] args)
        {
            Test t = new Test();
            t.numberChange += T_numberChange;//事件的方法
            t.SetNum(20);
            t.SetNum(10);
            Console.ReadKey();
        }

        private static void T_numberChange()//每次调用事件触发一次
        {
            Console.WriteLine("改变");
            Console.WriteLine("按下回车继续");
            Console.ReadKey();

        }
    }
    class Test
    {
        private int value;
        public delegate void numberChangeHandler();//先定义委托再定义事件
        public event numberChangeHandler numberChange;
        protected void OnChange()
        {
            if (numberChange!=null)
            {
                numberChange();//事件调用位置
            }
            else
            {
                Console.WriteLine("没有触发事件");
            }
        }
        public void SetNum(int a)
        {
            if (value!=a)
            {
                value = a;
                Console.WriteLine(a);
                OnChange();
            }
        }
        public Test()
        {
            int n = 5;
            SetNum(n);
        }
    }
}
View Code

 简单练习2

using System;

namespace newEventTest
{
    class Program
    {
        static void Main(string[] args)
        {
            newTest newTest = new newTest();
            newTest.carEvent += NewTest_carEvent;
            newTest.sea("黎明", "轮船");
            newTest.sea("黎明", "游艇");
            newTest.sky("刘德华", "飞机");
            newTest.sky("李白", "自行车");
            Console.ReadKey();
        }

        private static string NewTest_carEvent(string name, string car)
        {
            Console.WriteLine(name+"坐上了"+car);
            return car;
        }
    }
    class newTest
    {
        public delegate string carHandler(string name, string car);
        public event carHandler carEvent;
        public newTest()
        {
            
        }

    
        public void road(string name,string car)
        {
            Road flag;
            if (Enum.TryParse<Road>(car, true, out flag))
            {
                carEvent(name, car);
            }
        }
        public void sea(string name,string car)
        {
            Sea flag;
            if (Enum.TryParse<Sea>(car, true, out flag))
            {
                carEvent(name, car);
            }
           
        }
        public void sky(string name,string car)
        {
            Sky flag;
            if (Enum.TryParse<Sky>(car, true, out flag))
            {
                carEvent(name, car);
            }
        }
       
        enum Road
        {
            小轿车,
            公交车,
            火车
        }
        enum Sea
        {
            轮船,
            游艇,
            潜水艇
        }
        enum Sky
        {
            飞机,
            火箭,
            直升机
        }
    }
}
View Code

优化

using System;

namespace newEventTest
{
    class Program
    {
        static void Main(string[] args)
        {
            newTest newTest = new newTest();
            newTest.carEvent += NewTest_carEvent;
            newTest.carEvent += Speed;
            newTest.Transport("黎明", "轮船");
            newTest.Transport("黎明", "游艇");
            newTest.Transport("刘德华", "飞机");
            newTest.Transport("李白", "自行车");
            Console.ReadKey();
        }

        private static string Speed(string name, string car)
        {
            newTest.Road flag;
            newTest.Sea flag1;
            newTest.Sky flag2;
            if (Enum.TryParse(car, true, out flag))
            {
                Console.WriteLine(car + "速度慢\n");
            }
            else if (Enum.TryParse(car, true, out flag1))
            {
                Console.WriteLine(car + "速度一般\n");
            }
            else if (Enum.TryParse(car, true, out flag2))
            {
                Console.WriteLine(car + "速度很快\n");
            }
            else
            {
                Console.WriteLine(car + "无法识别\n");
            }
            return car;
        }

        private static string NewTest_carEvent(string name, string car)
        {
            Console.WriteLine(name + "坐上了" + car);
            return car;
        }

    }
    class newTest
    {
        public delegate string carHandler(string name, string car);
        public event carHandler carEvent;
        public newTest()
        {
        }
        public void Transport(string name, string car)
        {
            Road flag;
            Sea flag1;
            Sky flag2;
            if (Enum.TryParse(car, true, out flag))
            {
                carEvent(name, car);
            }
            else if (Enum.TryParse(car, true, out flag1))
            {
                carEvent(name, car);
            }
            else if (Enum.TryParse(car, true, out flag2))
            {
                carEvent(name, car);
            }
            else
            {
                Console.WriteLine(name+"所乘坐交通工具无法识别");
            }
        }

        public enum Road
        {
            小轿车,
            公交车,
            火车
        }
        public enum Sea
        {
            轮船,
            游艇,
            潜水艇
        }
        public enum Sky
        {
            飞机,
            火箭,
            直升机
        }
    }
}
View Code

 

posted @ 2021-07-28 10:19  月长生  阅读(29)  评论(0)    收藏  举报