delegate(委托)、event(事件) 的基础知识

本文通过实例详细解析了C#中的事件(Event)与委托(Delegate)的概念及使用方式,并介绍了如何在用户控件中实现事件触发机制。

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

1. event和delegate类型的字段到底有什么区别

 

http://www.cnblogs.com/Microshaoft/archive/2005/05/30/164753.html

 

2. 事件与事件处理程序

a)


  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;

namespace WebApplication14
{
public partial class _Default : System.Web.UI.Page
{
private static StringBuilder mysb = new StringBuilder();
protected void Page_Load( object sender, EventArgs e)
{
HasEvent he
= new HasEvent();

he.SampleEvent
+= new HasEvent.MyEventHandler(SampleEventHandler);

he.DemoEvent(
" Hey there, Bruce! " );
he.DemoEvent(
" How are you today? " );
he.DemoEvent(
" I'm pretty good. " );
he.DemoEvent(
" Thanks for asking! " );
Label1.Text
= mysb.ToString() ;
}

private static void SampleEventHandler( object src, MyEventArgs mea)
{
mysb.Append(mea.Message);
}
}

public class MyEventArgs : EventArgs
{
private string msg;

public MyEventArgs( string messageData)
{
msg
= messageData;
}
public string Message
{
get { return msg; }
set { msg = value; }
}
}
// ---------------------------------------------------------
public class HasEvent
{
// Declare an event of delegate type MyEventHandler of
// MyEventArgs.


public delegate void MyEventHandler( object sender, MyEventArgs e);
public event MyEventHandler SampleEvent;

public void DemoEvent( string val)
{
// Copy to a temporary variable to be thread-safe.

MyEventHandler temp
= SampleEvent;
if (temp != null )
temp(
this , new MyEventArgs(val));
}
}
}

 

b)


  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;

namespace WebApplication14
{
public partial class _Default : System.Web.UI.Page
{
private static StringBuilder mysb = new StringBuilder();
protected void Page_Load( object sender, EventArgs e)
{
HasEvent he
= new HasEvent();
he.SampleEvent
+=
new EventHandler < MyEventArgs > (SampleEventHandler);

he.DemoEvent(
" Hey there, Bruce! " );
he.DemoEvent(
" How are you today? " );
he.DemoEvent(
" I'm pretty good. " );
he.DemoEvent(
" Thanks for asking! " );
Label1.Text
= mysb.ToString() ;
}

private static void SampleEventHandler( object src, MyEventArgs mea)
{
mysb.Append(mea.Message);
}
}

public class MyEventArgs : EventArgs
{
private string msg;

public MyEventArgs( string messageData)
{
msg
= messageData;
}
public string Message
{
get { return msg; }
set { msg = value; }
}
}
// ---------------------------------------------------------
public class HasEvent
{
// Declare an event of delegate type EventHandler of
// MyEventArgs.

public event EventHandler < MyEventArgs > SampleEvent;

public void DemoEvent( string val)
{
// Copy to a temporary variable to be thread-safe.
EventHandler < MyEventArgs > temp = SampleEvent;
if (temp != null )
temp(
this , new MyEventArgs(val));
}
}
}

 

c) 假定用户控件(UserControl.ascx)中包含按钮控件Save,希望实现按Save按钮时,包含该用户控件的页面(Default.aspx)可以接收到事件。


UserControl.ascx.cs


  
public event EventHandler SaveClick;

protected void Save_Click( object sender, EventArgs e)
{
if (SaveClick != null )
SaveClick(
this , e);
}

 

Default.aspx.cs 代码


  
< uc1:WebUserControl1 ID = " WebUserControl11 " runat = " server " OnSaveClick = " Save_Click " />

protected void Save_Click( object sender, EventArgs e)
{
}

 

转载于:https://www.cnblogs.com/zhuwenlubin/archive/2010/12/06/1897872.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值