2010-02-26 70 views
4

在命名空間中聲明類型但不在類中的可能用法是什麼。C# - 名稱空間中的類型聲明

對於前:

namespace Test 
{ 
    public delegate void Ispossible(); 
} 

這是有效&不會產生任何編譯錯誤,但我想不出爲什麼我們會宣佈它,而不是一個類的內部這樣。

+0

問題是關於特別聲明代表的問題,還是如您所寫,一般只是「類型」? – 2010-02-26 17:21:44

+0

我想知道這兩種情況。 – SoftwareGeek 2010-02-26 17:23:23

回答

6

命名空間是.NET中的高級組織單位。

在範圍內聲明類型類(但與所有情況一樣,這不是100%的規則),因爲它可以使類型更加緊密耦合並且更難以找到。但是通常情況下,.NET生態系統中的所有內容都包含在命名空間中。但是,.NET生態系統中的所有內容都包含在命名空間中。

你的例子有助於重用;如果它屬於一個類,那麼它就意味着該代表只能被該類使用,並且可能導致不必要地引入重複的代表。


更新:當僅有的類型的命名空間似乎並沒有多大用處了一把工作,但沒有他們的任何規模的項目將是一個組織的災難。想象一下沒有命名空間的.NET框架,其中一個(可能已經過時)count將框架放在3500類型中。

命名空間就像文件夾或抽屜;一些鬆散的論文很容易管理,但如果你有很多頁面,那麼找到你需要的論文會變得很痛苦。

給文檔的讀取,它很短,並且不是非常複雜的(無論是命名空間),但有幾個像樣點MSDN - Namespace (c#)

4

如果它是一個多用途的代表,如Func<TResult>,EventHandler這是不涉及到一個特定的類,那麼你應該直接在名稱空間中聲明它。

2

你的措辭(「這可能是一個命名空間中可能使用聲明的類型,但不在一個類中「),表明你在」類型「和」類「之間作了區分。空無一人。一個類是一個類型。

那麼,在什麼條件下你想直接在命名空間中聲明一個類(即它最常用的方式)?這些相同的原因適用於其他類型的。

+0

謝謝,但我指的是事件,代表等類別以外的其他類型。 – SoftwareGeek 2010-02-26 19:51:44

+0

重新閱讀我的最後一句話。 – 2010-02-26 20:51:37

0

命名空間和類都可以用來組織層次結構中的信息。但是,名稱空間允許通過dll邊界分佈定義,但類不會。類也需要在類名前放置類名,但命名空間允許使用關鍵字「using」。

因此,如果您想要在不同dll中的一個名稱空間中定義委託,請使用名稱空間。

如果你想強迫人們用任何其他名稱來前綴類型名稱而不能依賴名稱空間上下文,那麼你可以使用類。