惡補ASP.NET基礎【1】委託

來源:互聯網
上載者:User

標籤:style   blog   http   io   ar   color   os   使用   sp   

 

 

委託(delegate)是一種可以把引用儲存為函數的類型。

 

委託的聲明類似於函數,但不帶函數體,且要使用delegate關鍵字,委託的聲明指定了一個傳回型別和一個參數列表。

 

在定義了委託之後,就可以聲明該委託的變數。接著把這個變數初始化未與委託有相同傳回型別和參數列表的函數引用。之後,就可以使用委託變數調用這個函數,就想該變數是一個函數一樣。

 

using System;namespace TestDelegate{    class Program    {        delegate double ProcessDelegate(double param1, double param2);        static double Multiply(double param1, double param2)        {            return param1 * param2;        }        static double Divide(double param1, double param2)        {            return param1 / param2;        }        static void Main(string[] args)        {            ProcessDelegate process;            double input1 = 10.0;            double input2 = 2.0;            string input = Console.ReadLine();            if (input == "*")            {                process = new ProcessDelegate(Multiply);            }            else            {                process = new ProcessDelegate(Divide);            }            Console.WriteLine("Result:{0}",process(input1,input2));            Console.ReadKey();        }    }}

 

當執行個體化委託時,參數是函數名,而當使用的時候,把委託執行個體名稱作為函數名使用了,而此時規律是,委託類型和函數的傳回值和參數列表一致。

 

如果把函數的參數列表改一個,就出現編譯時間錯誤。

錯誤    1    “Multiply”的重載均與委託“TestDelegate.Program.ProcessDelegate”不匹配   

 

 

使用委託的四部曲:

  1. 定義一種委託類型
  2. 委託執行時要調用方法
  3. 定義一個委託執行個體
  4. 委託執行個體的調用

 

我知道在.Net中事件都是通過委託來實現的,那我找個例子。.NET中經常使用的控制項Button,當我們把Button 控制項 drap and drop到介面,然後雙擊介面的Button我們發現程式中自動產生了一個響應Button的事件方法,然後我們給事件方法添加Code之後,當我們點擊該Button就響應該方法了,但我們沒有看到代碼中有任何的委託和事件之類的定義,其實這些.NET都已經做好了。我們可以查看如下檔案。

                                   圖2事件委託實現

 

 

其中,EventHandler就是一個代理類型,可以認為它是一個“類”,是所有傳回型別為void,具備兩個參數分別是object sender和EventArgs e,第一個參數表示引發事件的控制項,或者說它表示點擊的那個按鈕。通過以下的代碼我們細細解析一下。

private void button1_Click(object sender, EventArgs e)        {              //擷取被點擊Button的執行個體              Button objBotton = sender as Button;              if (objBotton != null)              {                    objBotton.Text = "Hello you click me.";                    objBotton.AutoSize = true;              }               else              {                    //Exception Handle.              }          }

惡補ASP.NET基礎【1】委託

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.