javaGrowing

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            92 隨筆 :: 33 文章 :: 49 評論 :: 0 Trackbacks
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(12)

          隨筆分類(84)

          隨筆檔案(92)

          文章分類(32)

          文章檔案(33)

          相冊

          收藏夾(1)

          ajax

          java

          java專家論壇

          linux

          Oracle

          PHP

          sap

          xml

          其他

          好站鏈接

          英語學習

          軟件下載

          電子書

          搜索

          積分與排名

          最新隨筆

          最新評論

          閱讀排行榜

          評論排行榜

          適配類


          適配類是Java事件模型中極其重要的一部分。在一些應用場合,事件從源到監聽者之間的傳遞要通過適配類來“轉發”。例如:當事件源發出一個事件,而有幾個事件監聽者對象都可接收該事件,但只有指定對象做出反應時,就要在事件源與事件監聽者之間插入一個事件適配器類,由適配器類來指定事件應該是由哪些監聽者來響應。適配類成為了事件監聽者,事件源實際是把適配類作為監聽者注冊入監聽者隊列中,而真正的事件響應者并未在監聽者隊列中,事件響應者應做的動作由適配類決定。目前絕大多數的開發工具在生成代碼時,事件處理都是通過適配類來進行的。

          C#事件處理


          在. NET應用程序開發中,不管是WEB Forms(ASP.NET)還是Windows Forms,都涉及到大量對象的事件響應及處理,比如客戶在線提交一份訂單、或是在Windows窗口上移動鼠標等都將有事件發生。那么在C#中,是怎樣聲明事件并為事件添加響應方法的呢?

          在C#中,事件(Events)成員就是用來聲明一個類事件的。在類中聲明一個事件成員一般采用如下的語法形式:
          public event 代表名 事件名。

          ?

          如在Control類中聲明了一個Click事件成員,其語法如下:

          public event EventHandler Click;

          在C#中,增加了一個新的數據類型delegate(代表)來解決事件處理問題。代表數據類型非常類似于C語言中的指針,其與指針不同的是,其是代碼是安全的,可管理的。由于C#本身的簡易性,對于沒有使用過C及指針的程序來說,理解delegate也是非常容易的。

          在C#中,通過使用delegate,你可以通過"+="(加等于)操作符非常容易地為.Net對象中的一個事件添加一個甚至多個響應方法;還可以通過非常簡單的"-="(減等于)操作符取消這些響應方法。如下面為temp按鈕添加Click事件的語句:

          temp.Click+=new System.EventHandler(this.Test);//為test添加事件處理方法

          在上面聲明事件的語句中,Eventhandler是一個delegate(代表)類型,其在.Net類庫中如下聲明的:

          public delegate void EventHandler(object sender,EventArgs e);

          這樣,所有形如:void 函婁名(object 參數名,EventArgs 參數名);的函數都可以作為Control類的Click事件響應方法了。如下面所定義的一個事件響應方法:

          private void button1_Click(object sender, System.EventArgs e)

          由于是通過delegate(代表類型)來處理事件,因此,可能通過累加使一個事件具有多個響應方法;與此同時,還可以使一個方法作為多個事件的響應方法。(注意:在C#語言類中的event成員后面只能出現"+="與"-="兩個表示添加與取消事件響應函數的操作符。)

          不管是ASP.Net還是一般的Windows Forms 編程,在C#中,基本上我們遇到的事件響應方法都是說明成如下的形式:

          private void button1_Click(object sender, System.EventArgs e)

          那么,一個事件響應方法的存取權限、返回值類型、參數及類型甚至方法名稱等是否都必須固定不變呢?答案是:不是!

          一般情況下,事件的響應方法中都有兩個參數,其中一個代表引發事件的對象即sender,由于引發事件的對象不可預知的,因此我們把其聲明成為object類型,所有的對象都適用。第二個參數代表引發事件的具體信息,各種類型的事件中可能不同,這要根據類中事件成員的說明決定。
          delegate int MyEventHandler(object sender, ToolBarButtonClickEventArgs e);

          private int MyTest(object sender,ToolBarButtonClickEventArgs e) {}

          在給對象添加事件響應方法時就可以用如下的代碼實現:

          Control.Event+=new MyEventHandler(MyTest);
          總的來說,Java事件處理更直接,簡單.而C#事件處理由于引用代理,使得程序更靈活,更體

          現程序之間的松藕合性.美國神鳥(Stryon http://www.stryon.com.cn)公司宣布在Java

          開發平臺上實現微軟的.NET,命名為iNET.并于近期推出iNET的Beta3版本,其中就包括用

          Java實現了C#的三級事件處理機制。

          posted on 2006-09-28 10:35 javaGrowing 閱讀(231) 評論(0)  編輯  收藏 所屬分類: java學習
          主站蜘蛛池模板: 伽师县| 韶关市| 朝阳县| 晋宁县| 禄丰县| 乌兰察布市| 临邑县| 和顺县| 民乐县| 东阿县| 福鼎市| 秦安县| 滦平县| 肇源县| 磴口县| 淳安县| 沂源县| 凤台县| 右玉县| 台东县| 六盘水市| 乃东县| 雷波县| 泗水县| 友谊县| 秦皇岛市| 会宁县| 确山县| 兴化市| 筠连县| 双城市| 南华县| 长春市| 衡阳市| 宣化县| 沛县| 南通市| 广元市| 千阳县| 乳源| 法库县|