六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

Visual Basic .NET的Override事件處理程序

[摘要]王凌峰 編譯介紹 在類或控件的繼承中,子類或子控件封裝了父類的所有函數(shù),其中包括事件處理程序。 本文將著重討論在 Visual Basic .NET 應(yīng)用程序設(shè)計中如何正確對待事件處理程序的繼承。讀者要求 本文假定讀者熟悉面向?qū)ο蟪绦蛟O(shè)計和類的繼承性。若您尚未熟悉它們,請參閱《組件 的多態(tài)性》 (...
王凌峰 編譯

介紹 在類或控件的繼承中,子類或子控件封裝了父類的所有函數(shù),其中包括事件處理程序。 本文將著重討論在 Visual Basic .NET 應(yīng)用程序設(shè)計中如何正確對待事件處理程序的繼承。

讀者要求 本文假定讀者熟悉面向?qū)ο蟪绦蛟O(shè)計和類的繼承性。若您尚未熟悉它們,請參閱《組件 的多態(tài)性》 ("Polymorphism in Components")。

繼承事件處理程序 當(dāng)組件被繼承時,它的所有成員都被封裝到子類中。事件處理程序是響應(yīng)特定事件的方 法,是組件成員之一,因而也被繼承。請看一個典型的事件處理程序:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e as _ System.EventArgs) Handles Button1.Click Static Counter as Integer = 0 Counter += 1 MessageBox.Show (" This button has been clicked " & _ Counter.ToString() & " times.") End Sub

我們看到,宣告部分末尾的 Handles 子句把處理程序關(guān)聯(lián)到特定的事件上。具體而言, 上述代碼將在 Button1.Click 事件發(fā)生時運行。這就是用于定義事件處理程序的典型語法。

為了實現(xiàn) override ,你必須使用 Overridable 關(guān)鍵字,并且重新定義其可見性為 Protected 、 Protected Friend 或者 Public 。下面示范如何 override 事件處理程式:

Protected Overridable Sub Button1_Click(ByVal sender As System.Object, _ ByVal e as System.EventArgs) Handles Button1.Click Static Counter as Integer = 0 Counter += 1 MessageBox.Show (" This button has been clicked " & _ Counter.ToString() & " times.") End Sub

在組件中繼承事件處理程序

事件處理程序的 override 固然與其它方法的 override 大同小異,有一點卻不得不提:在 override 事件處理程序時必須除去 Handles 子句。

如何 override 組件的事件處理程序

1) 在事件處理程序的宣告部分加入 Overrides 關(guān)鍵字

請注意:不要附加 Handles 子句。因為父類的處理程序已經(jīng)關(guān)聯(lián)了特定事件,子類將繼 承這一切。換句話說,父類所關(guān)聯(lián)的事件可以激活子類的處理程序,因而這里的 Handles 子 句是多余的。 下面示范如何 override 前述事件處理程序:

Protected Overrides Sub Button1_Click(ByVal sender As System.Object, _ ByVal e as System.EventArgs) Static Counter as Integer = 0 Counter += 1 MessageBox.Show (" This inherited button has been clicked " & _ Counter.ToString() & " times.") End Sub

2) 為什么不需要 Handles 子句

前面提到,我們沒有使用關(guān)聯(lián)事件的 Handles 子句并不是一個疏漏,而是由 .NET 框架 的事件處理機制所決定的。父類中的 Handles 子句將事件處理程序關(guān)聯(lián)到特定事件上,這種 關(guān)聯(lián)將被子類繼承。因此,即令子類中沒有 Handles 子句,父類所關(guān)聯(lián)的事件也能激活子類 的事件處理程序。倘若此時加上 Handles 子句,則處理程序?qū)⒈辉俅侮P(guān)聯(lián)到事件上。重復(fù)關(guān) 聯(lián)的后果是處理程序?qū)⒈贿B續(xù)激活兩次。例如:

注釋: 錯誤的代碼 Protected Overrides Sub Button1_Click(ByVal sender As System.Object, _ ByVal e as System.EventArgs) Handles Button1.Click Static Counter as Integer = 0 注釋: 本例中使用了 Handles 子句, 注釋: 因而每當(dāng)按鈕 Button1 被點擊一次, 注釋: 變量 Counter 將會增加兩次 ; Counter += 1 注釋: 消息框也會彈出兩次, 注釋: 顯示的內(nèi)容也將違背設(shè)計意圖 MessageBox.Show (" This inherited button has been clicked " & _ Counter.ToString() & " times.") End Sub

結(jié)論 在 Visual Basic .NET 中,事件處理程序的 override 可能造成難以偵錯的 bug 。例如在使 用 Handles 子句關(guān)聯(lián)事件處理程序時就要格外小心,以免發(fā)生重復(fù)關(guān)聯(lián)。


主站蜘蛛池模板: 日本欧美在线观看 | 特黄特a级特别特级特毛片 特黄视频免费看 | 日韩高清免费观看 | 日韩一级欧美一级一级国产 | 日本精品一区二区 | 天天干天天色综合 | 日韩欧美国产综合 | 羞羞答答免费人成黄页在线观看国产 | 一区二区三区在线播放视频 | 色视频在线观看免费 | 网址在线观看 | 日本成人福利 | 泰剧不期而爱第三季免费全集观看 | 欧美午夜一区二区福利视频 | 亚洲 欧洲 日产 韩国在线 | 午夜影视免费完整高清在线观看网站 | 亚洲永久免费视频 | 日韩一区国产二区欧美三区 | 午夜专区 | 亚洲综合射 | 天天晚上开着日 | 日韩亚洲第一页 | 日韩国产综合 | 色狠狠狠色噜噜噜综合网 | 丝袜美腿亚洲一区二区图片 | 中文在线观看免费网站 | 五月天激情婷婷 | 日本aⅴ在线不卡免费观看 日本aⅴ在线 | 四虎永久在线精品免费影视 | 日韩午夜 | 亚洲男人的天堂久久无 | 在线欧美自拍 | 色天使色护士 在线视频观看 | 日本亚洲最大的色成网站www | 日产精品久久久一区二区 | 亚洲欧美韩日 | 日韩欧美大片 | 青春草影院 | 亚色91| 日韩精品一区二区三区毛片 | 色橹|