3.4 使用命名空间

  在应用程序开发过程中,类和类成员的名称是丰富的,为了描述一个具体的对象,需要对类成员进行设计。在设计类和类成员过程中,不可避免的类成员中的方法或者类的名称会出现相同的情况,这样就会使类的使用变得复杂,代码的混乱造成可读性降低,使用命名空间可以解决此类难题。

3.4.1 为什么要用命名空间
  正如引言中所述,在设计类和类成员的过程中,不可避免的,类或类成员使用的名称都是相同的,这样就让开发更加复杂,代码可读性降低。使用命名空间能够解决此类问题,示例代码如下所示。
+展开
-C#
namespace Programmer1//程序员1的命名空间
{
    public class Animal // Programmer1的Animal类
    {
        public string type;//声明字段
    }
}
namespace Programmer2//程序员2的命名空间
{
    public class Animal// Programmer1的Animal类
    {
        public string type;//声明字段
    }
}

  上述代码中,创建了同样的两个类Animal以及两个类成员type。在主函数中,开发人员很难区分到底是使用哪一个类进行对象的创建和初始化,因为通常情况下,每个程序员可能只负责该程序员的模块或者代码,当整合的时候,代码就会变得难以调用或难以维护。

  正如某个学校有两个班级,每个班级里都有一个叫小明的人。如果在早操大会上点名小明,那么这两个小明都不知道点的是谁,如果指定一下,说是一班的小明,那么二班的小明就不会认为是自己了。命名空间就起到了这个区分的作用,在主函数中,可以显式的对类进行访问,示例代码如下所示。
+展开
-C#
namespace Programmer1//程序员1的命名空间
{
    public class Animal // Programmer1的Animal类
    {
        public string type;//声明字段
    }
}
namespace Programmer2//程序员2的命名空间
{
    public class Animal// Programmer2的Animal类
    {
        public string type;//声明字段
    }
}
namespace MyClass//主程序的命名空间
{
    class Program//主程序类
    {
        static void Main(string[] args) //主程序入口方法
        {
            Programmer1.Animal bird = new Programmer1.Animal();//说明是程序员1的命名空间下的Animal
            bird.type = "bird"; //初始化字段
        }
    }
}

  上述代码中很好的解决了类名称相同的情况下开发和维护的困难。在执行代码Programmer1.Animal bird = new Programmer1.Animal()时,编译器就能够知道Animal类是属于命名空间Programmer1的,也就不会和命名空间Programmer2的Animal类混淆。

3.4.2 创建命名空间
  程序开发中,创建和良好的使用命名空间,对开发和维护都是有利的,命名空间语法格式如下所示。
+展开
-C#
namespace 命名空间

    //类以及类成员
}

  namespace声明了一个命名空间,名称取命名空间的名称,在由“{”“}”大括号内引用的类成员来创建类。同样也可以创建两层或多层命名空间,示例代码如下所示。
+展开
-C#
namespace Programmer1//单层命名空间
{
    public class Animal // Programmer1的Animal类
    {
        public string type;//声明字段
    }
}
namespace Programmer2//双层命名空间
{
    namespace Programmer3// Programmer2的命名空间
    {
        public class Animal// Programmer3的Animal类
        {
            public string type;//声明字段
        }
    }
}

  同样,命名空间成员也通过“.”号访问,例如访问双层命名空间的类的字段时,可以通过Programmer2. Programmer3.Animal.type进行访问。

3.4.3 分层设计中使用命名空间
  从上一节中可以看出,命名空间的使用可以对相同名称的类进行较好的规范。但是,在同一层代码块中,似乎很少使用命名空间来规范。而在分层设计中,命名空间的使用是非常必要的,虽然初学者不需要详细的了解分层设计,但是分层设计在软件开发过程当中是非常必要的,使用Visual Studio 2008能够轻松的创建分层构架软件。

  在解决方案资源管理器中选择当前解决方案,右击【解决方案】项目,在下拉菜单中选择【添加】选项,在【添加】的下拉菜单中选择【新建项目】选项。若无法在解决方案管理器中看见解决方案,则可以在菜单栏的【工具】选项中选择【选项】菜单并在弹出窗口中找到【项目和解决方案】窗口,在窗口中选中【总是显示解决方案】复选框即可配置解决方案管理器,如图3-2所示。
  为了能够在应用程序中进行分层开发,需要创建类库用于类的规划,创建一个“类库”项目,如图3-3所示。

图3-2 显示解决方案

图3-3 创建类库
  输入项目名称,创建了类库后,命名空间就是创建的项目名称,系统会自动创建一个类Class1,读者可自行修改类名称,并创建字段和方法,示例代码如下所示。
+展开
-C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;//使用系统命名空间
namespace MyNamsSpace//当前程序命名空间
{
    public class Class1 //当前类名称
    {
        public string output()//输出字符串方法
        {
            return "另一个项目的命名空间"; //返回值
        }
    }
}

  在原有的项目中,必须声明使用用户创建的命名空间,才可以访问命名空间类的类并创建对象。正如.NET中为我们提供的系统命名空间一样,也是通过使用using来声明的。首先需要添加引用,右击项目,在下拉菜单中选择【添加引用】选项,在添加引用窗口选项卡上选择【项目】标签并引用相应类库,如图3-4所示。

图3-4 添加引用

  单击【确定】按钮后,在代码头部书写using命名空间则可以使用类库项目的命名空间并访问方法和成员,代码如下所示。
+展开
-C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;//系统命名空间的使用
using MyNamsSpace;//自定义命名空间的使用
namespace MyClass
{
    class Program
    {
        static void Main(string[] args)
        {
            Class1 myclass = new Class1();//创建对象,该类完整名称是MyNameSpace.MyClass
        }
    }
}

  上述代码中引用了MyNameSpace命名空间,并访问了命名空间中的类,通过该类创建了一个对象。分层设计是软件设计中常用的设计方法,同设计模式一样,分层设计也是为了规范软件的开发和维护、降低软件开发成本、将软件模块化。但是过多的使用命名空间和分层设计也会造成层次过多无法维护的相反效果。

注意:当使用另一个命名空间的方法时,如果在本程序段中没有同名的方法,可以直接使用方法名称,而如果当前程序中包含了同名的方法,则需要指定命名空间名。

加支付宝好友偷能量挖...


评论(0)网络
阅读(94)喜欢(0)Asp.Net/C#/WCF