程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> [C#]委托實例分析(附源碼),

[C#]委托實例分析(附源碼),

編輯:C#入門知識

[C#]委托實例分析(附源碼),


  一直都聽說C#中的委托與事件非常重要,都沒有什麼切身的體會,而這次通過做一個WinForm二次開發的項目才真正感覺到了委托與事件的犀利之處。

1.C#中的事件和委托的作用?
  事件代表一個組件能夠被關注的一種信號,委托是可以把一個過程封裝成變量進行傳遞並且執行的對象。
2.他們之間的關系?
  委托是一種類型,事件是一種成員,就相當於public int Age {get;set;}這個屬性中,int就是類型,Age是一個成員,public event EventHandler Push;這個事件中EventHandler就是委托類型,Push是事件,他是一個成員。
  事件從本質上來說是委托,不過在使用上比委托多了一個限制:事件只能在定義事件的類內部被調用,而委托可以在任意方法中被調用(難就難在理解這句)。
  我們基本上可以說:事件是委托,委托是方法指針,在調用委托的時候跟調用方法是一樣的。一般來說,這個限制正好用在封裝組件類的時候體現了封裝特性。
3.和什麼情況使用委托和事件?
  事件是組件中的抽象概念,同樣包括狀態和操作也是組件中的概念,對應到C#裡面就是屬性和方法。所以像控件之類的組件都會有事件。而委托代表一個代碼的執行過程,C#3.0引入linq以後,用的就非常頻繁了。
4.但是用事件的方式來調用的話有什麼好處?
  事件是一種封裝,就好像屬性會封裝字段一樣,可以把定義和實現隔離開來,給你舉個例子就是DateTime實際上你看那麼多屬性,其實裡面只有一個字段存儲時間,各種日期啊年啊屬性都是根據這個時間算出來的。事件也把內部類型為一個委托的字段封裝起來,這樣在類的外部就只能使用事件來注冊或者注銷事件關注,而不能引發事件。


實例:  我們要達到這樣的效果:
  

就是點擊Form3中的數字選框時使Form1中的文本框聯動
那麼可以使用委托來完成:
第一步:在Form3.cs中定義委托與事件:
        //定義帶參數的委托與兩個事件
        //這是委托與事件的第一步
        public delegate void Form2Handle(string s);
        public event Form2Handle changed;    

 第二步:在Form1.cs中將方法注冊到委托上:

        //改變值的事件
        private void changed(string s)
        {
            //此處是給原有窗體中控件賦值
            this.textBox1.Text = s + s;
        }
        private void button2_Click(object sender, EventArgs e)
        {
            Form3 frm3 = new Form3();
            //這是委托與事件的第二步,
            //寫到+=時,按兩次Tab鍵會自動生成frm2_changed,frm3_empty兩個事件
            frm3.changed += new Form3.Form2Handle(changed);//改變值的事件
            frm3.ShowDialog();
        }        

  第三步:在Form3.cs中使用委托:

            //這是委托與事件的第三步
            //傳值
            changed(numericUpDown1.Value.ToString());    
代碼下載:委托與事件實例.rar
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved