国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

VB.net是怎樣做到的(4、5)

VB.net是怎樣做到的(4、5)

更新時間:2022-05-01 文章作者:未知 信息來源:網絡 閱讀次數:

VB.net是怎樣做到的(三)——Handles和WithEvents

VB除了可以用C#那樣的方法來處理事件響應以外,還有從VB5繼承下來的獨特的事件處理方式——WithEvents。

我喜歡稱這種事件處理方式為靜態的事件處理,書寫響應事件的方法時就已經決定該方法響應的是哪一個事件,而C#則是在代碼中綁定事件的。比如下面這個最簡單的例子:

Public Class HandlerClass
Public WithEvents MyObj As EventClass


Private Sub MyObj_MyEvent(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyObj.MyEvent
MsgBox("hello")
End Sub

Public Sub New()
MyObj = New EventClass
End Sub
End Class

代碼中用到的EventClass是這樣的:

Public Class EventClass
Public Event MyEvent As EventHandler

Protected Overridable Sub OnMyEvent(ByVal e As EventArgs)
RaiseEvent MyEvent(Me, e)
End Sub

Public Sub Test()
OnMyEvent(New EventArgs)
End Sub
End Class

我們來復習一下,這段代碼隱式地給EventClass編寫了兩個方法——Add_MyEvent(EventHandler)和Remove_MyEvent(EventHandler),實際上任何使用事件的上下文都是通過調用這兩個方法來綁定事件和解除綁定的。C#還允許你書寫自己的事件綁定/解除綁定的代碼。

那么WithEvents是怎么工作的呢?VB.net的編譯器在編譯時自動將

Public WithEvents MyObj As EventClass

翻譯成下面這個過程:

Private _MyObj As EventClass

Public Property MyObj() As EventClass
Get
Return _MyObj
End Get
Set(ByVal Value As EventClass)

If Not (Me._MyObj Is Nothing) Then
RemoveHandler _MyObj.MyEvent, New EventHandler(AddressOf MyObj_MyEvent)
End If

Me._MyObj = Value

If Me._MyObj Is Nothing Then Exit Property

AddHandler _MyObj.MyEvent, New EventHandler(AddressOf MyObj_MyEvent)

End Set
End Property

由此可見,當對WithEvents變量賦值的時候,會自動觸發這個屬性以綁定事件。我們所用的大部分事件響應都是1對1的,即一個過程響應一個事件,所以這種WithEvents靜態方法是非常有用的,它可以顯著增強代碼可讀性,同時也讓VB.net中的事件處理非常方便,不像C#那樣離開了窗體設計器就必須手工綁定事件。

不過在分析這段IL的時候,我也發現了VB.net在翻譯時小小的問題,就是ldarg.0出現得過多,這是頻繁使用Me或this的表現,所以我們在編碼過程中一定要注意,除了使用到Me/this本身引用以外,使用它的成員時不要帶上Me/this,比如Me.MyInt = 1就改成MyInt = 1,這樣的小習慣會為你帶來很大的性能收益。


VB.net是怎樣做到的(四)——類型轉換


今天在www.aspx.cn看到了一篇帖子,看到wyhw大俠真的希望dotnet blog成為.NET的精品技術Blog。所以我也不能偷懶了,趕快學習,并且多發技術帖子。
回到正題來,我今天在Visual Basic社區上看到在Visual Basic 2005中將加入一個新的運算符——TryCast,相當于C#的as運算符。我一直希望VB有這樣一個運算符,既然今天看到了,就順便研究一下VB和C#的類型轉換。先說VB,類型轉換運算符主要有CType和DirectCast。他們的用法幾乎一樣。我詳細比較了一下這兩個運算符,得出以下結論:

1、在轉換成引用類型時,兩者沒有什么區別,都是直接調用castclass指令,除非重載了類型轉換運算符(當然VB.NET還不行,但我沒有VB 2005,所以沒法試驗)。

2、轉換成值類型時,CType會調用VB指定的類型轉換函數(如果有的話),比如將String轉換為Int32時,就會自動調用VisualBasic.CompilerServices.IntegerType.FromString,而將Object轉換為Int32則會調用FromObject。其他數值類型轉換為Int32時,CType也會調用類型本身的轉換方法實施轉換。DirectCast運算符則很簡單,直接將對象拆箱成所需類型。

所以在用于值類型時,CType沒有DirectCast快速但可以支持更多的轉換。在C#中,類型轉換則為(type)運算符和as運算符。(type)運算符的工作方式與VB的DirectCast很相似,也是直接拆箱或castclass的,但是如果遇到支持的類型轉換(如long到int),(type)運算符也會調用相應的轉換方法,但不支持從String到int的轉換。C#另一個運算符as則更加智能,它只要判斷對象的運行實例能否轉成目標類型,然后就可以省略castclass指令,直接按已知類型進行操作,而且編譯器還可以自動對as進行優化,比如節省一個對象引用等。所以在將Object轉換成所需的類型時,as是最佳選擇。

由于as有很多優點,Visual Basic 2005將這一特性吸收了過來,用TryCast運算符就可以獲得和as一樣的效果,而且語法與DirectCast或CType一樣。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        三级精品在线观看| 欧美日韩精品一区二区三区蜜桃| 久久99国产精品尤物| 欧美在线高清视频| 久久婷婷久久一区二区三区| 老司机精品视频导航| 欧美xxxxx牲另类人与| 裸体一区二区三区| 久久久青草青青国产亚洲免观| 国产剧情一区二区三区| 中文字幕一区二| 不卡一区在线观看| 亚洲激情一二三区| 丰满岳乱妇一区二区三区| 亚洲丝袜美腿综合| 欧美日韩国产不卡| 老司机精品视频一区二区三区| 久久久久久久久蜜桃| 99re免费视频精品全部| 青青草国产成人av片免费| 国产亚洲欧美激情| 欧美三级中文字幕在线观看| 国产在线精品不卡| 亚洲国产精品一区二区尤物区| 久久精品一区二区三区不卡牛牛| 97se亚洲国产综合自在线不卡| 欧美96一区二区免费视频| 中文字幕在线观看一区二区| 欧美一级搡bbbb搡bbbb| 99热99精品| 韩国中文字幕2020精品| 一区二区三区在线观看国产 | 亚洲柠檬福利资源导航| 欧美亚洲综合久久| 国产精品资源在线| 青青草97国产精品免费观看 | 91福利视频网站| 麻豆国产精品一区二区三区| 亚洲乱码一区二区三区在线观看| 日韩女优毛片在线| 欧美三级日韩三级国产三级| 成人黄色软件下载| 国产伦精品一区二区三区免费迷| 青青草97国产精品免费观看无弹窗版| 中文av一区二区| 国产视频一区不卡| 欧美一区二区在线看| 欧美日韩另类国产亚洲欧美一级| 国产成人综合在线播放| 精彩视频一区二区三区| 石原莉奈一区二区三区在线观看 | 日韩欧美你懂的| 欧美色网一区二区| 色哦色哦哦色天天综合| 成人av在线资源| 久久成人久久鬼色| 日韩中文字幕一区二区三区| 精品视频一区三区九区| 丰满少妇久久久久久久| 九一九一国产精品| 欧美96一区二区免费视频| 亚洲精品久久久蜜桃| 国产精品免费丝袜| 久久精品一级爱片| 久久婷婷一区二区三区| 久久老女人爱爱| 国产欧美日韩另类视频免费观看 | 91无套直看片红桃| www.日韩大片| 在线欧美小视频| 欧美精品亚洲二区| 日韩一区二区三区视频在线| 日韩欧美国产电影| 欧美国产视频在线| 亚洲免费三区一区二区| 亚洲成人第一页| 激情小说欧美图片| 成人一道本在线| 色丁香久综合在线久综合在线观看| 99久久久精品| 欧美日韩精品一区二区三区四区| 91精品一区二区三区久久久久久 | av男人天堂一区| 欧美视频一区二区三区| 日韩欧美一区二区在线视频| 国产亚洲制服色| 亚洲一区二区三区免费视频| 久久精品国产999大香线蕉| 国产精品一品视频| 欧美图片一区二区三区| 2020国产成人综合网| 一区二区免费看| 国产美女视频91| 欧美日韩在线播放三区四区| 欧美精品一区二区三区蜜臀| 亚洲精品欧美激情| 久久99热狠狠色一区二区| 91蜜桃视频在线| 久久蜜桃av一区精品变态类天堂| 一区二区视频在线看| 久久99精品久久久久婷婷| 91亚洲精品久久久蜜桃| 精品免费99久久| 亚洲va欧美va人人爽| 成人污污视频在线观看| 日韩亚洲电影在线| 亚洲福利视频导航| 91首页免费视频| 久久精品日韩一区二区三区| 日本一区中文字幕| 在线亚洲人成电影网站色www| 久久色成人在线| 免费在线看成人av| 欧美图区在线视频| 亚洲精品视频免费看| 成人av在线一区二区三区| 精品国产成人在线影院| 奇米一区二区三区| 欧美精品1区2区3区| 一区2区3区在线看| 99久久精品国产毛片| 国产亚洲美州欧州综合国| 久久精品国产精品亚洲综合| 欧美一卡2卡三卡4卡5免费| 一区二区三区av电影| 91丨九色丨蝌蚪丨老版| 中文一区二区在线观看| 国产精品一区2区| 久久久久国产精品免费免费搜索| 免费日韩伦理电影| 欧美一区二区国产| 蜜乳av一区二区三区| 欧美一级夜夜爽| 另类小说综合欧美亚洲| 日韩免费在线观看| 极品少妇一区二区三区精品视频| 日韩精品一区二区三区在线| 久久99精品一区二区三区| 欧美成人一区二区三区在线观看| 老司机精品视频线观看86 | 在线视频欧美精品| 一区二区三区中文在线观看| 91社区在线播放| 一区二区三区**美女毛片| 欧美自拍偷拍一区| 婷婷综合久久一区二区三区| 91精品婷婷国产综合久久性色| 男男gaygay亚洲| 国产亚洲一二三区| 不卡的av电影在线观看| 亚洲精品综合在线| 欧美日韩dvd在线观看| 舔着乳尖日韩一区| 日韩天堂在线观看| 成人精品一区二区三区四区| 一区二区三区毛片| 日韩情涩欧美日韩视频| 国产精品自产自拍| 亚洲丝袜自拍清纯另类| 欧美日韩激情一区二区三区| 久久99国产精品久久| 国产精品久久久久久久久搜平片 | 欧美亚洲国产怡红院影院| 麻豆精品视频在线观看视频| 久久久精品黄色| 在线观看网站黄不卡| 日韩精品每日更新| 国产三级精品在线| 欧美色综合影院| 国产成人免费在线视频| 亚洲自拍偷拍综合| 亚洲精品在线观看视频| 色猫猫国产区一区二在线视频| 日精品一区二区| 亚洲国产岛国毛片在线| 欧美日韩三级一区| 国产精品18久久久久久久久久久久| 国产精品黄色在线观看| 欧美三级电影网站| 丁香六月久久综合狠狠色| 亚洲国产人成综合网站| 欧美精品一区二区三区很污很色的| 懂色av噜噜一区二区三区av | 亚洲国产精品t66y| 欧美一区二区视频在线观看2020| 国产精品一区免费视频| 日韩精品电影一区亚洲| 中文字幕综合网| 久久久精品日韩欧美| 在线综合视频播放| 欧美激情一区二区三区不卡| 制服丝袜亚洲播放| 99精品国产一区二区三区不卡| 精品在线免费视频| 亚洲精品视频观看| 亚洲日本在线天堂| 国产人成亚洲第一网站在线播放| 欧美日韩国产123区| 在线精品视频免费观看| caoporn国产精品|