名称空间点名称空间和嵌套名称空间之间的区别是什么
本文关键字:空间 区别 是什么 嵌套 之间 | 更新日期: 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;
因此,尽管上面三行包含嵌套的名称空间,但每一行实际上都是唯一名称空间的完全限定名称(就好像点是名称空间的一部分一样),从差异和用法方面了解这一点应该很有用。