浅谈C#中的委托
来源:互联网 发布:淘宝网医用输液瓶口贴 编辑:程序博客网 时间:2024/06/05 21:52
委托可以把一个方法作为参数代入另一个方法,委托也可以理解为指向一个函数的指针。
委托是C#中的一种引用类型,类似于C/C++中的函数指针。与函数指针不同的是,委托是面向对象、类型安全的,而且委托可以引用静态方法和实例方法,而函数指针只能引用静态函数。委托主要用于.NET Framework 中的事件处理程序和回调函数。
一个委托可以看作一个特殊的类,因而它的定义可以像常规类一样放在同样的位置。与其他类一样,委托必须先定义以后,再实例化。与类不同的是,实例化的委托没有与之相应
的术语(类的实例化称作对象),作为区分我们将实例化的委托称为委托实例。
委托的关键字是:delegate
2、下面就举一个简单的小例子来看看委托是怎么运用的
写一个简单的注册页面,来实现控件的验证,当其为空的时候,会触发验证,而且也把填写的内容注册的指定的位置
首先建立一个Web用户控件:
.ascx页面的设计:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebRegister1.ascx.cs"
Inherits="委托5.WebRegister12" %>
<script src="js/Jquery1.7.js" type="text/javascript"></script>
<script type="text/javascript">
function validator() {
if ($('#WebUserControl11_txtUserName').val() == '') {
$('#divusername').text('用户名不能为空');
return false;
}
if ($('#WebUserControl11_txtPwd').val() == '') {
$('#divPwd').text('密码不能为空');
return false;
}
if ($('#WebUserControl11_txtEmail').val() == '') {
$('#divEmail').text('邮箱不能为空');
return false;
}
if ($('#WebUserControl11_txtMobile').val() == '') {
$('#divMobile').text('手机号不能为空');
return false;
}
if ($('#WebUserControl11_txtPwd').val() != $('#WebUserControl11_txtPwdOk').val()) {
$('#divPwdOk').text('两次密码输入的不一致');
return false;
}
return true;
}
</script>
<table>
<tr>
<td>
用户名
</td>
<td>
<asp:TextBox ID="txtUserName" runat="server"></asp:TextBox>
</td>
<td>
<span id="divusername"></span>
</td>
</tr>
<tr>
<td>
密码
</td>
<td>
<asp:TextBox ID="txtPwd" runat="server"></asp:TextBox>
</td>
<td>
<span id="divPwd"></span>
</td>
</tr>
<tr>
<td>
确认密码
</td>
<td>
<asp:TextBox ID="txtPwdOk" runat="server"></asp:TextBox>
</td>
<td>
<span id="divPwdOk"></span>
</td>
</tr>
<tr>
<td>
用邮箱户名
</td>
<td>
<asp:TextBox ID="txtEmail" runat="server"></asp:TextBox>
</td>
<td>
<span id="divEmail"></span>
</td>
</tr>
<tr>
<td>
手机
</td>
<td>
<asp:TextBox ID="txtMobile" runat="server"></asp:TextBox>
</td>
<td>
<span id="divMobile"></span>
</td>
</tr>
<tr>
<td>
<asp:Button ID="Button1" runat="server" Text="注册" OnClientClick="return validator();"
OnClick="Button1_Click" />
</td>
<td>
<span id="divTotal" runat="server"></span>
</td>
</tr>
</table>
.ascx.cs页面的设计:
namespace 委托5
{
public partial class WebRegister12 : System.Web.UI.UserControl
{
public event InserDelegat On_Insert1;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
if (On_Insert1 != null)
{
Register.UserName = txtUserName.Text;
Register.Pwd = txtPwd.Text;
Register.Email = txtEmail.Text;
Register.Mobile = txtMobile.Text;
On_Insert1();
if (Register.Result == true)
{
this.divTotal.InnerHtml = "注册成功";
}
else
{
this.divTotal.InnerHtml = "注册失败";
}
}
}
}
public class Register
{
public static string UserName { get; set; }
public static string Pwd { get; set; }
public static string Email { get; set; }
public static string Mobile { get; set; }
public static bool Result { get; set; }
}
public delegate void InserDelegat();
}
然后建立一个Web页面
aspx页面的设计:
引用Web用户控件的控件的内容:
<body>
<form id="form1" runat="server">
<div>
<uc1:WebRegister1 ID="WebRegister11" runat="server" />
</div>
</form>
</body>
aspx.cs页面的设计:
namespace 委托5
{
public partial class WebRegister : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
this.WebRegister11.On_Insert1 += new InserDelegat(WebRegister11_On_Insert1);
}
void WebRegister11_On_Insert1()
{
bool result = WriteText();
Register.Result = result;
}
private bool WriteText()
{
using (Stream stream = File.Open(@"d:\new.txt", FileMode.Append, FileAccess.Write))
{
using (StreamWriter stwrite = new StreamWriter(stream))
{
stwrite.WriteLine("用户名:{0},密码:{1},邮箱:{2},手机:{3}", Register.UserName, Register.Pwd,Register.Email,Register.Mobile);
}
}
return true;
}
}
}
- 浅谈C#中的委托
- 浅谈C#委托
- 浅谈.NET中的委托
- 浅谈.NET中的委托
- 浅谈C#委托和事件
- 浅谈C#委托和事件
- C#事件浅谈(需知委托)
- C#中的委托
- C# 中的委托
- C#中的委托
- c#中的委托!!!!
- c#中的委托
- [原创]c#中的委托
- 浅析C#中的委托
- C# 中的委托
- c#中的委托
- C#中的委托数组
- C#中的委托
- TCP通信流程解析
- 微软2013校园招聘笔试题
- Intent之Action实例大全
- 利用opencv把其它格式的图片转换为pgm格式代码
- java动态代理
- 浅谈C#中的委托
- linux内核线程、轻量级进程和用户进程
- Asp.net-(2)-- web设计
- 全排列
- php练习题
- sql语句基础
- C语言温习笔记之局部变量与全局变量
- JQuery中serialize与serializeArray的区别
- python实现递归遍历目录(linux下测试通过)