首先谈谈什么是事件:
定义一个事件之前我们先定义一个委托 

---- delegate void DL();
---- event DL sj;
可见事件是委托的一个实例。
事件发生的时候是要有动作的,我们就可以把这个动作定义成为一个方法
我们就可以通过委托把事件和方法关联起来:
sj()+=Dl(方法名),这样我们就把一个方法关联到事件中去了。当事件被触发之后,方法也就随之运行了。这个方法随意,调用哪的都可以(访问级别许可),但是事件确实不同,当给事件关联方法时候,在哪都可以这样做,但是事件的调用却是在哪里定义,在哪里执行。
 
    //事件在哪定义之前要先定义委托
    //委托是公有的,方法可以封装任何一个类中和委托匹配的方法
    //事件只能在定义的类中被调用。
------------------------------------------------
简单例子:
    delegate void DL();
    class Pro
    {
        static void Main()
        {

            aaa a1 = new aaa();
            a1.aa();
        }

      public   static void p_sj()
        {
            Console.WriteLine("我是 Pro里面的方法执行结果");
        }
    }
    class ope
    {
        public event DL sj;
        public void call()
        {
            sj();
        }
    }
    class aaa
    {
        public void aa()
        {
            ope p = new ope();
            p.sj += new DL(Pro.p_sj);
            p.call();
         
        }

    }
 -----------------------------------------------------
    class progrom
    {
        delegate void DL();
        event DL sj;
        static void Main(string[] args)
        {
            progrom pp = new progrom();
            pp.sj += new DL(Print);
            pp.sj();
        }
        static void Print()
        {
            Console.WriteLine("P");
        }
    }