[java] C #의 네임 스페이스와 Java의 패키지의 차이점

C #의 네임 스페이스와 Java의 패키지 간의 차이점 (사용 측면에서)은 무엇입니까?



답변

출처 : 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 {}

패키지는 중첩 될 수 없습니다. 하나의 소스 파일에는 하나의 패키지 문만있을 수 있습니다.

씨#

네임 스페이스는 프로그램의 “내부”조직 시스템 및 “외부”조직 시스템으로 프로그램을 구성하는 데 사용됩니다.

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에서 네임 스페이스 역할 을합니다. 접근성 모델의 일부이기도합니다.

에서 자바 언어 사양의 섹션 7 :

프로그램은 패키지 세트로 구성됩니다. 각 패키지에는 유형에 대한 고유 한 이름 집합이 있으므로 이름 충돌을 방지하는 데 도움이됩니다. 최상위 유형은 유형이 public으로 선언 된 경우에만이를 선언하는 패키지 외부에서 액세스 할 수 있습니다 (§6.6).

편집 : 좋아요, 설명 후 : Java 패키지는 C # 네임 스페이스 와 유사 합니다.하지만 C # 네임 스페이스와 접근성은 완전히 직교하는 반면 접근성에 영향을줍니다.


답변

C ++ / C #에서 네임 스페이스는 이름을 분할하는 데 사용되어 실수로 다른 위치의 변수에 동일한 이름을 사용하여 충돌을 방지합니다.

Java에서 패키지는 그 이상입니다. 패키지는 모듈에 사용되며 이름 지정 측면은 그 일부일뿐입니다.


답변

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;

” ‘자바에서는 동일한 방법을 사용합니다. 하나의 패키지에 여러 클래스를 포장하고 여러 번 사용합니다. 독창성을 증가시킵니다. 한 번 쓰고 여러 번 사용합니다. 하나의 패키지에있는 관련 클래스. 여러 번 코딩 할 필요가 없습니다.


답변