C#命名空间(二)

简介:     命名空间(namespace)定义了一个声明区域,它提供了将一组名称与另一组名称进行区别的方法。本质上,就是使得一个命名空间中的名称不会与另一个命名空间中相同的名称冲突。前面的程序中我们使用了.NET的命名空间System。

    命名空间(namespace)定义了一个声明区域,它提供了将一组名称与另一组名称进行区别的方法。本质上,就是使得一个命名空间中的名称不会与另一个命名空间中相同的名称冲突。前面的程序中我们使用了.NET的命名空间System。

     在过去的几年里,在类库、第三方控件及用户代码中出现了大量的类、方法、属性,因此命名空间就显得十分重要了。如果不区分命名空间,那么索引的名称就只能共享同一个全局空间,进而不可避免地引发命名冲突。比如,如果用户在自己的命名空间中定义了类Sort,它可能与第三方类库中的Sort类相冲突。

   幸运的是,命名空间可以避免这样的冲突发生,它可以限制声明在其中的名称的可见性。

 

1 命名空间的声明

 使用namespace关键字可以声明一个命名空间,其基本形式为:

  1. namespace ns_name

  2. {

  3. //members


  4. }

 

   其中,ns_name是命名空间的名称。所有定义在命名空间中的内容都被限制在该命名空间的范围内。因此,命名空间实际上定义了一个范围。

    members是命名空间的成员列表,在命名空间中用户可以定义类、结构体、委托、枚举、接口或另一个命名空间等成员。

   命名空间的作用在于,在一个命名空间中声明的名称不会与其他命名空间中声明的同名的名称产生冲突。

2 using命令

如果程序需要频繁地引用某个命名空间中定义的成员,那么如果每次都指定命名空间就很麻烦。使用using命名可以解决这个问题。前面的例子中我们使用using来引入.NET的命名空间System。此外,用户定义的命名空间也可以使用using引入。using指令有两种形式,如下:

  1. using ns_name;//形式一




  2. using alias=ns_name; //形式二


  3. 其中ns_name是命名空间的名称,alias是为命名空间指定的别名。例如:

  4. using Counter;

  5. using CC=Counter;

3 嵌套的命名空间

一个命名空间可以声明在另一个命名空间中,称为命名空间的嵌套。例P7_3。

另外,使用单个namespace也可以嵌套命名空间,方法是使用句点将每一个命名空间隔开。例如:

namespace NS1.NS2

{//members}

例P7_3的另一种表示形式。

4 使用命名空间限定符::

 

   尽管命名空间可以帮助避免命名冲突,但不能完全消除这种冲突。如果在两个不同的命名空间中声明了同名的成员。如果两个不同的命名空间中声明了同名的成员,而应用程序又同时引入了这两个命名空间,就会发生名称冲突。在这种情况下,我们可以使用命名空间限定符::来显示地指定希望使用的命名空间。命名空间限定符::是C#2.0中新引入的功能。

  1. ::运算符的基本形式为:

  2. namespace_alias::identifier

  3. 其中,namespace_alias是命名空间的别名,identifier是该命名空间中成员的名称。

    例P7_4中创建了两个命名空间,Counter1和Counter2。这两个命名空间中都定义了CountDown类,并且都被using语句引入程序。因此,在Main方法中使用下面的语句创建对象cd的时候就会出现错误,其原因在于两个命名空间Counter1和Counter2中都定义了类CountDown,并且都被引入到程序中。在使用下面的语句创建CountDown类型的对象cd时,到底该使用哪一个命名空间中的类CountDown,编译系统无法确定,从而产生二义性错误。为解决这样的错误,就必须使用::运算符来实现。

CountDown cd=new CountDown();

使用运算符::,必须先为要限定的命名空间定义一个别名。接着使用别名来限定具有二义性错误的元素即可。

相关文章
|
7月前
|
C# 开发者
C# 10.0中的文件范围命名空间:简化代码组织的新方式
【1月更文挑战第18天】C# 10.0引入了文件范围的命名空间,这是一种新的语法糖,用于更简洁地组织和管理代码。文件范围命名空间允许开发者在每个文件的基础上定义命名空间,而无需显式使用花括号包裹整个文件内容。本文将深入探讨文件范围命名空间的工作原理、使用场景以及它们为C#开发者带来的便利。
|
7月前
|
编译器 C# 开发者
C# 10.0中的全局`using`指令:简化命名空间引用的新方式
【1月更文挑战第4天】本文介绍了C# 10.0中引入的全局`using`指令,该指令允许开发者在项目级别统一管理命名空间引用,从而消除源文件中重复的`using`语句。全局`using`指令通过减少冗余代码、提高可维护性和统一命名空间管理,为开发者带来了更高效的编码体验。文章详细解释了如何实现全局`using`指令,并探讨了其在实际项目中的优势和适用场景。
|
3月前
|
C# 容器
C#中的命名空间与程序集管理
在C#编程中,`命名空间`和`程序集`是组织代码的关键概念,有助于提高代码的可维护性和复用性。本文从基础入手,详细解释了命名空间的逻辑组织方式及其基本语法,展示了如何使用`using`指令访问其他命名空间中的类型,并提供了常见问题的解决方案。接着介绍了程序集这一.NET框架的基本单位,包括其创建、引用及高级特性如强名称和延迟加载等。通过具体示例,展示了如何创建和使用自定义程序集,并提出了针对版本不匹配和性能问题的有效策略。理解并善用这些概念,能显著提升开发效率和代码质量。
124 4
|
6月前
|
C#
C# 命名空间和 using 指令详解
C# 命名空间和 using 指令详解
|
编译器 C#
C#中导入其它自定义的命名空间
c#中怎么导入其它自定义的命名空间首先要确保已经导入了想要导入的自定义的命名空间。如上图这时编译器应该会报错,此时就需要手动去添加引用了,cs文件默认没有添加引用,只是加载了想要导入的命名空间,但是没有添加引用,所以需要自己要手动添加引用。切记!然后会有一个对话框选择你想引用的命名空间,点击确定即可。注意:一般而言,C#中如果没有改变那么一般项目的类名都默认是Program,在引用时需要注...
113 1
C#中导入其它自定义的命名空间
|
小程序 C#
C#工程建立后修改工程文件名与命名空间
使用之前的项目做二次开发,项目快结束的时候,需要把主项目的名称修改成我们想要的。 之前从来没有这么干过,记录一下。
118 0
C#编程-109:命名空间及基础概念
C#编程-109:命名空间及基础概念
106 0
C#编程-109:命名空间及基础概念
|
存储 开发框架 前端开发
C#特性 System.ComponentModel命名名空间属性方法大全,Syst em.ComponentModel命名空间的特性
目录: System.ComponentModel 特性命名空间与常用类 System.ComponentModel.DataAnnotations ComponentModel - Classes 类 ComponentModel - Structs 结构体 ComponentModel - Interfaces 界面 ComponentModel - Enums 枚举 ComponentModel - Delegates 委托
275 0
C#特性 System.ComponentModel命名名空间属性方法大全,Syst em.ComponentModel命名空间的特性
|
C# Docker 容器
C#方法与参数 常见命名空间汇总 using的使用main方法参数
C#方法与参数 常见命名空间汇总 using的使用main方法参数
146 0
C#方法与参数 常见命名空间汇总 using的使用main方法参数
|
XML 开发框架 .NET
C#方法与参数 常见命名空间汇总 using的使用main方法参数
C#方法与参数 常见命名空间汇总 using的使用main方法参数
241 0
C#方法与参数 常见命名空间汇总 using的使用main方法参数