·delegate定义一种签名的方式。
例:delegate void yourDelegateName(Type param1, Type param2)。 yourDelegateName仅仅是一个名字,标示这种签名方式:(Type param1, Type param2)包括返回值void。当然你也可以这样定义其它的签名:delegate int otherDelegateName(string id, string name)等等。·event定义哪一种类型的事件。这里的类型便是指上面定义的yourDelegateName的delegate,因此,事件必须这样定义:event yourDelegateName yourEventName,这样就告诉事件接受方我这个事件的签名方式。·事件接受方必须定义一个符合(或者说对应)yourDelegateName签名方式的方法。例如:void yourDo(Type param1,Type param2)。·最后,事件接受方将这个方法和事件联系起来:事件产生方.yourEventName += new yourDelegateName(yourDo)。因为yourDo方法是严格按照yourDelegateName签名的,因此只要传递方法名。当yourEventName事件发生时,这个事件会自己调用你的方法(yourDo)。·很显然,如果需要多路广播,可以这样:
事件产生方.yourEventName += new yourDelegateName(yourDo1);
事件产生方.yourEventName += new yourDelegateName(yourDo2);
...
关键是你的自定义事件是用你的自定义委托声明的,接受方的事件响应方法是符合你的自定义委托的签名方法。说了这么多,希望能对你有所帮助。
例:delegate void yourDelegateName(Type param1, Type param2)。 yourDelegateName仅仅是一个名字,标示这种签名方式:(Type param1, Type param2)包括返回值void。当然你也可以这样定义其它的签名:delegate int otherDelegateName(string id, string name)等等。·event定义哪一种类型的事件。这里的类型便是指上面定义的yourDelegateName的delegate,因此,事件必须这样定义:event yourDelegateName yourEventName,这样就告诉事件接受方我这个事件的签名方式。·事件接受方必须定义一个符合(或者说对应)yourDelegateName签名方式的方法。例如:void yourDo(Type param1,Type param2)。·最后,事件接受方将这个方法和事件联系起来:事件产生方.yourEventName += new yourDelegateName(yourDo)。因为yourDo方法是严格按照yourDelegateName签名的,因此只要传递方法名。当yourEventName事件发生时,这个事件会自己调用你的方法(yourDo)。·很显然,如果需要多路广播,可以这样:
事件产生方.yourEventName += new yourDelegateName(yourDo1);
事件产生方.yourEventName += new yourDelegateName(yourDo2);
...
关键是你的自定义事件是用你的自定义委托声明的,接受方的事件响应方法是符合你的自定义委托的签名方法。说了这么多,希望能对你有所帮助。
解决方案 »
- C#2008,DataGridView中用soSymbolLib .Draw的方式输出符号的问题
- Remoting 服务器端抛出自定义异常,客户端提示“未找到反序列化类型对象的构造函数”。
- xpe如何安装组件?如何知道程序在xpe上运行缺少哪些组件?
- 在c#中网页文本框存储的格式,在读取时依然是原来存入的格式呀
- wsdl问题,是关于名称空间的。慌了
- sql ce 里面写入数据问题
- 请问在C#的ASP。NET网站中没有有哪个控件可以即输入文本信息,又可粘贴图象?
- calendar控件弹出
- c#winform程序怎么判断浏览器是否打开,如果打开则强制关闭
- VS.NET 生成的文档是XML格式, 谁有已经做好的XSLT?
- 各位高手,高高手,请问C#怎么实现VB的Winsock控件功能?
- 局域网内任何 机器 互相通信,是不是通过服务器端专发?怎么设计呢?
呵呵,我觉得cncys(山上老虎)说的很好!清楚、正确!
public delegate void TestDelegate();
class TData
{
private int data;
punlic event TestDelegate OnDataChange;
public int Data
{
get
{
return data;
}
set
{
if(data!=value)$$(OnDateChange!=null)
{
data=value;
OnDateChange();
}
}
}
public void PrintText()
{
System.Console.Write("Data's valus is Changed");
}
public TData()
{
OnDataChange+=new TestDelegate(PrintText);
}
}
class AppClass
{
public static void Main()
{
Tdada AppData=new Tdata();
AppData.Data=5 //data变化,触发OnDataChange 事件
}
}
程序编译后输出:
Data's value is changed
说明:
关键字event作用:1、说明这是一个事件处理过程 2、对事件委托只能进
行“+=”或“-=”操作。