c# 事件

本文详细介绍了C#中的事件与委托的概念,包括委托的定义、语法、使用方法,以及事件的创建、触发和处理过程。通过示例代码演示了如何在C#程序中实现事件监听与响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:http://stackoverflow.com/questions/803242/understanding-events-and-event-handlers-in-c-sharp

事件基于委托,为委托提供了一种发布/订阅机制。

委托

定义委托,就是告诉编译器这种类型的委托表示哪种类型的方法。然后必创建该委托的一个或多个实例。其语法类似于方法的定义,但没有方法体,定义前面要加上关键字delegate.委托在语法上总是的接受一个参数的构造函数,这个参数就是委托引用的方法。这个方法必须匹配最初定义委托时的签名。
private delegate string GetAString();
static void Main()
{
int x=40;
GetAString firstStringMethod=new GetAstring(x.ToString);
Console.WriteLine(firstStringMethod());
}


 firstStringMethod()等价于firstStringMethod.Invoke()
GetAString firstStringMethod = new GetAString(x.ToString);
等价于
GetAstring firstStringMethod = x.ToString;

事件

当系统中发生了一些事情时,我们想能调用一些代码来执行或者称为处理事件。我们把这些要调用的代码创建为函数,在事件与函数之间我们使用委托机制,在这种机制里,事件需要有一个存储函数的列表。

而我们定义一个EventHandler时,实际上是在定义函数的外形。定义一个event时,实际是在说明这个事件会invoke哪类的EventHandler。最后EventHandler通过委托来添加实际的事件处理函数。

示例代码

//This delegate can be used to point to methods
//which return void and take a string.
public delegate void MyEventHandler(string foo);

//This event can cause any method which conforms
//to MyEventHandler to be called.
public event MyEventHandler SomethingHappened;

//Here is some code I want to be executed
//when SomethingHappened fires.
void HandleSomethingHappened(string foo)
{
    //Do some stuff
}

//I am creating a delegate (pointer) to HandleSomethingHappened
//and adding it to SomethingHappened's list of "Event Handlers".
myObj.SomethingHappened += new MyEventHandler(HandleSomethingHappened);

通过sender=null,e=null可以手动调用事件处理函数。

EventHandler委托


表示将处理不包含事件数据的事件的方法表示将处理不包含事件数据的事件的方法。
[SerializableAttribute]
[ComVisibleAttribute(true)]
public delegate void EventHandler(
	Object sender,
	EventArgs e
)
sender           类型:System.Object         事件源 e         类型:System.EventArgs         不包含事件数据的对象


ScrollEventHandler委托

表示处理DataGridView\ScrollBar\TrackBar或DataGrid的Scroll事件的方法

public delegate void ScrollEventHandler(
	Object sender,
	ScrollEventArgs e
)
sender
类型: System.Object
事件源。 
e
类型: System.Windows.Forms.ScrollEventArgs
包含事件数据的 ScrollEventArgs。 






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值