程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 我眼中委托的真正面貌(一)(5)

我眼中委托的真正面貌(一)(5)

編輯:關於C語言

這裡,稍稍說明一下控件中事件的聲明。事件的聲明需使用關鍵字event,大致的形式是event +(某委托類型)+ 一個實例對象。

而後我建立一個Demo程序,來調用這個用戶控件,代碼如下:

namespace EventDemo

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private void userControl11_MyEvent()

        {

            MessageBox.Show("委托事件調用成功!");

        }

    }

}

在工程中引入用戶控件,打開其事件窗口可以找到我們事先定義的事件MyEvent,雙擊就可以在其中寫入代碼。這裡,我用一個MessageBox來進行測試。

編譯通過後,單擊控件上的button就會彈出我們的MessageBox,事件調用成功!

呵呵……發現了嗎?這段代碼所隱含事件機制的雛形實際上就是第三段代碼中所實現的效果。只不過這裡我們是用一個具體的窗口類控制了其所引入控件類中的委托對象。

看到類構造方法中的InitializeComponent()方法了嗎?雙擊轉到定義,在Windows窗體設計器生成的代碼中,在你所引入的控件屬性初始化模塊下有這樣一句代碼:this.userControl11.MyEvent += new Ctrleven.UserControl1.MyEventHander(this.userControl11_MyEvent); 你可以拿來跟第三段代碼中的那句 objcls.MyObjdelegate += new ObjCls.MyDelegete(DelegateFun); 對比一下,發現了嗎?是一樣的!

所以,C#中的事件本身就是一種(多重)委托機制,憑借關鍵字event,使得我們在控件中定義好的事件專用委托實例對象在頂層的Demo程序的事件窗口中被自動識別。也就是說,即使不用事件,純用委托,事件的機制一樣可以實現,問題只是這樣的委托對象無法輕易被外界識別罷了。

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