VB 2010 (22)名称空间

      名称空间这个概念是编程标识符(ProgID)值的逻辑扩展。

1.名称空间的概念

      名称空间是一种组织.NET Framework类库提供的大量类、结构、枚举、委托和接口的方式。名称空间作为类库层次化的索引结构,可用于所有的.NET语言。名称空间,或者说对象引用,一般按功能进行组织。例如,名称空间System.IO含有处理输入、输出流和文件的类、结构、接口等。同一个名称空间中的类不必从同一个基类(Object除外)中继承。
           名称空间是命名约定和程序集的结合,它将对象组织起来,防止在对象引用中出现混乱。一个名称空间经常是在几个物理程序集中实现的,但是从引用的角度来讲,是名称空间将这些程序集联系在—起的。名称空间不仅包含类,还可以包含其他(子)名称空间,例如,IO名称空间是System的子名称空间。
         名称空间可以提供除组件名之外的标识。使用名称空间意义明确的标题(例如System)加上组名(例如Text),可以更好地将含有相似功能的类组织在一起。例如,名称空间System.Text含有StringBuilder这个功能强大的类。
        名称空间的结构并不能反映构成名称空间的类之间的物理继承关系。例如,名称空间System.Text含有另一个子名称空间RegularExpression。这个名称空间含有若干个类,但是这些类并不继承或引用名称空间System.Text中的类。
VB 2010 (22)名称空间

  • 第1个选项卡(.NET列出了GAC中包含的.NET程序集,除了程序集的名称之外,还可以得到程序集的版本和编译程序集的Framework版本。在这个选项卡上获得的最后一个数据是程序集在计算机的位置。
  • 第2个选项卡(COM列出了所有的COM组件,它提供了组件名、TypeLib版本和组件的路径。
  • 第3个选项卡(Projects)列出了当前解决方案包含的所有项目内自定义的.NET程序集。
  • 第4个选项卡(Browse)允许通过网络查找组件文(.dll、,tlb.olb、Ocx.exe或.manifest)。
  • 第5个选项卡(Recent)列出了最近引用的对象,方便再次引用。

        添加引用Microsoft.VisualBasic.Compatibility和Microsoft.VisualBasic.Compatibility.Data后,可以在对象浏览器中看到Microsoft.VisualBasic.Compatibility.VB6名称空间。。这个名称空间包含了多年来Visual Basic 6开发人员所使用的全部功能。Microsoft在.NET Framework中实现了这些功能,允许开发人员在.NET项目中直接使用。由于这些功能是在.NET Framework中实现的,因此不再存在以前效率低下的问题。只要在.NET名称空间中找到它们就可以使用了。另外要注意的是,尽管这个名称空间的名字是MicrosoftVisualBasic,实际上所有的.NET语言都可以使用它。也就是说,C#开发人员可以在程序中调用此名称空间。

2.名称空间与引用

        在解决方案窗口在选择显示所有文件,可以看到项目的一组引用的名称空间。对于自定义的引用,要把它的“复制本地”属性改为“True”。

3.常用的名称空间

  • System.Collections含有支持各种对象集合操作的类。这个名称空间包括用于数组、列表、词典、队列和散列表操作的类口该名称空间被自动添加进项目中。
  • System.Collections.Generic从.NET 2.0开始,这个名称空间提供了泛型,支持创建类型安全的集合,提供了泛型方法和泛型类。
  •  System.Data含有支持ADO.NET的核心功能的类。
  • System.Diagnostics包含在所有的Visual Basic 2010项目中,该名称空间含有数十个用于调试的类,其中,Trace和Debug类提供了主要功能。
  • System.Drawing支持Windows应用程序项目的简单绘图类。
  • System.EnterpnseServices不是自动包括的,必须引用System.EnterpriseServices实现才能使用它。这个名称空间含有连接.NET程序集与COM+的类。
  • System.IO这个名称空间包含的类允许读写文件和数据流。
  • System.Linq这个名称空间包含一个对象接口,以一种简单的新方式处理离散的数据源。
  • System.Text这个常用的名称空间允许用许多不同的方式使用文本,通常叫做字符串处理。该名称空间中最常用到的是StringBuilder对象。
  • System.Threading通过这个名称空间中的对象可以在应用程序中使用和处理线程。
  • System.Web这个名称空间提供了.NET Framework中的一个重要功能ASP.NET。这个名称空间提供的对象可以处理浏览器与服务器之间的通信。其中两个主要的对象是HttpRequest和HttpResponse,HttpRequest可以处理从客户端发送到服务器的请求,HttpResponse可以处理从服务器发送回客户端的响应。
  • System.Web.Services在创建Web服务时,这是要使用的主要的名称空间,Web服务是.NET Framework的一个强大功能。这个名称空间提供的类可以使用SOAP消息,并处理它们。
  • System.Windows.Forms这个名称空间提供了在Windows窗体应用程序项目中创建Windows窗体的类。这个名称空间含有窗体元素。

      利用对象浏览器可以查看名称空间中的类的方法和特性及功能。

4.导入空间

可以使用Imports 引用名称空间。编译器处理Imports 声明的过程归纳如下:

  • 首先,看看该项是否是完整的引用,例如System.Text.StringBuilder。
  • 如果该声明并不是完整的引用,则该编译器会检查该声明是否来自某个在模块级别上导入的名称空间的一个子名称空间。
  • 最后,如果未发现匹配,编译器会检查全局范围上导入的名称空间,看看该声明能否与为整个程序集导入的名称空间相关联。

5.为名称空间指定别名

      别名在.NET中有两个好处。首先,别名允许长名称空间(例如System.EnterpriseServices)被短名(如COMPlus)代替。另外,别名是解决模块级别上子名称空间指代不清楚的一种新方法。
      名称空间System和SystanDrawing都含有子名称空间Text。由于要使用名称空间Sysel.Drawing的许多类,所以,这个名称空间应该从该窗体的模块中导入。可是,假如这个名称空间与名称空间System一起导入,编译器就会再次发现对子名称空间Text的引用是不清楚的。如果给名称空间System.Drawing指定—个别名SysDraw,编译器就会知道,在以该别名开始的声明中,只应检查名称空间Syse.Drawing。这样就可以在模块级别上使用带有相同子名称空间的多个名称空间口编译器在显式引用它们时,只需要在模块级别上定位它们中的—个(或多个)。
    别名的使用方法如下所示:
        Imports SysDraw = System.Drawing

6.在ASP.NET中引用名称空间

    在ASP.NET项目中引用名称空间与在Windows窗体项目中引用名称空间类似。但必须先完成一些简单的额外步骤。首先,打开ASPNET解决方案的References文件夹,添加对程序集的引用,这与Windows窗体项目相同。然后,在页面文件的顶端导入这些名称空间,以避免每次在页面上完全限定这些引用。
    例如,不是将System.CoUections.Generic名称空间用于每个实例,而是可以在ASPNET页面的顶端添加<%# Import %>页面指令(假定页面用内联编码模式来构建),或者在ASPNET页面的后台代码文件中使用Imports关键字(与Windows窗体程序相同)。在ASPNET页面中使用内联编码模式执行此任务的代码如下:
        <%# Import Namespace="System.Collections.Generic" %>
      添加引用后,使用该名称空间中的任何内容都不再需要完全限定要访问的对象。注意,这个内联编码示例使用的是Import,不是Imports。在ASP.NET后台编码模型和Windows窗体中应使用Imports。
      在ASP.NET1.0/1.1中,如果要在程序的每个页面中使用同一个名称空间,必须在各个页面中分别使用Import语句。 ASPNET 3.5引入的web.config文件允许添加全局引用,来避免一一引用,如下所示:
<pages>
    <namespaces>
          <add namespace="System.Drawing" />
         <add namespace="Wrox.Books" />
    </namespaces>
</pages>

7.创建自己的名称空间

      在Visual Basic中,一个项目属性会默认为应用程序的根名称空间。访问项目属性,就可以确定项目的默认名称空间。为此,右击Solution Explorer窗口中的解决方案,会弹出程序集的属性页窗口。属性页的第一个选项卡Application在文档窗口中打开,如图:

VB 2010 (22)名称空间

       根据是在*还是子级上创建类,选择在代码中添加命令Namespace。在构成程序集的模块中创建*名称空间或者创建多个名称空间时,有一个技巧一可以删除默认的名称空间,然后使用命令Namespace在模块中定义新的名称空间,而不是重命名默认的名称空间。
      使用Namespace命令时,还要使用End Namespace命令。End Namespace必须放在名称空间中所有类的End Class标记后面,下面的代码演示了如何创建名称空间MyMetaNamespace,该名称空间包含一个类:
      Namespace MymetaNamespace
             class MyClass1
                  'code
             End class
      End Namespace

一个文件中可以有多个名称空间,还可以嵌套使用。

       使用自定义名称空间时,有时会因为命名冲突而难以使用其他的名称空间a为了解决这个问题,Visual Basic引入了Global关键字,作为.NET Framework类库最外层的根类。

VB 2010 (22)名称空间