委托

第一节: 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1420141212
{//在同一命名空间下,创建类    xinde
      public   delegate      int  weituo(int a,int b);    //     这是委托(选择函数的条件)
     class xinde
    {

        public int jia(int aa, int bb) 
        {
            int c=aa+bb;
            return c;
        }
        public int jian(int aa, int bb)
        {
            int c = aa - bb;
            return c;
        }

         public string Returnstring(string a )
        {
            string s = a;
            return s;
        }

    }


}

###############################

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1420141212

{  class program

{

static void Main (string[] args)

{

            //#########################   这里是委托  以及   应用

            weituo w;                               //定义委托,下一步表示   调用的方法。
            w = new xinde().jia;                    //jia代表类里面的   jia方法
            Console.WriteLine(w(2,3));              //这是 实名委托的应用。

             Func<string"这里 表示输入的参数类型", string “表示输出的参数类型">,详细情况可以输入Func<>查看详细。  

            Func<string, string>    myfunc = new xinde().Returnstring;
                                                    //Returnstring代表类里面的   Returnstring方法
            Console.WriteLine(myfunc("试试"));      //这是 匿名委托的应用。

 

            Func<string, string> newfunc = delegate(string s)  //这是新建的委托
            {   return s + "hh";     };    //这是新建的方法
            Console.WriteLine(newfunc("打完"));

            Func<string, int, string> n = (s, a) =>                     //这样也可以(同上)delegate(string s,int a)
            {     return s + "hh"+a ;       };    
            Console.WriteLine(n("打完",999));

            Func<string, int, string> mym = (s, a) => s + "hh" + a;     //这样也可以(同上)," => "  表示“指向”
            Console.WriteLine(mym("打完", 999));

}

 

 

}

}

第二节

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

public partial class Search : System.Web.UI.UserControl   //自定义用户控件(放了一个TextBox和Button)
{
    public delegate void ShowDelegate(string s);           //创建  委托类型(输入参数,不输出参数)
    public event ShowDelegate Show;                      
              //创建  委托   命名show (任何符合输入string值,不输出值的函数,都可show+=函数名 )
    protected void Page_Load(object sender, EventArgs e)
    { }
    protected void btn_Click(object sender, EventArgs e)    //点击触发函数,执行show  对应的函数
    {
        //执行查询。。。。。
        string s = DateTime.Now.ToString();
        //显示。
        if (Show != null)
        {
            Show(s);
        }
    }
}

 

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)
    {
        Search1.Show += SetValueToTextBox;
        Search1.Show += ShowTitle;
    }
    private void SetValueToTextBox(string ttt)
    {
        TextBox1.Text = ttt;
    }
    public void ShowTitle(string ssss)
    {
        this.Title = ssss;                   //this   代表网页。
    }
}

 

代理:委托;(代理与类、接口是同一个层次的。代理与类思想上完全一样。)


指向方法的指针。
代理与它指向的方法,往往不是一个人写出来的

做委托的四大步:

1.声明代理类型
public delegate void WangYeDelegate(sring s);

2.定义代理变量
public [event] WangYeDelegate ZhuanDong;

3.把代理挂到相应的方法上去。
xxx.ZhangDong += xxx.yyyyy;

4.编写代理要调用的方法。


if(ZhuangDong!=null)
{
 ZhuangDong();
}


 

posted @ 2015-03-23 09:06  安定祥和  阅读(180)  评论(1编辑  收藏  举报