C#匿名委托,匿名函數,lambda表達式


一、類型、變量、實例之間的關系。
類型》變量》實例
類型可以創建變量,實體類可以創建實例,實例可以存儲在變量里。
image

二、委托使用過程: 
1.定義委托(寫好簽名); 
2.創建委托變量; 
3.給委托變量里追加引用函數(相同的簽名)。

三、lambda表達式的由來
復制代碼
private void button1_Click(object sender, EventArgs e)
        {
            //匿名委托    Func<int, int> del
            //類型》變量》實例
            //Func是一個匿名委托類型,是一個沒有名字的類型
            //怎樣確定它的簽名:需要若干數據類型作為參數(前面的規定參數類型,最后一個規定返回值類型)
            //可以直接定義一個委托變量

            //匿名函數    delegate(int a) { return a; };
            //與普通函數的區別就是將函數名換成了delegate

            //下面的表達式,就是一個通過匿名委托定義的變量del引用了一個匿名函數
            //與int a=1的過程,是相同的道理
            //Func<int, int> del =  delegate(int a) { return a; };
            //MessageBox.Show(del(5).ToString());

            //后來發現,匿名函數肯定要放到委托里,參數類型已確定好,於是有了更簡捷的寫法,把參數類型也省去
            //就出現了lambda表達式
            Func<int, int> del = a => { return a; };
            MessageBox.Show(del(6).ToString());
        }
復制代碼

image
小貼士
定義一個匿名委托變量,好比我們確定要造一把槍,但是這把槍還不能工作,因為它只是完成了功能設計的階段,槍的功能就是:給它一個子彈(參數),我們得到一個高速飛行的子彈(返回值);
將一個lambda表達式給這個委托變量賦值,好比給這把槍安裝槍膛、扳機等內部構造的過程,這時槍可以工作了。

四、Winform窗體中的事件

Winform窗體事件:用預先定義好的委托(EventHandle)的定義的變量(接收兩個參數)。 
窗體里自帶一個委托變量;我們做的就是給這個變量追加函數。

1.

給窗體Load事件添加一個函數

復制代碼
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {

        }
復制代碼
自動生成的表達式
image
轉到定義,可以查看Load事件的定義
image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM