C# 委托和事件
来源:互联网 发布:油画笔什么牌子好 淘宝 编辑:程序博客网 时间:2024/05/05 17:16
委托:
后台:
它是一种数据类型,和引用类型类似,不过和一般的类相比,委托的实例不是在堆中的数据,而是一个方法。
和C++中的函数指针很相似,但对函数指针更安全,。将函数打包成一个变量进行传递。
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。
事件:
事件实现了对委托的封装,是一个特殊的委托
下面看一下代码(一个分页功能):
下面是用户控件的代码:
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;public delegate void PageChangeHandler(int nPageIndex);public partial class Common_PagerControl : System.Web.UI.UserControl{ public event PageChangeHandler OnPageChange; private int _PageCount = 0;//页数 private int _RecordCount = 0;//数量 private int _PageIndex = 1;//当前页数 protected void Page_Load(object sender, EventArgs e) { } //总页数 public int PageCount { get { return int.Parse(this.LblPageCount.Text); } set { _PageCount = value; /* if (_PageCount < 2) { //this.txtNewPageIndex.Enabled = false; //this.LnkBtnGoto.Enabled = false; } else { //this.txtNewPageIndex.Enabled = true; //this.LnkBtnGoto.Enabled = true; } */ this.LblPageCount.Text = _PageCount.ToString(); } } //总条数 public int RecordCount { get { return int.Parse(this.LblRecordCount.Text); } set { _RecordCount = value; this.LblRecordCount.Text = _RecordCount.ToString(); } } //当前第几页 public int PageIndex { get { return int.Parse(this.LblPageIndex.Text); } set { _PageIndex = value; this.txtNewPageIndex.Text = this.LblPageIndex.Text = _PageIndex.ToString(); if (_PageIndex < 2) { this.LnkBtnFirst.Enabled = false; this.LnkBtnPrevious.Enabled = false; } else { this.LnkBtnFirst.Enabled = true; this.LnkBtnPrevious.Enabled = true; } if (_PageIndex >= _PageCount) { this.LnkBtnNext.Enabled = false; this.LnkBtnLast.Enabled = false; } else { this.LnkBtnNext.Enabled = true; this.LnkBtnLast.Enabled = true; } } } //第一页 protected void LnkBtnFirst_Click(object sender, EventArgs e) { try { OnPageChange(1); } catch { } } //上一页 protected void LnkBtnPrevious_Click(object sender, EventArgs e) { try { int n = Convert.ToInt32(this.LblPageIndex.Text);//当前的页数 n--; if (n > 0) { OnPageChange(n); } } catch { throw; } } //下一页 protected void LnkBtnNext_Click(object sender, EventArgs e) { try { int n = Convert.ToInt32(this.LblPageIndex.Text); n++; if (n <= Convert.ToInt32(this.LblPageCount.Text)) { OnPageChange(n); } } catch (Exception ex) { throw (ex); } } //最后一页 protected void LnkBtnLast_Click(object sender, EventArgs e) { try { int n = Convert.ToInt32(this.LblPageCount.Text); OnPageChange(n); } catch { throw; } } //跳到指定页 protected void LnkBtnGoto_Click(object sender, EventArgs e) { int n; try { n = Convert.ToInt32(this.txtNewPageIndex.Text); } catch { n = Convert.ToInt32(this.LblPageIndex.Text); } int np = Convert.ToInt32(this.LblPageCount.Text.Trim()); if (n > np) n = np; if (n < 1) n = 1; OnPageChange(n); }}
下面是页面引用代码:
页面:
<%@ Register Src="../../Common/PagerControl.ascx" TagName="PagerControl" TagPrefix="uc1" %>
<tr align="right" bgcolor="#f9fcef"> <td height="36" colspan="13" align="middle"> <%--<div class="pagelistbox" runat="server" id="ddpagelist" name="ddpagelist"> </div>--%> <uc1:PagerControl ID="PagerControl1" runat="server" /> </td> </tr>
后台:
protected void Page_Load(object sender, EventArgs e) { //给分页控件注册的事件 this.PagerControl1.OnPageChange += new PageChangeHandler(PageNavigator1_PageChange); if (!IsPostBack) { ListDataBind(1); } }
/// <summary> /// 给分页控件注册的事件 /// </summary> /// <param name="sender"></param> /// <param name="PageIndex">当前页</param> protected void PageNavigator1_PageChange(int PageIndex) { ListDataBind(PageIndex); }
- c# 委托和委托事件
- C# 委托和事件
- c# 委托 和 事件
- c#委托和事件
- C#委托和事件
- C#委托和事件
- C#委托和事件
- C# 委托和事件
- C#事件和委托
- C# 委托和事件
- C# 委托和事件
- C#委托和事件
- C#委托和事件
- C#委托和事件
- c#委托和事件
- c#委托和事件
- C#委托和事件
- C# 委托和事件
- JQuery when
- 百度、谷歌搜索引擎原理
- SQLSERVER 2005分页脚本性能实测
- ice 异常收集
- html5学习笔记二
- C# 委托和事件
- no java virtual machine was found after searching the following location
- 欧氏、马氏、巴氏、豪氏距离
- html5学习笔记三
- I/O上的等待事件 —— direct path read temp、direct path write temp
- eclipse配置hadoop
- JSP内置对象详解4 之 page、out、exception、config、pageContext 内置对象
- html5学习笔记四
- ConcurrentModificationException 的根源分析