首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++与C#命名空间层次结构的比较与对比

C++与C#命名空间层次结构的比较与对比
EN

Stack Overflow用户
提问于 2014-12-16 21:35:49
回答 2查看 1.9K关注 0票数 1

我知道C#支持命名空间嵌套,C++也支持,两者都允许这样的代码.

代码语言:javascript
复制
namespace A {
    namespace B {
        ...
    }
}

来自C++背景,深入到C#世界中,我一直在思考如何通过所有必须发出的使用.NET的指令对组件进行分层嵌套,例如

代码语言:javascript
复制
using System.Collections;
using System.Collections.Generic;

我确信微软打算并设计这些库是按逻辑层次组织的,但如果没有查看源代码,我无法验证System.Collections.Generic是否具有嵌套的集合命名空间,但我假设是这样的,而且它是用A和B所见的名称空间嵌套完成的。现在,当我开始在我自己的源代码中编写东西并声明如下代码时,它就完成了。

代码语言:javascript
复制
namespace C.D {
    ...
}

就等级制度而言,我到底取得了什么成就?我是否在代码中引入了一个奇异的命名空间标识符"C.D“,其中'.‘仅仅是一种友好的方法,可以根据代码结构来暗示可能存在或不存在的层次结构,还是我是否隐含地声明了两个名称空间" C“和"D”,其中D嵌套在C中?我在编写DevelopmentApplications名称空间到C#代码库时遇到了这个问题,它严格地包含用于增强软件以帮助其开发的所有开发工具。在这些工具中,我从未声明过一个独立的名称空间DevelopmentApplications (这是我必须在C++中做的).

代码语言:javascript
复制
namespace DevelopmentApplications
{
   ...
}

相反,...but总是创建类似于

代码语言:javascript
复制
namespace DevelopmentApplications.MyDevelopmentApp
{
   ...
}

我知道这个领域是一些人困惑的原因,因为在下面的问题中,作者很难理解Foo.Bar.Baz和Foo.Bar之间的关系。还有一个相反的问题,一个C#开发人员进入C++土地,这让我们对这个问题有了一些了解。

我想,另一种声明问题的方法是,在C++中,使用'::‘操作符来完全限定一个类型,可以保证在某个命名空间层次结构中,声明类型的代码是嵌套的。但是在C#中使用'.‘运算符要完全限定某种类型,该类型是否也存在于某种深嵌套的命名空间层次结构中?在这里,我假设C#使用像A.B.C这样的名称空间并不一定需要A、B和C之间的分层关系,或者A、B或C甚至作为单独的名称空间存在。

如果有人能够找到或知道有关这个语法的相关语言规范,我很乐意阅读它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-16 21:45:04

C# 4.0规范的第9.2节指出:

命名空间声明的限定标识符可以是单个标识符或由“”分隔的标识符序列。代币。后一种形式允许程序定义嵌套的命名空间,而无需对多个名称空间声明进行词汇嵌套。例如, 命名空间N1.N2 {A类{B {} } 在语义上等同于 名称空间N1 {命名空间N2 {A类{B}

你说:

在这里,我假设C#使用像A.B.C这样的名称空间并不一定需要A、B和C之间的分层关系,或者A、B或C甚至作为单独的名称空间存在。

这种假设是错误的。命名空间A.B.C必然包括全局命名空间中的命名空间A、命名空间A中的命名空间B和命名空间B中的命名空间C

票数 7
EN

Stack Overflow用户

发布于 2014-12-16 21:46:06

关于名称空间的事实 in C#:

  1. 他们是集体的。您可以在几个不同的源文件中声明一个名称空间,编译器会将它们都视为相同的名称空间。
  2. 您可以相互嵌套名称空间,但是在另一个源文件中声明嵌套的命名空间就更常见了。
  3. 有一个全局命名空间,每个类都可以作为global::访问
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27514352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档