读书人

C#中event关键字有什么用?该如何处理

发布时间: 2013-08-20 17:47:51 作者: rapoo

C#中event关键字有什么用?
我在程序中定义了一个委托
public delegate void yin(int s);
public event yin tuto;
另外一段代码给tuto赋值后, 运行函数tuto(5);

这个event不要好像也可以,要和不要有什么区别呢?
[解决办法]
delegate 委托
event 事件
事件是特殊的委托,是多播委托,可以添加多个事件处理函数,但是委托只能绑定一个处理函数。
[解决办法]

引用:
public delegate void yin(int s);
public event yin tuto;//有event定义
另外一段代码给tuto赋值后, 运行函数tuto(5);

public delegate void yin(int s);
public yin tuto;//没有event定义
另外一段代码给tuto赋值后, 运行函数tuto(5);

运行没什……

5楼说的就是你想要的答案,可惜你看不懂...
[解决办法]
你可以往事件上绑定多个处理函数,使用+=运算符,比如
button.Click += button1_Click1;
button.Click += button1_Click2;
这样,多个处理函数都可以被调用。
幕后,event的+=运算会被编译器转化成多播委托的合并操作(Delegate.Combine方法的调用,而你却不用操心这些)
[解决办法]
给个事件的例子

using System.Windows.Forms;

namespace 窗体间通信
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Form2 f2=new Form2();

f2.send += delegate(string text)
{//订阅f2的事件send,并以匿名方法处理
textBoxForm1.Text = text;
};
f2.Show();
}
}
}


using System;


using System.Windows.Forms;

namespace 窗体间通信
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public delegate void sendStr(string data);//委托类型声明
public event sendStr send;//事件声明
private void btnSend_Click(object sender, EventArgs e)
{
send(textBoxForm2.Text);//触发事件
}
}
}


[解决办法]
我大概知道楼主什么意思了
你是说public yin tuto;//没有event定义
这样也是可以绑定事件...
其实tuto这个时候不是一个事件,而是作为一个对象的实例,也就是说他是你定义的代理的一个实例.他的功能是
代理的功能
[解决办法]
引用:
我在程序中定义了一个委托
public delegate void yin(int s);
public event yin tuto;
另外一段代码给tuto赋值后, 运行函数tuto(5);

这个event不要好像也可以,要和不要有什么区别呢?

你可以看看事件概述:
http://msdn.microsoft.com/zh-cn/library/vstudio/awbftdfh.aspx

类或对象可以通过事件向其他类或对象通知发生的相关事情

事件具有以下特点:

发行者确定何时引发事件,订户确定执行何种操作来响应该事件。

一个事件可以有多个订户。 一个订户可处理来自多个发行者的多个事件。

没有订户的事件永远也不会引发。

事件通常用于通知用户操作,例如,图形用户界面中的按钮单击或菜单选择操作。

如果一个事件有多个订户,当引发该事件时,会同步调用多个事件处理程序。 要异步调用事件,请参见使用异步方式调用同步方法。

在 .NET Framework 类库中,事件是基于 EventHandler 委托和 EventArgs 基类的。

你可以理解为一种通知或触发机制,
想想窗体或控件的各种事件,
都是达到某种条件而触发并执行绑定的方法
[解决办法]
1.event这个关键字会把一般的委托转换为具有Add和Remove方法的持殊委托属性。
2.event关键字,限定了外界对委托变量只能使用+=或-=操作符,从而限定外界的非法赋值和调用
3.有event关键字标识的委托,一般情况下的返回值类型都是void(当前这非硬性规定)

读书人网 >C#

热点推荐