Visual Basic 2005中的My功能
2008-02-23 06:48:09来源:互联网 阅读 ()
注:本文和示例代码均基于 Microsoft Visual Studio 2005(此前代号为“Whidbey”)的预发布版。文中包含的所有信息均有可能变更。示例项目需要 Visual Studio 2005 Beta1 或更高版本。
简介
My 是 Visual Basic 2005 中的一项新功能,它可将常用功能放在您触手可及的地方,并减少了您必须编写的代码行数。它以有效、可靠且线程安全的方式实现这一目的。在程序员工作效率显得尤为重要的环境中,My 可以帮助您更快地完成工作,这就是 Visual Basic 的精髓所在。
本文旨在探究如何使用 My 来访问 .NET Framework 功能以及您项目中的项。
可从 My 中获得的 .NET Framework 类
由于 .NET Framework 涉及的内容很多,因此要找到您所需的功能非常困难。为了解决此问题,My 提供了常用 .NET Framework 类和功能的入口点。My 还公开了新的高级别 .NET Framework 类,这些类可将相关的功能汇集到基于任务的 API 中。
My 公开功能的方式包括:返回已实例化并可以使用的 .NET Framework 类,延推迟对 .NET Framework 方法的调用,以及返回动态生成的类(使用该类可访问您项目中的项)。
直接公开
只要可能,My 便会作为一种发现机制为 .NET Framework 中的现有类提供服务,并直接公开这些类型。请参见以下 My.Application.Deployment 示例:
Public ReadOnly Property Deployment() As _
System.Deployment.ApplicationDeployment
Get
Return _
System.Deployment.ApplicationDeployment.CurrentDeployment
End Get
End Property
直接公开的其他示例包括 My.Computer.FileSystem.OpenTextFileReader()(它返回 System.IO.StreamReader)、My.Application.OpenForms()(它返回 System.Windows.Forms.FormsCollection)、My.User(它返回 System.Security.Principal.IPrincipal),等等。
外观
My 还可以返回能够提供基于任务的 API 的新类,以用于执行先前难以执行的操作,因为在以前找到功能很困难,并且/或者需要多个对象协同完成。
需要使用低级别 .NET Framework API 或者需要多行代码的常见任务得以大大简化。请参见以下确定网络连接是否可用的任务示例:
Imports System.Net.NetworkInformation
Public ReadOnly Property IsAvailable() As Boolean
Get
For Each NetInterface As NetworkInterface In _
NetworkInterface.GetAllNetworkInterfaces()
If NetInterface.Type <> InterfaceType.LooPBack _
AndAlso NetInterface.Type <> InterfaceType.Tunnel _
AndAlso NetInterface.OperationalStatus = _
OperationalStatus.Up Then
Return True
End If
Next
Return False
End Get
End Property
上面的代码需要 System.Net.NetworkInformation 命名空间中几个类型的详细知识。使用外观模式,My.Computer.Network 可将这些类型及其关系简化为一行代码:My.Computer.Network.IsAvailable()。
外观还可以将用其他方式难以找到的相关功能简单地汇集在一起。例如,My.Computer 可将不同类的属性汇集起来,以提供计算机名以及对屏幕的访问:
Public ReadOnly Property Name() As String
Get
Return System.Environment.MachineName
End Get
End Property
Public ReadOnly Property Screen() As System.Windows.Forms.Screen
Get
Return System.Windows.Forms.Screen.PrimaryScreen
End Get
End Property
在 My 中,可从多个 .NET Framework 类型中汇集相关功能的类的其他示例包括 My.Application、My.Computer、My.Computer.FileSystem、My.Computer.Info 以及 My.Application.Info。
Proxy 类
proxy 类是一个非常“瘦”的类,可将对它的所有调用转发到基础对象中。例如,如果您调用 My.Computer.Clipboard.GetText(),则实际上是在调用 proxy 类方法 ClipboardProxy.GetText(),定义如下:
Public Function GetText() As String
Return Clipboard.GetText()
End Function
按照约定,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 的项目所生成的代码如下所示:
Class MyForms
'Code in bold is generated by the compiler
Public m_Form1 As Form1
Public Property Form1() As Form1
Get
m_Form1 = Create__Instance__ (Of Form1)(m_Form1)
Return m_Form1
End Get
Set(ByVal Value As Form1)
If Value Is m_Form1
Return
End If
If Not Value Is Nothing Then
Throw New ArgumentException( _
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash