簡體   English   中英

命名空間點命名空間和嵌套命名空間有什么區別?

[英]What is the difference between namespace dot namespace and nested namespace?

之間有什么區別:

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;

因此,盡管上述三行包含嵌套的命名空間,但每一行實際上都是唯一命名空間的完全限定名稱(就好像點是命名空間的一部分),這對於了解差異和用法應該很有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM