为什么使用命名空间(1)
C#采用的是单一的全局变量命名空间,若有两个变量或函数的名称完全相同,就会出现冲突.
如定义了一个用户名变量userName,可能在调用某个库文件或别的程序代码中也定义了相同的变量名,此时便出现了冲突。
命名空间就是为解决C#中变量、函数的命名冲突而服务的。可以将同一名称的变量定义在不同的命名空间中。
如:张家有电视机,李家也有电视机,王家也有电视机,但因为它们属于不同的家庭,使用时只需将它们所属的家庭作为前缀名即可。
namespaceTcl
{
class Monitor
{
public void ListModels()
{
Console.WriteLine("供应Tcl以下型号的显示器:");
Console.WriteLine("14\",15\" \n");
}
}
}
namespaceCH
{
public class Monitor
{
public void ListModelStocks()
{
Console.WriteLine("以下是 长虹 显示器的规格及其库存量:");
Console.WriteLine("14\"=1000,15\"=2000, 17\"=3000");
}
static void Main(string[] args)
{
Tcl.MonitorobjTcl =new Tcl.Monitor();
MonitorobjCh= new Monitor();//不指定命名空间,使用CH.Monitor类
objTcl.ListModels();
objCh.ListModelStocks();
}
}
}
为什么使用using语句(2)
创建了命名空间后,如果命名空间中嵌套比较深,在外部引用它们时是十分不方便的,书写冗长.可以使用using语句来简化对它们的访问,
using语句的意思就好比是“我们需要对这个命名空间中的变量,所以不要每次总是要求对它们分类”。
什么情况下使用命名空间的别名
使用using语句可以简化对命名空间的引用,然而某些命名空间中很可能包含相同名称的类,在某些情况下却恰恰需要用到这些同名的类。
例如在.NET Framework类库中存在3个Timer类:System.Timer.Timer、System.Threading.Timer和System.Windows.Forms.Timer,我们需要使
用System.Timer.Timer在后台以固定的时间间隔检查所有应用程序或系统的状态,而使用System.Windows.Forms.Timer来在用户界面中显示一个
简单的动画,这时,开发人员就必须在类前面加上命名空间。
别名 解决代码冗长问题using Class1 = Namespace1.Test; //别名到类
using Ns2=Namespace2.NameSpace3.NameSpace4; //别名到命名空间
UsingClass2=Namespace2.Namespace3.Namespce4.TestnamespaceNamespace1
{
class Test
{
public Test()
{
System.Console.WriteLine("Hello from Namespace1.Test");
}
}
}
classMainClass
{
public static void Main()
{
Class1 obj1=new Class1();
Ns2.Test obj2=new Ns2.Test();
System.Console.Read();
}
}
namespace Namespace2
{
…
namespace Namespace3
{
…
namespace Namespace4
{
…
class Test
{
public Test()
{
System.Console.WriteLine
("Hello from Namespace2.Test");
}
}
}
}
}
别名解决问题冲突namespaceConsoleApplication10
{
namespace CH
{
public class Monitor
{
public void ListModelStocks()
{
Console.WriteLine("以下是 长虹 显示器的规格及其库存量:");
Console.WriteLine("14\"=1000,15\"=2000, 17\"=3000");
}
}
}
namespace Tcl
{
class Monitor
{
public void ListModels()
{
Console.WriteLine("供应Tcl以下型号的显示器:");
Console.WriteLine("14\",15\" \n");
}
}
}
}
namespacetest
{
using ConsoleApplication10;
class Test
{
public void Func()
{
Monitor m = new Monitor();
}
}
}