浅谈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;
        }
    }
}

 

 

 

 

原创粉丝点击