[英]Confusion about C# Namespace Structure
我對C#中的Namespace結構感到困惑,我是C#和WPF的新手
當我創建一個WPF的新項目時,默認情況下這些命名空間包含在頂部
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
我很難理解這些結構。 我明白那個
using System;
意味着我指的是System命名空間
但其他人喜歡什么呢
using System.Text;
那意味着什么?
此外,如果“Text”嵌套在“System”中,為什么只有“using System”包含所有命名空間? 我們是否應該明確包含我們使用的每個命名空間?
using System.Text;
意味着我正在使用一個名為“System.Text”的命名空間,或者我正在使用嵌套在“System”命名空間內的“Text”命名空間?
后者。 您正在使用嵌套在“System”命名空間內的“Text”命名空間。
請注意,當你說
namespace Foo.Bar.Blah
{
class C
{
...
這只是一種簡短的寫作方式
namespace Foo
{
namespace Bar
{
namespace Blah
{
class C
{
...
命名空間只有“簡單”的名稱。
我們應該為每個使用的命名空間都有一個明確的'using'指令嗎?
通常你會這樣做,是的。 在某些情況下,您可能不想這樣做。 例如,如果您有兩個名稱空間,它們都包含同名的類型,並且您希望使用兩個名稱空間中的類型; 在這種情況下,擁有兩個名稱空間的“使用”可能會讓人感到困惑。 此外,“使用”帶來了擴展方法; 如果有,你不想綁定,不包括包含它們的命名空間擴展的方法。
如果“Text”嵌套在“System”中,為什么只有“using System”包含所有命名空間?
我不明白這個問題的措辭。 我想也許你在問:
為什么
using System;
不要將簡單名稱Text
解析為嵌套命名空間?
也就是說,為什么這不起作用:
namespace Foo
{
namespace Bar
{
class Blah {}
}
}
在另一個文件中:
using Foo;
class Abc : Bar.Blah {}
using Foo;
僅包含Foo內直接聲明的類型 。 它不會引入直接在Foo中聲明的名稱空間 。 C#的設計者認為將名稱空間“納入范圍”這樣過於混亂; 通常人們使用using
指令將類型 “帶入范圍”。
對於計算機而言,命名空間基本上不是分層的。 System.Text
下的類型(例如System.Text.StringBuilder
) 不被認為是在System
- 因此如果您想要兩者中的類型,則需要單獨列出它們:
using System;
using System.Text;
就編譯器而言,它們被認為是層次結構的唯一時刻 - 無論如何,我能想到的是,當你在聲明的東西中使用它時:
namespace Foo.Bar.Baz
{
class Test
{
}
}
在Test
,就好像你已經導入了Foo
, Foo.Bar
和 Foo.Bar.Baz
。
當然,命名空間確實從人類理解的角度形成層次結構 - 這使得查找事物變得容易。 但是,編譯器和運行時總體上不使用事物的分層視圖。
我們是否應該明確包含我們使用的每個命名空間?
是,或完全限定類型名稱。
2命名空間使用
using System;
using System.Text;
是完全獨立的。 他們的名字暗示了一種關系,但從外部可以被認為是象征性的名稱空間。
只有第一次使用時,才能使用System.Text
成員。
並且您不需要第一個才能使用第二個。
只有當您編寫屬於嵌套命名空間的代碼時,才會看到一些效果。
namesapce A
{
namespace B
{
class Foo { }
}
namespace C
{
class Bar { private B.Foo f; } // B is a 'relative' ns
}
}
using System.Text
進口的所有聲明里System.Text
,但沒有在它的文件夾中。 沒有System.Text.*
等同於Java,
就像想象中的語言一樣。
處理命名空間的一種簡單方法是正常編寫代碼和CTRL +。 在未定義的關鍵字上告訴VS.NET自動為您添加using
引用。
您正在訪問嵌套在系統命名空間內的文本命名空間。 是的,您需要包含您使用的每個命名空間。
命名空間結構可能如下所示:
namespace Parent
{
namespace Child
{
public class ChildClass
{
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.