[英]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指令不允許您訪問嵌套在您指定的命名空間中的任何命名空間。
System
和System.IO
命名空間是不同的。
您可以將“子命名空間”視為對象模型中的父子關系。 如果您可以訪問“Car”對象並不意味着您可以訪問汽車的輪子。
System
是一個巨大的命名空間,包含數百個嵌套命名空間和數千個類。 您應該單獨指定所有嵌套的命名空間,以說明您對模塊的哪個部分感興趣。
System
和System.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.