向Visual Basic程序员介绍My命名空间(一)

visual|程序|程序员|命名空间

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)

myAppDS.MyApplication.AddMyApplicationRow("Legal Trademark", _

My.Application.LegalTrademark)

myAppDS.MyApplication.AddMyApplicationRow("Event Log Name", _

My.Application.Log.EventLogName)

myAppDS.MyApplication.AddMyApplicationRow("Mouse Pointer", _

My.Application.MousePointer.ToString)

myAppDS.MyApplication.AddMyApplicationRow("Product Name", _

My.Application.ProductName)

myAppDS.MyApplication.AddMyApplicationRow("CUser Application Data Path", _

My.Application.SpecialFolders.CurrentUserApplicationData.ToString())

myAppDS.MyApplication.AddMyApplicationRow("Title", _

My.Application.Title)

myAppDS.MyApplication.AddMyApplicationRow("Version", _

My.Application.Version.Major & "." & My.Application.Version.Minor & "." & _

My.Application.Version.Revision & "." & My.Application.Version.Build)

myAppDS.MyApplication.AddMyApplicationRow("Working Folder", _

My.Application.WorkingFolder.ToString()

上面这段代码故意写得有些罗嗦。这段代码是在利用反射列举应用程序的属性。把他们都列在代码里是为了让你看得更清楚,并了解从一个特定的属性中可以得到什么。从属性中取得的每个数值都被放到一个类型化的数据集中。接着My.Applicaton选项卡中的一个数据表格控件绑定到这个数据集中的My.Application数据表。通过轻松访问My.Application对象的属性,你可以获取有关你的应用程序的大量信息。下表列出了My.Application对象的详细属性。

My.Application

属性/方法 描述

CommandLine
返回完整的命令行——exe加上所有参数。

CommandLineArgs
返回一个包含所有命令行参数的集合。

CompanyName
返回在AssemblyInfo.vb中指定的CompanyName信息。

Culture
返回一个culture对象,通过它你可以确定当前应用程序所在的文化设置。

Description
返回在AssemblyInfo.vb中指定的应用程序描述信息。

Environment Variables
列举当前计算机的环境变量。

FileName
返回应用程序的程序集名称。

Folder
返回应用程序所在的文件夹。

Exit
关闭应用程序。

LegalCopyright
返回在AssemblyInfo.vb中指定的应用程序合法版权。

Legal Trademark
返回在AssemblyInfo.vb中指定的应用程序合法商标。

Log
允许你在本地计算机生成自定义的文件日志或应用程序日志。

MousePointer
允许你更改应用程序的鼠标指针。

ProductName
返回在AssemblyInfo.vb中指定的应用程序产品名称。

SpecialFolders
返回一个Special Folder对象,让你访问一些特殊的文件夹,如桌面、Application Data等。

Title
返回可执行程序集的标题

Version
返回程序集的版本信息

WorkingFolder
返回应用程序的工作目录

My.Application在开发中的相关应用

My.Application提供了大量的功能,但是所用的代码要比用VB6或VB.NET少得多。下面我们看看如何使用My.Application。比如说我们要编写一段代码来写事件日志,现在只要下面这点代码就够了:

My.Application.Log.WriteEntry("Application Starting", _
EventLogEntryType.Information, 1000)

上面的代码会在本地应用程序事件日志中写入一条记载。以前用VB.NET的时候如果你想写入事件日志需要写很多行代码。如果用VB6,你只能使用App对象提供的非常有限的日志功能,你不能指定事件ID,不能写入系统或安全日志,也不能创建你自定义的日志。

还有一个例子可以很明显地对比使用My前后所需代码用量的减少,那就是当你需要生成一个自定义日志,并希望写入一个文本文件的时候。

My.Application.Log.FileName = My.Application.Folder.ToString() & _

"\logfile.txt"

My.Application.Log.FileType = Monitoring.LogFileType.Xml

My.Application.Log.WriteEntry("Application Starting", _

EventLogEntryType.Information, 1000)

使用这些代码,要写入的信息除了写进应用程序事件日志中意外,还被写到一个自定义的XML日志文件中去。你可以使用My.Application.Log的FileMaximumSize属性设置文件的最大尺寸。你可以指定一中日志文件的类型,可以是XML,也可以是用My.Application.Log.FileType属性指定的Tab分割类型。你能编写程序控制使用或不同日志功能,还可以在运行时更改日志文件。

Figure 2图二

XML 日志输出

My.Application还可以让你用一行代码直接访问很多应用程序级别的信息。下面有一些这方面的例子:

· 用Folder属性快速确定你的应用程序所在文件夹。

· 用MouseCursor快速设定一些默认的光标类型,如AppStaring,,Help等

· 快速访问一些程序集的原数据,如产品名称,公司名称等。

<未完待续>

时间: 2024-11-01 01:17:20

向Visual Basic程序员介绍My命名空间(一)的相关文章

向Visual Basic程序员介绍My命名空间(二)

visual|程序|程序员|命名空间 My.ComputerMy的另一个功能块是Computer对象.My.Computer对象可以让你访问系统底层和应用程序所在硬件平台的信息.示例应用程序的第二个选项卡展示了你在My.Computer对象中能找到的有趣属性. 图三 My.Computer 选项卡 控制这个网格的代码如下: myAppDS.MyComputer.AddMyComputerRow("Clock", _ My.Computer.Clock.LocalTime) myAppD

向Visual Basic程序员介绍泛型(一)

visual|程序|程序员 此文档是Sean Campbell, Scott Swigart, Kris Horrocks, Derek Hatchard, and Peter Bernhardt.等人创作的<向Microsoft Visual Basic程序员介绍Whidbey>一书中的样章,版权归原作者和出版社所有.转载请注明此声明. 本文用通俗的用语和大量的实例向Visual Basic程序员介绍了下一版Visual Basic.Net中将要增加的新功能--泛型.此文章可以帮助广大VB用

向Visual Basic程序员介绍泛型(二)

visual|程序|程序员 (接上篇) 正如你所见,泛型使用起来很简单.强类型化的代码可以避免运行时错误:智能感知会工作得更好.虽然使用泛型已经有非常充分的理由,不过使用泛型还有更多的优点:性能和代码重用. 将泛型技术引入.Net框架的一个主要原因是为了提高性能.比如集合类可以比以前工作得更快,因为编译器能够针对集合所储存的类型进行优化.下面的代码比较了数组.ArrayList以及泛型List的性能: txtOutput.Text = "Performance" & vbCrL

《Visual Studio程序员箴言》----1.2 滚动与导航

1.2 滚动与导航 Visual Studio程序员箴言 能够查看代码并将光标移到所关注的任意行,与能够尽可能轻松地输入代码同样重要. 1.2.1 滚动 我们都习惯使用鼠标滚轮来滚动编辑器内的代码和文本.以下技巧介绍了一些新的键盘快捷键,可改善你对滚动查看的体验.此外还介绍了如何隐藏所有的滚动条.说不定什么时候这些技巧就会派上用场. 技巧1.13 使用鼠标滚轮在各个方向上滚动 您知道可以按鼠标滚轮并把它当作第三个按键来用吗?对于很多带有编辑器的应用程序来说,按下鼠标滚轮会显示一个图标,指示可以往

《Visual Studio程序员箴言》---- 第2章 让编辑器的使用得心应手 2.1 高级编辑

第2章 让编辑器的使用得心应手 Visual Studio程序员箴言 纵观本书,您会看到我反复测试我最喜欢的功能.但我可以肯定地说,没有什么其他功能比编辑器更能让我想要拥有.编辑器是每个人一直都要使用的功能,我怎么会不想测试它并揭示它的秘密呢? 第1章重点讲述了适用于任意文件类型(甚至是纯文本文件)的基本编辑技巧.本章着重强调的是针对任意语言文件的基本编码技巧.在此,您将了解到关于Microsoft IntelliSense.大纲显示和代码段的技巧. 本文仅用于学习和交流目的,不代表异步社区观点

《Visual Studio程序员箴言》----2.5 代码段

2.5 代码段 Visual Studio程序员箴言与破坏软件相同,我更喜欢做的唯一的事情就是发出通知:"我破坏了软件".例如,我首次接管测试代码段的工作时,我会尝试进行各种意外的操作来破坏UI,例如在代码段名称的位置上输入"Sara wuz here".正如您所期望的那样,我的大部分尝试都是不成功的,但最终我确实发现了一系列能够导致崩溃的键盘快捷键. 软件测试的有趣之处在于,一旦找出一个bug,通常在附近还隐藏着一堆bug.您要做的就是知道如何找出bug的模式.从

《Visual Studio程序员箴言》----2.2 打开文件

2.2 打开文件 Visual Studio程序员箴言 花在IDE上的时间越多,想要进行自定义的愿望就越强烈.对于打开文件也是如此.因为这是一项频繁执行的操作,使用快捷方式或一些省时的自定义设置可以在需要打开文件的时候加快这个过程的速度. 打开文件和编辑器窗口 接下来要讲的这些技巧为在编辑器内打开文件提供了各种自定义方法. 技巧2.22 打开文件时重用同一个编辑器窗口 访问菜单"工具"→"选项"→"环境"→"文档",然后选中&

《Visual Studio程序员箴言》----2.4 IntelliSense

2.4 IntelliSense Visual Studio程序员箴言IntelliSense这个术语指的是编辑器在用户输入代码时为用户提供建议的功能.用户很可能最熟悉的主要IntelliSense功能包括语句完成.参数信息和完成单词. 语句完成.参数信息和完成单词语句完成就是在UI上显示在指定位置能够将哪些合法对象插入到代码中.它也称为列表成员. 完成单词和语句完成非常类似,但不在UI上显示.如果正在输入的方法或对象是唯一的,完成单词功能将会填好单词,即便语句完成并未显示也是如此.完成单词等价

《Visual Studio程序员箴言》----第1章 回顾编辑器的基础知识 1.1 基本编辑

第1章 回顾编辑器的基础知识 Visual Studio程序员箴言Microsoft Visual Studio中的性能改进是从编辑器开始的.无论是输入代码.编辑代码还是删除代码,除了纯粹的输入,无需执行其他的操作了.把这些技巧当作一个储钱罐,在其中存入多余的零钱.即使这些技巧当中的一些只能够为您省下短短的几秒钟时间,这几秒钟也能积少成多,变为几天.几周和几个月.省出这么长的时间用于消遣不是很好吗? 本文仅用于学习和交流目的,不代表异步社区观点.非商业转载请注明作译者.出处,并保留本文的原始链接