C# 7.0 核心技术指南 (56):C#语言基础 2.12.3

阅读数:7 2019 年 12 月 4 日 17:14

C# 7.0核心技术指南(56):C#语言基础 2.12.3

(命名空间中的规则)

内容简介
本书前三章将集中介绍 C#语言。首先介绍基本的语法、类型和变量。而后会介绍一些高级的特性,如不安全代码以及预处理指令。如果你是 C#语言的初学者,请循序渐进地阅读这些章节。
其余各章则涵盖了.NET Framework 的核心功能,包括 LINQ、XML、集合、并发、I/O 和网络、内存管理、反射、动态编程、特性、安全、应用程序域和原生互操作性等主题。第 6 章和第 7 章是后续主题的基础,除这两章之外,其余各章可以按照需要以任何顺序阅读。LINQ 相关的三个章节好按顺序阅读。其中的一些章节需要一些并发相关的知识,这些知识将在第 14 章中介绍。

2.12.3.1 名称范围

外层命名空间中声明的名称能够直接在内层命名空间中使用。以下示例中的 Class1 在 Inner 中不需要限定名称:

复制代码
namespace Outer
{
class Class1 {}
namespace Inner
{
class Class2 : Class1 {}
}
}

使用统一命名空间分层结构中不同分支的类型需要使用部分限定名称。在下面的例子中,SalesReport 类继承 Common.ReportBase:

复制代码
namespace MyTradingCompany
{
namespace Common
{
class ReportBase {}
}
namespace ManagementReporting
{
class SalesReport : Common.ReportBase {}
}
}

2.12.3.2 名称隐藏

如果相同类型名称同时出现在内层和外层命名空间中,则内层类型优先。如果要使用外层命名空间中的类型,必须使用它的完全限定名称。

复制代码
namespace Outer
{
class Foo { }
namespace Inner
{
class Foo { }
class Test
{
Foo f1; // = Outer.Inner.Foo
Outer.Foo f2; // = Outer.Foo
}
}
}

所有的类型名在编译时都会转换为完全限定名称。中间语言(IL)代码不包含非限定名称和部分限定名称。

2.12.3.3 重复的命名空间

只要命名空间内的类型名称不冲突就可以重复声明同一个命名空间:

复制代码
namespace Outer.Middle.Inner
{
class Class1 {}
}
namespace Outer.Middle.Inner
{
class Class2 {}
}

上述例子也可以分为两个不同的源文件,并将每一个类都编译到不同的程序集中。

源文件 1:

复制代码
namespace Outer.Middle.Inner
{
class Class1 {}
}

源文件 2:

复制代码
namespace Outer.Middle.Inner
{
class Class2 {}
}

2.12.3.4 嵌套的 using 指令

我们能够在命名空间中嵌套使用 using 指令,这样可以控制 using 指令在命名空间声明中的作用范围。在以下例子中,Class1 在一个命名空间中可见,但是在另一个命名空间中不可见:

复制代码
namespace N1
{
class Class1 {}
}
namespace N2
{
using N1;
class Class2 : Class1 {}
}
namespace N2
{
class Class3 : Class1 {} // Compile-time error
}

C# 7.0核心技术指南(56):C#语言基础 2.12.3

购书地址 https://item.jd.com/12681788.html?dist=jd

评论

发布