2012-02-12 52 views

回答

55

來源:http://www.javacamp.org/javavscsharp/namespace.html


的Java

包是用來組織文件或公共類型以避免類型衝突。包結構可以映射到文件系統。

system.security.cryptography.AsymmetricAlgorithm aa; 

可能被替換:

import system.security.Crypography; 
class xxx { ... 
AsymmetricAlgorithm aa; 

沒有爲包沒有別名。您必須使用導入語句或完全限定名稱來提及特定類型。

package n1.n2; 
    class A {} 
    class B {} 

package n1.n2; 
    class A {} 

另一個來源的文件:

package n1.n2; 
    class B {} 

包不能嵌套。一個源文件只能有一個包語句。

C#

命名空間用於組織方案,無論是作爲一個「內部」組織系統中的程序,和爲「外部」的組織系統。

System.Security.Cryptography.AsymmetricAlgorithm aa; 

可以被替換:

using System.Security.Crypography; 
AsymmetricAlgorithm aa; 

或者,可以指定的命名空間的別名,例如

using myAlias = System.Security.Crypography; 

然後引用類與

myAlias.AsymmetricAlgorithm 

namespace N1.N2 
{ 
    class A {} 
    class B {} 
} 

namespace N1 
{ 
    namespace N2 
    { 
     class A {} 
     class B {} 
    } 
} 
28

在Java中沒有「命名空間」這樣的術語 - 一個包作爲Java中的命名空間,但是爲名稱提供了一個範圍。它也是可訪問性模型的一部分。

section 7 of the Java Language Specification

程序被組織成組的包。每個包都有自己的一組類型名稱,這有助於防止名稱衝突。頂層類型在包之外是可訪問的(第6.6節),只有在類聲明爲public的時才聲明它。

編輯:好的澄清後:一個Java包是類似到C#命名空間 - 除了其具有無障礙的影響,而在C#的命名空間和可訪問性是完全正交的。

+1

我的意思是指在C#中的命名空間! – Mazzy 2012-02-12 14:08:59

11

在C++/C#中,名稱空間只是用於分區名稱,以避免在不同位置爲變量意外使用相同名稱而導致衝突。

在Java中,軟件包遠不止於此 - 軟件包用於模塊,命名方面只是其中的一部分。

36

有幾個細節有所不同。

在Java中,目錄結構應該與包結構匹配。在C#中沒有 這樣的限制。

在C#中,一個文件中可以有多個名稱空間。在Java中,一個文件 屬於一個包(見前)。

Java具有默認/程序包可訪問性。 C#內部可訪問性在程序集中變爲 。

如果您使用VS和Eclipse並讓它們構建項目,那麼您將不會感覺到差異太大。

0

在java中,您可以將各種訪問說明符應用於會影響包的類。

保護:訪問相同的封裝與它在另一個包的子類, 默認:訪問同一個包, 市民:皆可訪問, 私人:甚至不是同一個包訪問。

這些類型的訪問說明符不適用於c sharp中的名稱空間

相關問題