亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

VisualBasic2005中的My功能

2019-11-18 17:55:08
字體:
來源:轉載
供稿:網友
摘要:概述了My功能如何公開.NETFramework功能,包括可用的類、動態生成的類以及線程處理。

注:本文和示例代碼均基于MicrosoftVisualStudio2005(此前代號為“Whidbey”)的預發布版。文中包含的所有信息均有可能變更。示例項目需要VisualStudio2005Beta1或更高版本。

簡介

My是VisualBasic2005中的一項新功能,它可將常用功能放在您觸手可及的地方,并減少了您必須編寫的代碼行數。它以有效、可靠且線程安全的方式實現這一目的。在程序員工作效率顯得尤為重要的環境中,My可以幫助您更快地完成工作,這就是VisualBasic的精髓所在。

本文旨在探究如何使用My來訪問.NETFramework功能以及您項目中的項。

可從My中獲得的.NETFramework類

由于.NETFramework涉及的內容很多,因此要找到您所需的功能非常困難。為了解決此問題,My提供了常用.NETFramework類和功能的入口點。My還公開了新的高級別.NETFramework類,這些類可將相關的功能匯集到基于任務的API中。

My公開功能的方式包括:返回已實例化并可以使用的.NETFramework類,延推遲對.NETFramework方法的調用,以及返回動態生成的類(使用該類可訪問您項目中的項)。

直接公開

只要可能,My便會作為一種發現機制為.NETFramework中的現有類提供服務,并直接公開這些類型。請參見以下My.application.Deployment示例:

PublicReadOnlyPRopertyDeployment()As_
System.Deployment.ApplicationDeployment
Get
Return_
System.Deployment.ApplicationDeployment.CurrentDeployment
EndGet
EndProperty

直接公開的其他示例包括My.Computer.FileSystem.OpenTextFileReader()(它返回System.IO.StreamReader)、My.Application.OpenForms()(它返回System.Windows.Forms.FormsCollection)、My.User(它返回System.Security.Principal.IPrincipal),等等。

外觀

My還可以返回能夠提供基于任務的API的新類,以用于執行先前難以執行的操作,因為在以前找到功能很困難,并且/或者需要多個對象協同完成。

需要使用低級別.NETFrameworkAPI或者需要多行代碼的常見任務得以大大簡化。請參見以下確定網絡連接是否可用的任務示例:

ImportsSystem.Net.NetworkInformation
PublicReadOnlyPropertyIsAvailable()AsBoolean
Get
ForEachNetInterfaceAsNetworkInterfaceIn_
NetworkInterface.GetAllNetworkInterfaces()
IfNetInterface.Type<>InterfaceType.Loopback_
AndAlsoNetInterface.Type<>InterfaceType.Tunnel_
AndAlsoNetInterface.OperationalStatus=_
OperationalStatus.UpThen
ReturnTrue
EndIf
Next
ReturnFalse
EndGet
EndProperty

上面的代碼需要System.Net.NetworkInformation命名空間中幾個類型的詳細知識。使用外觀模式,My.Computer.Network可將這些類型及其關系簡化為一行代碼:My.Computer.Network.IsAvailable()。

外觀還可以將用其他方式難以找到的相關功能簡單地匯集在一起。例如,My.Computer可將不同類的屬性匯集起來,以提供計算機名以及對屏幕的訪問:

PublicReadOnlyPropertyName()AsString
Get
ReturnSystem.Environment.MachineName
EndGet
EndProperty
PublicReadOnlyPropertyScreen()AsSystem.Windows.Forms.Screen
Get
ReturnSystem.Windows.Forms.Screen.PrimaryScreen
EndGet
EndProperty

在My中,可從多個.NETFramework類型中匯集相關功能的類的其他示例包括My.Application、My.Computer、My.Computer.FileSystem、My.Computer.Info以及My.Application.Info。

Proxy類

proxy類是一個非?!笆荨钡念悾蓪λ乃姓{用轉發到基礎對象中。例如,如果您調用My.Computer.Clipboard.GetText(),則實際上是在調用proxy類方法ClipboardProxy.GetText(),定義如下:

PublicFunctionGetText()AsString
ReturnClipboard.GetText()
EndFunction

按照約定,proxy類總是帶有后綴Proxy。當訪問剪貼板、文件系統以及注冊表時,My會利用代理,這是因為代理公開的基本類是由在IntelliSense中不可見的共享方法組成的。Proxy類無法由用戶實例化。性能測試已表明,通過代理轉發調用毫無意義。

動態生成的類

本著“使功能觸手可及”這一宗旨,My提供了對您項目中定義的窗體、Web服務、資源和設置的訪問。例如,如果您的項目包含對Web服務MapDirections的引用,則可以立即使用該Web服務,而不必了解如何啟動該Web服務代理的實例。您只需鍵入以下內容:My.WebServices.MapDirections.GetDirections(...)

這是如何工作的?對于您項目中的窗體、Web服務、設置以及資源,factory類是由按需返回以惰性方式創建的實例的編譯器生成的。factory類經過調整,可以用適用于項目(您的代碼運行在其中)類型(exe/dll/web)的方式返回實例。有關更多詳細信息,請參閱“線程處理”部分。

My.Forms

作為動態生成的類的一個示例,請考慮My.Forms。該類已提供給您,并為您項目中的每個窗體定義了工廠(Factory)方法。當您通過My.Forms.Form1訪問Form時,該工廠方法會檢查是否已打開Form1的一個實例。如果已打開一個實例,便會返回該實例。否則,會創建并返回Form1的一個實例。為包含Form1的項目所生成的代碼如下所示:

ClassMyForms
'Codeinboldisgeneratedbythecompiler
Publicm_Form1AsForm1
PublicPropertyForm1()AsForm1
Get
m_Form1=Create__Instance__(OfForm1)(m_Form1)
Returnm_Form1
EndGet
Set(ByValValueAsForm1)
IfValueIsm_Form1
Return
EndIf
IfNotValueIsNothingThen
ThrowNewArgumentException(_
"PropertycanonlybesettoNothing.")
EndIf
Dispose__Instance__(OfForm1)(m_Form1)
EndSet
EndProperty
EndClass

Create__Instance__()函數負責按需創建窗體的實例。它會檢查窗體(存儲在m_Form1中)是否已被實例化。如果窗體已被實例化,便會返回該窗體。否則,會創建并返回一個實例。Create__Instance__()還會捕獲遞歸窗體創建嘗試。Dispose__Instance__()負責關閉該窗體。

My.Forms還提供了重新引入窗體的默認實例的方法,您可能在較早版本的VisualBasic中熟悉該方法。默認實例使得在不必先顯式創建窗體的實例的情況下引用窗體的實例成為可能。

例如,在VisualBasic6.0中,作為替代,您可能已經編寫了Form1.Show():

DimForm1InstanceasForm1
Form1Instance=newForm1
Form1Instance.Show()

由于VisualBasic2005中的編譯器利用My.Forms來創建默認實例,因此,您可以僅編寫Form1.Show()。

My.WebServices

人們在針對Web服務進行編碼時遇到的困難之一是確定針對哪個類來進行編碼。My.WebServices省去了該確定過程并按需提供了Web服務代理的實例。

My.WebServices最適用于同步調用Web服務。所生成的用以提供Web服務代理的實例的代碼模式與所示的用以返回窗體的實例的代碼模式相同。

My.Settings

VisualBasic2005中的新功能是Settings設計器,它可讓您以應用程序或用戶為基礎指定應用程序設置。該設計器創建了一個類,您可以使用該類以強類型的方式訪問您的設置。通過在解決方案資源管理器中顯示所有文件并在MySettings.Settings節點下查找MySettings.vb文件,您可以看到MySettings類的一個示例。

以下為所生成的用以管理名為SampleUserSetting的應用程序設置的屬性示例:

PartialNotInheritableClassMySettings
InheritsSystem.Configuration.ApplicationSettingsBase
<System.Diagnostics.DebuggerNonUserCode(),_
System.Configuration.UserScopedSettingAttribute(),_
System.Configuration.DefaultSettingValueAttribute("TryMe")>_
PublicPropertySampleUserSetting()AsString
Get
ReturnCType(Me("SampleUserSetting"),String)
EndGet
Set
Me("SampleUserSetting")=value
EndSet
EndProperty
EndClass

生成的類可為您做所有繁重工作。要訪問該設置,您只需鍵入以下內容:

My.Settings.SampleUserSetting

My.Resources

VisualBasic2005中的另一項新功能是Resource設計器,它使您能夠向應用程序中添加資源。Resource設計器還會創建一個模塊,您可以使用該模塊以強類型的方式訪問您應用程序中的資源。例如,如果您向項目中添加名為Smiley的位圖,則可以使用My.Resources.Smiley訪問該位圖。通過在示例項目的解決方案資源管理器中顯示所有文件并在MyResources.resx節點下查找MyResources.vb文件,您可以看到生成的資源模塊的一個示例。

以下為所生成的用以返回Smiley資源的工廠屬性的示例項目的一個示例:

PublicReadOnlyPropertySmiley()AsSystem.Drawing.Bitmap
Get
ReturnCType(ResourceManager.GetObject("Smiley",_resCulture),_
System.Drawing.Bitmap)
EndGet
EndProperty

所生成的強類型資源模塊處理區分大小寫的資源ID,使用System.Resources.ResourceManager類檢索您的資源,并管理與獲取為應用程序正確創建的ResourceManager相關的詳細信息。

要在VisualBasic2002或VisualBasic2003中訪問相同的Smiley位圖,您首先要將該位圖放入.resx文件中,而該操作是很困難的。另一個方法是將它作為嵌入資源放入項目中,并且必須牢記在將要成為嵌入資源的資源的屬性網格中更改生成操作。這樣,您編寫的代碼應該如下所示:

DimCurrentAssemblyAsReflection.Assembly=_
Reflection.Assembly.GetExecutingAssembly
DimBitMapStreamAsIO.Stream=_
CurrentAssembly.GetManifestResourceStream(_
"WindowsApplication2.Smiley.bmp")
DimSmileyBitmapasDrawing.Bitmap=NewBitmap(BitMapStream)

該段代碼中有一些重要的詳細信息是您所必需了解的。您必須知道獲取當前正在執行的程序集,并在其上調用GetManifestResourceStream()。您必須牢記使用根命名空間名稱來限定資源名。您必須獲取大小寫權限,這是因為傳遞給GetManifestResourceStream()的名稱是區分大小寫的。您必須知道在何處定義流類,這樣您可以在流對象中捕獲GetManifestResource的返回值。您必須知道如何從流創建位圖。由于上述問題之一,在試圖判斷BitMapStream為什么總是返回Nothing時,您可能會遇到挫折。

VisualBasic2005通過提供ResourceEditor解決第一個問題,使用ResourceEditor可以很容易地將新的或現有資源放入.resx文件中。然后,可以使用My很容易地訪問這些資源。您只需編寫以下內容:

DimSmileyBitmapasDrawing.Bitmap=My.Resources.Smiley

線程處理

My中可用的類實例是通過緩和線程處理問題的方式公開的,因為My對象的實例是逐線程提供的。即,線程1上返回的My.Computer的實例不同于線程2上返回的My.Computer的實例。這意味著當使用My對象時,您不必編寫同步代碼。

在Web應用程序中,從My返回的實例是根據請求存儲的。

小結

我們已經研究了My如何公開.NETFramework類以及如何生成動態生成的類以補充My。

最后,My可以減少您必須編寫的代碼行數,并提供對常用功能的訪問。它以有效、可靠且線程安全的方式實現這一目的。在程序員工作效率顯得尤為重要的環境中,My可以幫助您更加快速有效地完成工作。

->


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩国产成人高清视频| 国产精品成av人在线视午夜片| 欧美激情精品久久久久久大尺度| 欧美日韩另类字幕中文| 亚洲在线免费视频| 久久九九国产精品怡红院| 欧美精品成人在线| 亚洲精品小视频在线观看| 亚洲精品久久久久久久久久久| 国产精品毛片a∨一区二区三区|国| 亚洲欧洲美洲在线综合| 精品亚洲永久免费精品| 国产精品久久久久久久久男| 亚洲自拍小视频免费观看| 中文字幕国产亚洲| 日本亚洲欧洲色α| 欧美激情久久久久久| 色偷偷av一区二区三区| 久久久久久久国产| 亚洲xxxx视频| 亚洲欧美国产精品| 国产欧美va欧美va香蕉在| 欧美在线视频导航| 欧美日韩精品在线视频| 韩剧1988免费观看全集| 欧美一区二区三区免费观看| 神马久久桃色视频| 国产精品嫩草影院久久久| 亚洲国产精品久久久久久| 日韩av在线电影网| 色偷偷av一区二区三区乱| 国产色婷婷国产综合在线理论片a| 国产一区二区丝袜| 精品国产乱码久久久久久虫虫漫画| 日韩av男人的天堂| 91av在线影院| 午夜精品久久久99热福利| 国产精品看片资源| 成人乱人伦精品视频在线观看| 亚洲四色影视在线观看| 中文欧美日本在线资源| 国产免费久久av| 91精品国产亚洲| 91久久久在线| 亚洲国产精品久久久久久| 亚洲第一区第二区| 国产成人高清激情视频在线观看| 午夜精品久久久久久久男人的天堂| 欧美第一黄色网| 欧美成人四级hd版| 日韩精品视频在线播放| 中文字幕欧美日韩在线| 国产成人精品一区二区在线| 精品国产一区久久久| 97视频网站入口| 日韩欧美精品免费在线| 久久久久久久久久久人体| 国产色视频一区| 热门国产精品亚洲第一区在线| 国产精品69久久| 95av在线视频| 亚洲国产婷婷香蕉久久久久久| 久久久国产一区二区| 久久久久久久香蕉网| 欧美日韩黄色大片| 欧美性猛交xxxx乱大交| 亚洲人成电影网站色| 中文字幕亚洲激情| 在线中文字幕日韩| 一区二区三区四区精品| 欧美亚洲视频一区二区| 亚洲国产欧美一区二区三区久久| 成人黄色av网| 97成人精品区在线播放| 国产精品午夜视频| 亚洲成人a**站| 亚洲老头老太hd| 亚洲午夜久久久久久久| 国产成人精品免高潮在线观看| 亚洲网站在线看| 国产精品视频内| …久久精品99久久香蕉国产| 亚洲国产成人精品久久| 92福利视频午夜1000合集在线观看| 日韩黄色在线免费观看| 欧美日韩国产一中文字不卡| 久久久久久久久久国产精品| xxxxxxxxx欧美| 亚洲日本中文字幕免费在线不卡| 久久精品国产96久久久香蕉| 性欧美长视频免费观看不卡| 国产91成人在在线播放| 国产亚洲精品久久久久动| 久久91精品国产91久久跳| 国产欧美日韩中文字幕在线| 欧美日韩免费区域视频在线观看| 伊人久久久久久久久久| 欧美尺度大的性做爰视频| 亚洲欧洲国产精品| 日韩一区二区三区xxxx| 亚洲免费av网址| 九九精品在线观看| 亚洲片国产一区一级在线观看| 中文字幕欧美日韩精品| 色哟哟亚洲精品一区二区| 一区二区亚洲精品国产| 亚洲最大福利网站| 95av在线视频| 欧美大片在线看| 国产精品美女在线| 欧美性猛交xxxx免费看| 日韩在线资源网| 亚洲四色影视在线观看| 亚洲激情视频在线观看| 亚洲欧美成人在线| 韩国精品久久久999| 性欧美亚洲xxxx乳在线观看| 国产精品美腿一区在线看| 亚洲激情成人网| 日韩av片免费在线观看| 久久精品成人欧美大片古装| 精品无人区太爽高潮在线播放| 国产精品精品一区二区三区午夜版| 亚洲最大成人在线| 亚洲精品国偷自产在线99热| 国内精品久久久久久中文字幕| 清纯唯美亚洲综合| 91精品国产综合久久香蕉的用户体验| 欧美一级黑人aaaaaaa做受| 日韩精品在线视频观看| 日韩av影视综合网| 欧美在线一区二区视频| 精品无人国产偷自产在线| 亚洲香蕉伊综合在人在线视看| 亚洲成人在线视频播放| 91丝袜美腿美女视频网站| 欧美激情亚洲激情| 蜜臀久久99精品久久久久久宅男| 国产精品老女人视频| 精品久久久久久久久久ntr影视| 性日韩欧美在线视频| 亚洲精品视频久久| 日韩在线观看视频免费| 中文字幕亚洲无线码a| 日韩av片永久免费网站| 欧美裸体男粗大视频在线观看| 亚洲奶大毛多的老太婆| 亚洲人成网站色ww在线| 在线播放国产精品| 日日噜噜噜夜夜爽亚洲精品| 亚洲一区二区久久| 久久人人爽人人爽人人片亚洲| 欧美富婆性猛交| 久久久www成人免费精品| 久久久久久成人| 成人a级免费视频| 日韩欧美中文在线| 欧美老女人性生活| 欧美亚洲第一页| 亚洲网在线观看| 欧美日韩在线观看视频小说| 国产精品高潮呻吟久久av无限| 国外视频精品毛片| 日本欧美在线视频|