事件的那些事儿

事件说白了就是委托,一种特殊的委托。

事件我们可以理解成:消费者向服务者提出服务的方式,然后服务者根据消费者提出的方式去执行服务,比如餐馆与食客。

建立事件的要素

1.声明一个委托(饭店经营的执照):

public delegate void myDelegate(Custom sender);

2.定义一个提供事件服务的类,里面包含了事件的定义、调用事件执行的方法,当然也可以包含事件委托。

 2.1声明一个改委托类型的事件(饭店里的厨子):

public event myDelegate  myEvent;

 2.2 定义事件执行的方法(厨子做饭)

public void Run(object sender)
       {
           myServer(sender);
       }

3.定义一个使用时间的消费者类,里面包含了 将事件和消费事件方法绑定、消费事件方法的定义
3.1 自身的事件方法和服务类事件挂钩(厨子和执照的对应,没有执照不让开厨子做生意):

 

public void Customer(Server se)
        {
            se.myServer+=new Server.myDelegate(this.myCus);
        }

3.2消费事件方法(客人提出自己想吃什么,这饭怎么做)

public void myCus(object cs)
        {
            Console.WriteLine(cs.ToString()+"是消费事件方法");
        }

4主函数中对事件本身触发的使用(主函数相当于饭馆的饭桌):

4.1调用Customer方法(客人来了提出自己想吃什么)

4.2.调用服务类事件执行方法(厨师去按照客人的吩咐做饭)

总览:

class Server
    {
       public delegate void myDelegate(object sender);
       public event myDelegate  myServer;
       public void Run(object sender)
       {
           myServer(sender);
       }
    }
    class Custom
    {
        
        public void Customer(Server se)
        {
            
            se.myServer+=new Server.myDelegate(this.myCus);
        }
        public void myCus(object cs)
        {
            Console.WriteLine(cs.ToString()+"是消费事件方法");
        }
    }
   
    public class Event
    {
        static void Main()
        {
            
            Server server = new Server();            
            Customer cs = new Customer();
            cs.Customer(server);
            server.Run(new Event());
            Console.ReadKey();
        }

      }

 

一些扩展:

1.在以上的代码中的

server.Run(new Event())

new Event() 这个参数可以变换,因为当初设定服务类中事件运行方法和委托的时候参数是 object类型,所以这里可以是各种对象。这就使委托变得形式多样化。

2.声明委托的时候,也可以独立在类之外,但是参数类型就只能是object,而不是前面提到的Custom,因为委托面向的范围层级不一样。限定具体类类型的委托需包含于类中。看代码:

namespace Test
{
    public delegate void myDelegate(object sender);
    class Server
    {
       public event myDelegate  myServer;
       public void run(object sender)
       {
           myServer(sender);
       }
    }
    class Custom
    {
        public void myCus(object cs)
        {
            Console.WriteLine(cs.ToString()+"什么");
        }
    }
   
    public class Event
    {
        static void Main()
        {
            
            Server server = new Server();
            server.myServer += new myDelegate(new Custom().myCus);
            Custom sc = new Custom();
            server.run(sc);
            Console.ReadKey();
        }

        static void server_myServer(object sender)
        {
            Console.WriteLine(sender.ToString());
            Console.WriteLine(123);
        }
       
    }
 }

 

posted @ 2013-05-13 17:10  白菜帮子  阅读(164)  评论(0编辑  收藏  举报