在C#中命名空间有很大的作用,它指明了你所用到的类来自哪个命名空间中,例如Mail类在命名空间using System.Net.Mail和using System.Web.Mail都存在,如果你在程序当中引用了这两个空间,但是在创建Mail类的对象时候没有指明使用的是哪个空间中的类那么就会出现错误:
using System.Net.Mail;
using System.Web.Mail;
public partial class Dmanage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
MailMessage mm = new MailMessage();
mm.From = "liufch@163.com";
}
}
在编译当前代码的时候出现下面的错误:“MailMessage”是“System.Net.Mail.MailMessage”和“System.Web.Mail.MailMessage”之间的不明确的引用
当然在进行大型项目的开发过程中需要维护开发人员编写的类库,引用命名空间可以方便管理大家在命名名字一样的类的时候可以指明具体是哪个类。下面来看下一个简单的命名空间
namespace demostrator//命名空间的名字
{
public class Demo //命名空间的类
{
private string name;
public Demo()//构造函数
{
name = "luXiaofeng";
}
public Demo(string name) //构造函数
{
this.name = name;
}
public string getname()
{
return this.name;
}
}
public class Myname //命名空间的类
{
private string name;
public Myname()//构造函数
{
name = "bianceng";
}
public Myname(string name) //构造函数
{
this.name = name;
}
public string getname()
{
return this.name;
}
}
}
由于name是私有的,所以在其他类中初始化本类后如果要获取name就得使用这个函数public string getname()
下面就在初始化一个对象:
using demostrator;//引用自定义的空间
{
protected void Page_Load(object sender, EventArgs e)
{
demostrator.Demo mydemo = new Demo();//创建对象
demostrator.Myname name = new Myname();//创建对象
Response.Write("in Demo default name is " + mydemo.getname());
Response.Write(" ___________________");
Response.Write("in Myname default name is " + name.getname());
}
}
页面输出的结果是:
以上结果是在web页面中显示的。
二、命名空间嵌套
上一节中讲到命名空间在类的对象实例化的过程中可以防止类的冲突,如果两个类名一样的类包含在两个不同的命名空间中,那么在实例对象的创建的时候系统就会提示你该选择用哪个类.而所谓命名空间嵌套是指在一个命名空间嵌套中里还可以包含另一个命名空间嵌套。下面用一个简单的例子来说明:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Collections.ObjectModel;
using System.Collections;
using System.Reflection;
namespace Csharp//最外面的命名空间
{
classProgram
{
staticvoidMain(string[] args){
Csharp.Man Mike = new Csharp.Man();//创建namespace Csharp中的Man
Counter.Monkey Wukong = newglobal::Csharp.Counter.Monkey();
//创建namespace Counter中的.Monkey类对象
Counter.Nestedspace.Man Jakson = new Counter.Nestedspace.Man();
//创建namespace Counter中的Man类对象,必须以上面的方法来区分两个Man类
Console.Write("Csharp.Man's name is{0}", Mike.name);
Console.WriteLine("Counter.Monkey's name is {0}", Wukong.name);
Console.WriteLine("Counter.Nestedspace.Man's name is{0} ", Jakson.name);
//输出三个对象的名字
Console.ReadKey();
}
}
namespace Csharp
{
classMan
{
publicstring name;
public Man()
{
this.name = "name in Man";
}
}
}
namespace Counter
{
classMonkey
{
publicstring name;
public Monkey()
{
this.name = "name in Monkey";
}
}// namespace Nestedspace嵌套在namespace Counter里面
namespace Nestedspace
{
classMan
{
publicstring name;
public Man()
{
this.name = "nested name";
}}}}}
}
输出的结果:
三、同一个命名空间两个类的同名方法
现在将下面的方法加入到两个Man类中,看下它们的对象调用这个方法后的结果是
public void ChangeName(string newName)
{this.name = newName;}
Mike.ChangeName("刘德华"); Jakson.ChangeName("Mike Jachson")
四.给命名空间起别名
在程序的引用开始:
using NewName = Csharp.Csharp;
别名 原来的名字
下面看一个简单的例子,在上面的程序中新增代码:
using NewName = Csharp.Csharp;//引用
Console.WriteLine("using NewName = Csharp.Csharp;");
NewName.Man NewMan = new NewName.Man();//同样建立Mana对象
Console.WriteLine("NewMan 's name is__{0}", NewMan.name);
NewMan.ChangeName("郭靖");
Console.WriteLine("NewMan 's name is__{0}", NewMan.name);
程序运行的结果: