using System;
using System.Text;
namespace MyDelegate
{
class Car
{
//这个是定义委托,我比较明白,但是后面的参数(string msg)是什么意思呢,说事件的委托要有两个参数,但是string 和 msg 是两个参数 还是一个string类型的msg参数呢?
public delegate void delegateCar(string msg);
//这个是定义了事件,但后面定义的eventCar必须用delegateCar来定义嘛?
public event delegateCar eventCar;
//这个方法是做什么的?
public void Stop()
{
//还有这个说是来触发事件的,为什么这么用呢?eventCar("刹车!");就能触发事件?应该怎么理解呢?
eventCar("刹车!");
}
}
//这个类用来做什么呢?
class CarHandler
{
//这个方法用来做什么呢?它的参数和声明的委托一样,这两个有联系嘛?
public void HandlerEvent(string msg)
{
//这里为何只输出一个msg参数呢,代表什么呢?
Console.WriteLine(msg);
}
}
class Program
{
public static void Main(string[] args)
{
Car car = new Car();
CarHandler handler = new CarHandler();
//这句是什么意思,说+=用来订阅事件的,我不太理解这个概念。希望把这句话详细的解释一下比如:+=用来做什么/Car.delegateCar用来做什么/Car.delegateCar用来做什么/
car.eventCar += new Car.delegateCar(handler.HandlerEvent);
//这里为和调用stop()
car.Stop();
}
}

这样好看点

解决方案 »

  1.   


    using System; 
    using System.Text; 
    namespace MyDelegate 

    class Car 

    //这个是定义委托,我比较明白,但是后面的参数(string msg)是什么意思呢,说事件的委托要有两个参数,但是string 和 msg 是两个参数 还是一个string类型的msg参数呢? 
    //是一个参数,即string类型的参数,参数名为msg
    public delegate void delegateCar(string msg); 
    //这个是定义了事件,但后面定义的eventCar必须用delegateCar来定义嘛?
    //先定义委托,再定义事件
    public event delegateCar eventCar;   //定义一个事件,类型是delegateCar类型的
    //这个方法是做什么的?        //定义了Stop方法,此方法执行时出发事件eventCar
    public void Stop() 

    //还有这个说是来触发事件的,为什么这么用呢?eventCar("刹车!");就能触发事件?应该怎么理解呢?    //使用eventCar也可以啊
    eventCar("刹车!"); 


    //这个类用来做什么呢? 
    class CarHandler 

    //这个方法用来做什么呢?它的参数和声明的委托一样,这两个有联系嘛? 
    public void HandlerEvent(string msg) 

    //这里为何只输出一个msg参数呢,代表什么呢? 
    Console.WriteLine(msg); 


    class Program 

    public static void Main(string[] args) 

    Car car = new Car(); 
    CarHandler handler = new CarHandler(); 
    //这句是什么意思,说+=用来订阅事件的,我不太理解这个概念。希望把这句话详细的解释一下比如:+=用来做什么/Car.delegateCar用来做什么/Car.delegateCar用来做什么/ 
    car.eventCar += new Car.delegateCar(handler.HandlerEvent);    //将car的eventCar事件中,附加上事件HandlerEvent
    //这里为和调用stop()     //执行eventCar事件,否则看不到输出结果
    car.Stop(); 



      

  2.   

    using System;
    using System.Text;
    namespace MyDelegate
    {
    class Car
    {
    //所谓委托,你可以理解为函数指针,就是指向某个函数的指针(如果你学过c的话,应该可以理解)
    //void delegateCar(string msg),void是返回类型,delegateCar是委托类型的名字,以后可以用它来创建委托,msg为参数,string是参数类型
    public delegate void delegateCar(string msg);
    //这个是定义了事件,但后面定义的eventCar必须用delegateCar来定义嘛?必须!委托定义了函数的参数、返回值,而事件什么都没有定义,所以事件必须依赖于委托的定义。如果把委托视作函数指针的话,delegateCar就是函数指针类型,eventCar就是函数指针类型的一个变量了,
    public event delegateCar eventCar;
    //这个方法是做什么的?Car的方法,表示要求汽车停下来。这里并没有实现如何让car停下来的,只是发出事件说car已经刹车了。
    public void Stop()
    {
    //还有这个说是来触发事件的,为什么这么用呢?eventCar("刹车!");就能触发事件?应该怎么理解呢?
    //前面已经说了,委托是函数指针,event是函数指针类型的变量,现在就是根据变量的值,找到相应的函数,并调用。
    //另外,函数的调用,通常要判断:if(eventCar!=null),以防止函数指针变量未指向任何函数。
    eventCar("刹车!");
    }
    }
    //这个类用来做什么呢?这个类用来使用Car类,创建一个Car的实例,并通知它停下来(Stop),当然,还得告诉Car,停下来的时候要发出通知给HandlerEvent函数
    class CarHandler
    {
    //这个方法用来做什么呢?它的参数和声明的委托一样,这两个有联系嘛?
    //用来响应eventCar事件的,它是被函数指针指向的目标,所以它的参数和返回值,必须与函数指针类型定义的一致。
    public void HandlerEvent(string msg)
    {
    //这里为何只输出一个msg参数呢,代表什么呢?这是对Stop动作中的事件eventCar("刹车!")的响应,表示刹车事件的发生。而这里仅仅是把刹车事件显示出来,并没有做别的什么后继的操作。
    Console.WriteLine(msg);
    }
    }
    class Program
    {
    public static void Main(string[] args)
    {
    Car car = new Car();
    CarHandler handler = new CarHandler();
    //这句是什么意思,说+=用来订阅事件的,我不太理解这个概念。希望把这句话详细的解释一下比如:+=用来做什么/Car.delegateCar用来做什么/Car.delegateCar用来做什么/
    //handler.HandlerEvent是被指向的函数,Car.delegateCar是函数指针类型,car.eventCar是函数指针变量。我理解就是把被指向的函数,封装成函数指针类型的实例,存入变量中(这里用+=,而不用=,这是因为委托可以指向多个函数,相应的,还可以用-=来解除一个函数)
    //我更喜欢一个简化的方法:car.eventCar += handler.HandlerEvent;我的理解就是让car.eventCar指向handler.HandlerEvent
    car.eventCar += new Car.delegateCar(handler.HandlerEvent);
    //这里为和调用stop()。调用停车功能,car对象会在执行完停车的任务后,自动触发刹车事件
    car.Stop();
    }
    }
      

  3.   

    嗯,对class CarHandler的说明错了,改类仅仅提供了一个函数,用来响应事件而已
      

  4.   

    其实你只要理解委托就可以了。
    委托就好比生孩子。
    你是人类,同时也是一个人,这是一个实例。但是你是男的所以生不了孩子,你可以找个女的委托一个女的帮你生孩子。
    这里你就是Car类,而生孩子的事件就是eventCar,而这个事件中msg就是你得sperm,具体怎么生孩子又女的自己决定。呵呵,不知道这样你是否能够明白