65.9K
CodeProject 正在变化。 阅读更多。
Home

扩展 My 命名空间

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.22/5 (6投票s)

2008年8月31日

CPOL

7分钟阅读

viewsIcon

44230

downloadIcon

294

了解如何在 Visual Basic 2005 / 2008 中扩展 My 命名空间!

引言

如果您使用过 Visual Basic 的前两个版本(2005 年和 2008 年),那么您很可能听说过,甚至使用过 My 命名空间。My 命名空间,简单来说,是一种非常快速访问许多常用 .NET 函数的方式。用原始的 .NET 代码可能需要多行才能完成的操作,借助 My 命名空间可以缩短到一行。My 的每个成员都分为几个部分:My.ApplicationMy.ComputerMy.FormsMy.ResourcesMy.SettingsMy.UserMy.WebServices。微软网站上还有一个名为 My.Blogs 的可下载扩展。所有这些成员都执行特定且有用的功能,例如设置最小启动屏幕显示时间、获取用户计算机的名称、访问应用程序的窗体、资源和设置、获取当前用户的信息以及访问您可能已在程序中引用的 Web 服务。但是,有时,您会在程序中反复执行某个过程,而这些过程都将是原始的 .NET 代码。如果发生这种情况,那么扩展 My 命名空间将是一个好主意。

为什么您应该扩展 My 命名空间?嗯,我刚才给出的例子就是一个理由。My 命名空间是大量 .NET 功能的快捷方式!另一个原因可能是更好地组织代码。

在本文中,我们将通过添加一个简单的扩展来锁定用户计算机,来扩展 My 命名空间,这非常适合此类演示。

添加顶级成员

首先,我们将学习如何创建顶级成员,例如 My.ComputerMy.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.ApplicationMy.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.UserMy 命名空间中的其他棘手部分。

历史

  • 版本 1.0 - 第一次也是最初的发布。
© . All rights reserved.