扩展 My 命名空间






4.22/5 (6投票s)
了解如何在 Visual Basic 2005 / 2008 中扩展 My 命名空间!
引言
如果您使用过 Visual Basic 的前两个版本(2005 年和 2008 年),那么您很可能听说过,甚至使用过 My
命名空间。My
命名空间,简单来说,是一种非常快速访问许多常用 .NET 函数的方式。用原始的 .NET 代码可能需要多行才能完成的操作,借助 My
命名空间可以缩短到一行。My
的每个成员都分为几个部分:My.Application
、My.Computer
、My.Forms
、My.Resources
、My.Settings
、My.User
和 My.WebServices
。微软网站上还有一个名为 My.Blogs
的可下载扩展。所有这些成员都执行特定且有用的功能,例如设置最小启动屏幕显示时间、获取用户计算机的名称、访问应用程序的窗体、资源和设置、获取当前用户的信息以及访问您可能已在程序中引用的 Web 服务。但是,有时,您会在程序中反复执行某个过程,而这些过程都将是原始的 .NET 代码。如果发生这种情况,那么扩展 My
命名空间将是一个好主意。
为什么您应该扩展 My
命名空间?嗯,我刚才给出的例子就是一个理由。My
命名空间是大量 .NET 功能的快捷方式!另一个原因可能是更好地组织代码。
在本文中,我们将通过添加一个简单的扩展来锁定用户计算机,来扩展 My
命名空间,这非常适合此类演示。
添加顶级成员
首先,我们将学习如何创建顶级成员,例如 My.Computer
或 My.Blogs
。人们可能会创建这些扩展,因为他们开发的扩展不太符合其他类别。我们将创建一个名为 My.SampleExtension
的示例顶级扩展。这个扩展将只返回字符串“My Namespace Rocks!”;没什么太复杂的。
要创建 My
扩展,我们需要向当前项目添加一个模块。(您需要打开一个 Windows 窗体或控制台应用程序项目才能继续。此项目还将用作我们扩展的测试用例。)将模块命名为“MyExtension1”,然后单击“确定”。现在您将看到一个空的模块模板。然后您应该看到类似以下的代码:
Module MyExtension1
End Module
我们现在需要将模块包装在 My
命名空间中。
Namespace My
<HideModuleName()> Module MyExtension1
End Module
End Namespace
现在,由于我们要返回一个字符串,所以我们希望告诉扩展返回一个实际上是字符串的属性。
Namespace My
<HideModuleName()> Module MyExtension1
Friend ReadOnly Property SampleExtension()
Get
Return (“My Namespace Rocks!”)
End Get
End Property
End Module
End Namespace
现在,通过在 Windows 窗体项目中添加一个 Label
来测试您的新扩展。将名称保留为 Label1
,或者任何标签的名称。双击窗体,然后在窗体的加载事件处理程序中键入:
Label1.Text = My.Computer.SampleExtension()
运行您的应用程序。如果一切正常,您应该会在窗体上看到一个带有文本“My Namespace Rocks!”的标签。恭喜!您已经创建了您的第一个 My
扩展。
如果您想创建一个公开多个属性的扩展,就像 My.Blogs
一样,您可以将第一行替换为类似以下的内容:
Namespace My.WiFi
<HideModuleName()> ...
...然后将属性或函数添加到模块包装器中。这将允许您键入 My.WiFi.FunctionName
来访问新函数。虽然将顶级成员添加到 My
有时很有帮助,但我个人认为最好的扩展是为已存在的成员添加功能,例如 My.Computer
。
添加子级成员
现在我们将学习如何扩展 My
命名空间的预定义成员。My.Application
和 My.Computer
相对容易扩展。我将在几分钟内向您展示如何做到这一点。My.User
非常难以扩展,所以我们不会在这篇文章中讨论它。其他成员也可以扩展,但它们是专门的任务,并且难度较大。我们在这篇文章中也不会学习。但是,我们将扩展 My.Computer
,我也会向您展示如何扩展 My.Application
。
向您的项目添加一个新模块,这次将其命名为“MyComputerLock”。删除模块中已有的所有代码,并创建以下包装器:
Namespace My
Partial Class MyComputer
End Class
End Namespace
这会告诉 Visual Basic 包装器中的代码需要放置在 My
命名空间的 My.Computer
成员中。现在,我们可以开始在包装器中放置新的 Sub
和属性。在这种情况下,我们希望 My
命名空间有一个锁系统功能。在包装器中键入以下代码:
Sub LockSystem()
Shell(“rundll32 user32.dll,LockWorkStation”, vbNormalFocus)
End Sub
通过在窗体中添加一个按钮来测试此扩展。双击按钮以访问其 Click
事件,然后键入 My.Computer.LockSystem()
。运行您的程序并单击按钮。它将表现得好像您按下了 Windows 键 + L。
这并不难,对吧?要扩展 My.Application
对象,只需在编写扩展时键入 Namespace My.Application
作为包装器代码。
部署 My 扩展
现在我们将部署该扩展,使其与 Visual Basic 2005 和 2008 兼容。如果您从 2005 年开始使用,会更容易一些,但 2008 年应该不会给您带来太多麻烦。单击“文件”菜单,然后单击“导出模板...”。从列表中选择“项模板”,然后选择您正在处理的当前项目(如果尚未选中)。单击“下一步”。选择您希望导出的 My 扩展模块,然后转到下一页。选择扩展可能需要的任何引用,然后继续下一页。在最后一页上,为扩展指定图标、名称和描述。取消选中询问您是否要自动将模板导入 Visual Studio 的复选框,因为我们将在安装模板之前对其进行一些处理。单击“完成”,然后关闭 Visual Basic。导航到您的 Visual Studio 模板文件夹(在 XP 中,它是My Documents\Visual Studio 200X\My Exported Templates\;在 Vista 中,它是Documents\Visual Studio 200X\My Exported Templates\)。您应该会找到刚刚导出的模板。文件名应该是您给出的名称,并带有 zip 扩展名。解压缩 zip 文件并创建一个名为info.customdata的文件。这只是一个重命名的文本文件,其中包含将扩展安装到 Visual Basic 2008 所需的信息。在记事本中打开它。在该文件中键入以下代码:
<VBMyExtensionTemplate
ID="Microsoft.VisualBasic.Samples.MyExtensions.MyComputerShutdown"
Version="1.0.0.0" />
保存文件,然后退出程序。现在,打开.vstemplate文件。在 <TemplateData>
节点内,键入您自己的子节点:
<CustomDataSignature>Microsoft.VisualBasic.MyExtension
</CustomDataSignature>
这会告诉 Visual Basic 2008 这是一个 My
扩展。保存并关闭此文件。接下来,将此模板中的所有文件(包括.customdata文件)重新打包成一个 zip 文件。然后,您可以创建一个 VSI 包,该包允许您像普通模板一样安装它。您可以从 Visual Basic 中安装的 MSDN 文档中获取有关此内容的更多信息。现在,用户可以安装您的模板,并通过“添加新项...”对话框访问它,或者通过 Visual Basic 2008 中的“应用程序属性”页面中的“My 扩展”选项卡来访问它。
结论
现在您知道如何创建自己的 My
命名空间扩展了,我想在结束之前给您一些提示。
My 扩展可以很棒。它们为已经强大的命名空间增加了额外功能。然而,许多开发人员都曾 tempted 使用 My 命名空间中已有的代码来构建他们的扩展。甚至我自己也曾 tempted 过!然而,在大多数情况下,使用 My 命名空间中的现有代码来构建扩展是绝对不明智的。这会造成一些混乱,而且在某种程度上是在作弊。此外,如果它完全复制了 My 命名空间已经做过的事情,那么它真的就没有必要了,不是吗?然而,如果它使用了现有的 My 代码,并对其进行了改进和扩展,那么它可能是可以接受的。但这只在非常罕见的情况下发生。
好了,希望您从这篇文章中学到了很多东西。我希望您能为 My
扩展获得一些好主意,这些扩展将有助于当今和未来的开发者。我希望很快能写一篇新文章,介绍如何扩展 My.User
和 My
命名空间中的其他棘手部分。
历史
- 版本 1.0 - 第一次也是最初的发布。