C# 中的委托

  近期应学习linq,要用到lambada表达式。就重新学习一次委托。文章是从博客http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx的基础上写的。

  委托给我的感觉就像是一种存放方法入口的类(个人观点

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;



public partial class _Default : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        GreetPeople("大雄", ChineseGreeting);

    }

    public delegate void GreetingDelegate(string name);

    //声明一个委托(无返回类型,一个参数(string类型))



    /// <summary>

    /// 打招呼方法

    /// </summary>

    /// <param name="name">姓名</param>

    /// <param name="MakeGreeting">通过委托选择方法</param>

    public void GreetPeople(string name, GreetingDelegate MakeGreeting)

    {

        MakeGreeting(name);

    }

    //中文打招呼

    public void ChineseGreeting(string name)

    {

        TextBox1.Text = ("早上好, " + name);

    }

    //英文打招呼

    public void EnglishGreeting(string name)

    {

        TextBox1.Text = ("Morning, " + name);

    }

}

 代码运行后 TextBox1.Text为早上好, 大雄

 

 

View Code
    protected void Page_Load(object sender, EventArgs e)

    {

        GreetingDelegate delegate1;

        delegate1 = EnglishGreeting;

        GreetPeople("大雄", delegate1);

    }

 代码运行后 TextBox1.Text为Morning, 大雄

 

View Code
    protected void Page_Load(object sender, EventArgs e)

    {

        GreetingDelegate delegate1;

        delegate1 = EnglishGreeting;

        delegate1 += ChineseGreeting;

        GreetPeople("大雄", delegate1);

    }

 

 代码运行后 TextBox1.Text为早上好, 大雄

 

 通过上面的2个例子,可以发现,委托可以通过 =,+=来绑定方法。delegate1 = EnglishGreeting,delegate1 += ChineseGreeting;执行GreetPeople("大雄", delegate1);方法是,会先执行EnglishGreeting方法,再执行ChineseGreeting方法。

注意:这里,第一次用的“=”,是赋值的语法;第二次,用的是“+=”,是绑定的语法。如果第一次就使用“+=”,将出现“使用了未赋值的局部变量”的编译错误。

你可能感兴趣的:(C#)