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();
}
}
}
这样好看点
解决方案 »
- .NET C#的问题Dataset
- 用XPath解析XML,然后用StringBuilder输出数据和用XML生成DataTable,然后用Repeater绑定两种方法的比较
- 怎样把新创建的 xmldocument 通过 XmlTextWriter 输出成字符串?
- MciSendString 播放MP3
- 不知道我的思路乱在哪....请大家帮忙
- 如何得到一个数据集:以当前年度为基准,前后五年
- 求助重新DataGrid.BackGroundImage方法
- 在线等!dataGrid删除行的问题!解决问题给分!
- 封装数据库访问层,支持多数据库。
- Xml内容提的格式化问题
- C# 如何动态调用DLL中事件
- 编写这种软件的思路是什么(标题说不清楚),求高手指教!
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();
}
}
}
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();
}
}
}
委托就好比生孩子。
你是人类,同时也是一个人,这是一个实例。但是你是男的所以生不了孩子,你可以找个女的委托一个女的帮你生孩子。
这里你就是Car类,而生孩子的事件就是eventCar,而这个事件中msg就是你得sperm,具体怎么生孩子又女的自己决定。呵呵,不知道这样你是否能够明白