簡體   English   中英

C#中的命名空間和子命名空間

[英]Namespaces and subnamespaces in C#

初學者關於 C# 的問題。

在每個程序中,我必須包含多個命名空間,例如:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

為什么我必須包括:

using System.Collections.Generic;
using System.Linq;
using System.Text;

...因為它們包含在第一個中:

using System;

先感謝您!

因為嵌套命名空間不包含在父命名空間中。 有關詳細信息,請參閱使用指令文檔

using指令不允許您訪問嵌套在您指定的命名空間中的任何命名空間。

SystemSystem.IO命名空間是不同的。

您可以將“子命名空間”視為對象模型中的父子關系。 如果您可以訪問“Car”對象並不意味着您可以訪問汽車的輪子。

System是一個巨大的命名空間,包含數百個嵌套命名空間和數千個類。 您應該單獨指定所有嵌套的命名空間,以說明您對模塊的哪個部分感興趣。

SystemSystem.Text是兩個不同的命名空間。 System.Text似乎是System的一部分,這是我們作為程序員放入其中的語義。 平台視圖中沒有嵌套命名空間之類的東西;

但即使情況並非如此,如果你有

namespace MySystem{
   namespace Foo{
       class Bar {...}
   }

   class Bar{...}
}

using MySystem;
class MyClass{
    private Bar _myBar; //Which one is it MySystem.Foo.Bar or MySystem.Bar?     
}

想象這些命名空間與這些類(姓氏是一個類):

  • ABClass1
  • A.Class2

現在你有以下內容:

using A - 允許您直接引用 Class2...但不能引用 Class1。

using AB - 允許您直接引用 Class1 而不是 Class2。

如果你想在你的代碼中直接引用這兩個類,你需要兩個 using。

由於您是初學者,讓我澄清一下 C# 中的namespace和 Java 中的package是不同的東西。 無需合並它們。

並非 .net 中的所有類都在一個大容器中。這樣做會增加類名沖突的可能性,而且它一開始看起來並不好。命名空間是一種容器,它試圖保持您的庫清潔並使其更有意義。擁有一個FTP類和String類放在一個容器下,邏輯上沒有任何意義。它們做兩件不同的事情,應該放在不同的容器中。

命名空間也可以嵌套。有時一個命名空間幾乎可以只有另一個命名空間,沒有任何類。所以要訪問一個類,您需要在使用它之前限定完整的命名空間。

在你的情況下,你使用不同的類,它們位於不同的容器上。所以如果你需要它們,你需要用它們的命名空間來限定它們。

只是一個附加的例子,讓你清楚地理解。

不能通過調用父命名空間來訪問子命名空間

Namespace Main  //only code and classes are accessible
{
  //code for Main Namespace
  Namespace subMain     //only code and classes are accessible
  {
     //code for subMain
     Namespace verySubMain  //only code and classes are accessible
     {
        //code for verySubMain
     }
     Namespace otherVerySubMain  //only code and classes are accessible
     {
        //code for otherVerySubMain
     }
  }
}

如果您想在沒有 using 語句的情況下訪問 System.Text 中的類,則每次您希望使用它時都必須使用 Text."類/函數的名稱"。

這樣你就可以調用“類/函數的名稱”。

不確定您是否是初學者,但這是我能描述的最簡單的方法。

暫無
暫無

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

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