天天看点

事件-c#版例1:例二:例三:

       1.定义事件的语法:<访问修饰符> event 委托名 事件名;

       2.订阅事件的语法:事件名+=new 委托名(方法名);

       3.定义好事件后,与事件有关的人会订阅事件,只有订阅事件的对象才会收到发生事件的通知,没有订阅该事件的对象则不会收到通知;

       4.事件的订阅通过“+=”操作符来实现,可以给事件加一个或多个方法委托;

       5.奥运会参加百米的田径运动员听到枪声,比赛立即进行。其中枪声是事件,而运动员比赛就是这个事件发生后的动作。不参加该项比赛的人对枪声没有反应。从程序员的角度分析,当裁判员枪声响起,发生了一个事件,裁判员通知该事件发生,参加比赛的运动员仔细听枪声是否发生。运动员是该事件的订阅者,没有参赛的人不会注意,即没有订阅该事件。

       6.事件是一种特殊的委托,或者说是受限制的委托。事件只能在类内部调用,不能在外部调用;而委托在类内,外部都有可以调用

例1:

namespace ConsoleApp3
{
    class Program
    {
        
        static void Main(string[] args)
        {
            Judgement judgement = new Judgement();
            RunSports runSports = new RunSports();

            runSports.d += judgement.Run;
            runSports.Begin();
          
            Console.ReadKey();
        }
    }
    public class Judgement  //裁判
    {
        public void Run()
        {
            Console.WriteLine("运动员开始比赛");
            
        }
    }
    public class RunSports  //运动员
    {
        public delegate void del();
        public event del d;
        public void Begin()
        {
            d();
        }
    }
}
           

=》

事件-c#版例1:例二:例三:

例二:

public delegate void HelloWorldDelegate(string name);
    public class HelloWorldClass
    {
        public event HelloWorldDelegate del;
        public void HelloWorld(string name)
        {
            del(name);     //委托调用所有注册的方法
        }
    }
    class Program
    {
        private static void ByEnglish(string name)
        {
            Console.WriteLine("Hello World By" + name);
        }
        private static void ByChinese(string name)
        {
            Console.WriteLine("你好" + name);
        }

        static void Main(string[] args)
        {
            HelloWorldClass hw = new HelloWorldClass();
            //hw.del = ByEnglish;    //会出现编译错误
            hw.del += ByChinese;   //直接+=就好  
            hw.HelloWorld("张三");

            Console.ReadKey();
        }
    }
           
事件-c#版例1:例二:例三:

例三:

namespace ConsoleApp4
{
    class Program
    {
        public delegate void P();
        static void Main(string[] args)
        {
            MyDelegate.del += Person.Run;
            MyDelegate.del += Person.Eat;
            MyDelegate.LogEvent();

            P p = Person.Run;
            p += Person.Eat;
            p();

            Action action = Person.Run;
            action += Person.Eat;
            action();

            Console.ReadKey();
        }

       public  class Person
        {
           public  static void Run()
            {
                Console.WriteLine(" 开始跑步!");
            }
           public  static void Eat()
            {
                Console.WriteLine(" 开始吃饭!");
            }

        }
    }
    class MyDelegate
    {
        public delegate void myDelegate();
        public static  event myDelegate del;
        public static void LogEvent()
        {
            if (del != null)
            {
                del();
            }
        }
    }
}
           
事件-c#版例1:例二:例三: