名称空间点名称空间和嵌套名称空间之间的区别是什么

本文关键字:空间 区别 是什么 嵌套 之间 | 更新日期: 2023-09-27 18:25:12

之间有什么区别吗

namespace Outer.Inner
{
}

namespace Outer
{
    namespace Inner
    {
    }
}

在C#中?

名称空间点名称空间和嵌套名称空间之间的区别是什么

假设您没有在Outer命名空间中放入任何其他声明或using指令,则根本没有区别。

考虑到您很少在一个文件中的多个名称空间中声明成员,我建议使用第一种形式——除此之外,它还可以节省一定程度的缩进。请注意,"新行开头的括号"是C#的一种更传统的括号样式,不过:

namespace Outer.Inner
{
    ...
}

没有任何区别,它们是一样的,但第一个更常见。

没有,但第一个变体在c#代码中使用最多
第二个变体是你必须用C++编写的,我不确定我是否在真正的C#代码中见过它。

它们都与其他答案和此处的文档所指出的相同。

此外,一个命名空间是在另一个命名空间中定义的,这并不意味着它与父命名空间有任何特殊关系,也不意味着它带来了与父命名空间相关的任何特定功能,或者它依赖于父命名空间。除了在父级中定义(在using语句的上下文中引入它们)之外,没有其他关系。

因此,需要注意的是,如果包含父名称空间,并不意味着现在可以访问子名称空间。请参阅解释这一点的答案。

因此,尽管它们是嵌套的,但出于所有实际目的,每个命名空间都是自己独立的东西,无论它是最顶端的父命名空间还是子命名空间。若要包含嵌套名称空间,always需要使用嵌套名称空间的完全限定名称

因此,点(.)几乎成为命名空间的一部分,就像你可以将gmail-id作为first.last@gmail.com

为什么嵌套

实际上,只是将它们逻辑地放置在层次结构中,以便于组织它们,但您可以将名称中的点视为命名空间的一部分(用于所有实际用途)。

例如,您可以定义这个:

namespace Outer.Inner
{
   class MyClass{}
}

但如果你愿意,你可以出于所有实际目的将上面的重命名为以下内容:

namespace Solar
{
   class MyClass{}
}

在这两种情况下,如果您想使用MyClass,则需要包含定义类的命名空间的完全限定名称,即:

using Outer.Inner;

using Solar;

通过查看C#库名称空间可以更好地理解和总结这一点。

using System;
using System.Threading;
using System.Threading.Tasks;

因此,尽管上面三行包含嵌套的名称空间,但每一行实际上都是唯一名称空间的完全限定名称(就好像点是名称空间的一部分一样),从差异和用法方面了解这一点应该很有用。