打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
vb2005中的My功能
vb2005中的My功能

概述了 My 功能如何公开 .NET Framework 功能,包括可用的类、动态生成的类以及线程处理。
注:本文和示例代码均基于 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( _
\"Property can only be set to Nothing.\")
End If
Dispose__Instance__ (Of Form1)(m_Form1)
End Set
End Property
End Class

Create__Instance__() 函数负责按需创建窗体的实例。它会检查窗体(存储在 m_Form1 中)是否已被实例化。如果窗体已被实例化,便会返回该窗体。否则,会创建并返回一个实例。Create__Instance__() 还会捕获递归窗体创建尝试。Dispose__Instance__() 负责关闭该窗体。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VB编程重要知识点
VB中Set的用法
在VB中使用数据窗体设计器插件
Excel VBA 学习总结 - 开发模式
懒猪学编程,Visual Basic与Visual C#实例编程三
Visual Basic 2005新功能——My命名空间
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服