Excerpted from “Microsoft Visual Basic Programmer’s Introduction to Whidbey” by Sean Campbell, Scott Swigart, Kris Horrocks, Derek Hatchard, and Peter Bernhardt.
Publisher, Microsoft Press, ISBN # 0-7356-2058-X. © 2004, Microsoft Corporation
应用:My命名空间
新概念
当你用VB6编写应用程序时,你曾用到VB的运行库,这其中包含一大批COM对象;以及所用Windows版本的Win32 API。最初版本的.NET Framework将这些的大部分内容集成到一个庞大的类库中,这就是我们熟悉的Base Class Library(BCL)。在BCL中有些类支持对系统底层的访问,有些类能让你方便地访问计算机硬件的信息,还有些类能让你在不同应用程序间进行网络通讯、加密数据以及访问注册表等等。如果你想作一个彻底的.NET开发者,你必须掌握BCL和它所提供的丰富的功能。如果对BCL缺乏足够的了解,开发者就会做出很多不必要的重复劳动,重新构建一些已经存在的类。有时.NET提供的某种功能“隐藏”得太深,或者相对于庞大的.NET Framework显得太不起眼了。有很多人写文章讲述的用他们祖传的算法来实现的功能,其实可以用Framework中的某些类非常容易地实现,比如Path或PasswordDeriveByes。事实上,许多人都会告诉你学习.NET其实不是在学习Visual Basic或C#,而是在学习BCL。 但是,学习BCL也是一项巨大的挑战,因为它太庞大了。有些非常常用的类和那些几乎用不到的类混杂在一起。为了更容易找到那些框架中最常用的类,Visual Basic 2005现在提供一种“快捷方式”命名空间——My。你可以通过使用My轻松地访问计算机、应用程序以及用户信息,还能用它来访问窗体和Web服务。要注意的一点是My仅能在使用Visual Basic 2005进行开发时使用,在使用C#时是不能直接访问到My的。有必要提及My命名空间并不仅仅是一个快捷方式。有些情况下,My命名空间提供的类比你在BCL大量的命名空间中简单搜索得到的类功能更强大。比如说Folder对象提供更多属性,如Drive,该属性在System.IO.DirectoryInfo类中根本不存在。My还让微软思考将“计算机”、“应用程序”或“用户”看作完全的实体,并且自问 “对于一个‘计算机’你应当能做什么”这样的问题。思考的结果包括My.Computer.Network.Ping,这让你能用一行代码实现对网络计算机的Ping操作。你现在用的这项功能以前只有调用COM库,甚至Win32 API才能做到,而现在它能够在My中轻松地找到并使用。
My命名空间下面分成如下几个专区:
My对象模型
对象 描述
My.Application
包含了当前运行应用程序的信息,如标题、当前路径和版本等。它还能访问环境变量,可以让你轻松地书写本地应用程序日志或自定义日志等。
My.Computer
提供应用程序所运行的本地计算机硬件或系统底层的信息。比如注册表、打印机、键盘、现实器等。这些都是你能通过该类访问到的对象。
My.User
包含当前用户的信息,包括用户显示名称、域名称,组群名称等。
My.WebServices
它允许你轻松地访问已经在项目中添加了Web引用的Web服务。
My.Forms
一个当前项目中存在的窗体的集合。你可以通过它显示、隐藏这些窗体而不需要在代码中显式创建他们的对象。(译注:这太棒了,VB6程序员的福音)
正如你所见,My命名空间给你了一个便捷的方法,让你可以在日常开发中直接访问那些常用的功能。
深入代码
在这一节,我将通过一个简短的示例,带你深入认识My命名空间。这个例子在一定深度上探索了My里面的世界。这个程序有很多选项卡,每个选项卡注重My的一项主要功能。
图1
My.Application 选项卡.
图像修改– 需要删除 My.Datasources – 这一部分已经去掉了
My.Application
第一个选项卡——My.Application上面有一个数据表格控件,它能显示My.Application对象的大部分属性值。控制这个数据表格控件的代码如下:
CLRVersionInUse已经去掉了(你能在M2 bits见到它,但已经被去掉了)
myAppDS.MyApplication.AddMyApplicationRow("CLR Version In Use", _
My.Application.CLRVersionInUse.Major.ToString() & "." & _
My.Application.CLRVersionInUse.Minor.ToString() & "." & _
My.Application.CLRVersionInUse.Revision.ToString() & "." & _
My.Application.CLRVersionInUse.Build.ToString())
myAppDS.MyApplication.AddMyApplicationRow("Command Line", _
My.Application.CommandLine)
Dim cmds As String
For Each cmd As String In My.Application.CommandLineArgs
cmds &= ", " & cmd
Next
myAppDS.MyApplication.AddMyApplicationRow("Command Line Args", _
cmds)
myAppDS.MyApplication.AddMyApplicationRow("Company Name", _
My.Application.CompanyName)
myAppDS.MyApplication.AddMyApplicationRow("Company Name", _
My.Application.CompanyName)
myAppDS.MyApplication.AddMyApplicationRow("Culture", _
My.Application.Culture.CurrentCulture.ToString())
myAppDS.MyApplication.AddMyApplicationRow("Description", _
My.Application.Description)
myAppDS.MyApplication.AddMyApplicationRow("Number of Procs", _
My.Application.EnvironmentVariables.Item("NUMBER_OF_PROCESSORS").Value)
myAppDS.MyApplication.AddMyApplicationRow("File Name", _
My.Application.FileName)
myAppDS.MyApplication.AddMyApplicationRow("Folder", _
My.Application.Folder.ToString())
myAppDS.MyApplication.AddMyApplicationRow("Legal Copyright", _
My.Application.LegalCopyright)
myAp