Answers:
来自:http : //www.javacamp.org/javavscsharp/namespace.html
包用于组织文件或公共类型,以避免类型冲突。包构造可以映射到文件系统。
system.security.cryptography.AsymmetricAlgorithm aa;
可以替换:
import system.security.Crypography;
class xxx { ...
AsymmetricAlgorithm aa;
软件包没有别名。您必须使用import语句或标准名称来提及特定类型。
package n1.n2;
class A {}
class B {}
要么
package n1.n2;
class A {}
另一个源文件:
package n1.n2;
class B {}
程序包不能嵌套。一个源文件只能有一个package语句。
命名空间用于组织程序,既可以作为程序的“内部”组织系统,又可以作为“外部”组织系统。
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 {}
}
}
有一些细节有所不同。
在Java中,目录结构应与包结构匹配。C#中没有这样的限制。
在C#中,一个文件中可以有多个名称空间。在Java中,一个文件属于一个包(请参见上一个)。
Java具有默认/包可访问性。C#内部可访问性进入程序集。
如果您使用VS和Eclipse并让他们构造项目,那么您将不会感到太多差异。
Java中没有“命名空间”之类的术语-包在Java中充当名称空间,但提供了名称范围。它也是可访问性模型的一部分。
程序以软件包的形式组织。每个软件包都有自己的类型名称集,这有助于防止名称冲突。只有在声明了公共类型的情况下,才可以在声明它的包外部访问顶级类型(第6.6节)。
编辑:好的,在澄清之后:Java包类似于 C#名称空间-区别在于它会影响可访问性,而在C#中,名称空间和可访问性完全正交。
在Java中,您可以将各种访问说明符应用于将对您的包产生影响的类。
protected:可用于同一软件包及其子类在另一个软件包中,默认值:可用于同一软件包,public:可通用访问,private:甚至不可被同一软件包访问。
这些类型的访问说明符不适用于c Sharp中的名称空间
命名空间就像一个新文件夹一样,所有子文件夹都是子命名空间。如果我们将名称空间视为一个函数,例如在营销名称空间下有一个名称空间广告,则可以使用marketing.advertising.adsclass.adsmethod。解决问题非常容易。Java通过包具有相同的方法,但是对于新手来说很复杂。
在C#中
'''名称空间营销{
class admissions{
int admissions_method(){
}
}
namespace advertising{
class advertisement{
void ad_in_newspaper( int no_of_lines){
}
void ad_on_tv(int seconds){
}
}
}
在客户端类中使用
using marketing;
using marketing.advertising;
'''在Java中,您使用相同的方法。您将多个类打包在一个包中,并多次使用。它增加了唯一性。您编写一次并使用多次。一包中的相关类。无需多次编码。
import system.security.crypography.AsymmetricAlgorithm;。由于在Java中,您必须导入一个类,而不是一个包。可以使用来导入包中的所有类,import package.*但也可以导入类而不是包。