source

C#의 네임스페이스와 Java 패키지의 차이

goodcode 2022. 9. 3. 13:16
반응형

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 {}

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

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 {}
    }
}

몇 가지 다른 세부 사항이 있습니다.

Java 에서는 디렉토리 구조가 패키지 구조와 일치해야 합니다.C#에는 이러한 제한이 없습니다.

C# 에서는, 1 개의 파일에 복수의 네임스페이스를 설정할 수 있습니다.Java 에서는, 1 개의 파일이 1 개의 패키지에 속합니다(앞의 참조).

Java에는 기본/패키지 접근성이 있습니다.C# 내부 접근성은 어셈블리에 포함되어 있습니다.

VS와 Eclipse를 사용하여 프로젝트를 구조화하면 큰 차이를 느끼지 못할 것입니다.

Java에는 "namespace"라는 용어가 없습니다. 단, 패키지는 이름 범위를 제공하는 측면에서 Java의 네임스페이스 역할을 합니다.또한 접근성 모델의 일부이기도 합니다.

Java Language Specification 섹션7부터:

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

편집: 설명 후: Java 패키지는 C# 네임스페이스와 유사합니다.단, C# 네임스페이스와 접근성은 완전히 직교합니다.

C++/C#에서는 네임스페이스가 이름 파티션에 사용되기 때문에 다른 위치에 있는 변수에 실수로 같은 이름을 사용함으로써 충돌을 피할 수 있습니다.

Java에서 패키지는 단순한 것이 아닙니다. 패키지는 모듈에 사용되며 명명 측면은 그 일부에 불과합니다.

기본적으로는 다르지만 동일한 방법으로 사용할 수 있으며 동일한 용도로 사용할 수 있습니다.C# 네임스페이스와 Java 패키지는 모두 클래스를 편성하기 위한 입니다.하지만 그들은 몇 가지 분명한 차이점을 가지고 있다.

[1] 가상?

Java의 경우 패키지 이름은 원본 폴더에 상대적인 폴더 경로와 동일해야 합니다.예를 들어, 우리가 'class'라는 수업이 있다고 상상해보세요.Hello;

public class Hello { }

Hello to에 com.example.hello그러기 퍼블릭클래스용 Java 이동해야 .Hello( (사사경경경당)Hello.java을(를) 합니다.<source folder>/com/example/hello (). ( )<source folder> " folder" 와 같이 합니다.srcJava의 "Java", "Java",src/main/java(매븐 그래들) 그래드 그래드리다.로 해야 할 은 '아까운'을 붙이는 예요.package com.example.hello 회사의 첫머리에까지Hello.javafilename을 클릭합니다.

에서 이 입니다.jar에에에 <package(with /)>.<class>.class패스 포맷.

C# 에서는, 이것은 필수가 아닙니다.네임스페이스는 완전히 가상입니다.그럼 정의합시다.Hello다시 말하지만, 이번에는 우리가 원하는 것은Example.Test임스스네

class Hello { }

여기서는 클래스 선언을 두 개의 네임스페이스 스코프에 중첩하기만 하면 됩니다.이렇게.

namespace Example {
   namespace Test {
       class Hello { }
   }
}

[2] 명명 규칙

이것은 기능면에서 큰 차이는 아니지만, 확실히 주목할 만한 것입니다..me.name.app.category 가끔 이런 도 해요.me.name.App.category, 식으로 쓰는 는 거의 .Me.Name.App.Category대부분의 사람들이 자신의 네임스페이스에 C#을 붙이는 것과 정확히 일치합니다.

[3] 모듈 다른 주요 차이점은 Java가 명명된 카테고리뿐만 아니라 모듈에도 패키지를 사용한다는 것입니다.저는 이 주제에 대해 잘 모르기 때문에 잘못된 정보를 줄 수 있기 때문에 설명하지 않겠습니다.

[4] Java에서 패키지는 특정 기호로 액세스를 제한하는 방법으로도 사용할 수 있습니다.예를 들어 다음과 같은 클래스 구조를 가지고 있다고 합시다.

com 
 ↳ example
   ↳ hello
     ↳ Hello (class)
   ↳ bye
      ↳ interfaces
         ↳ IBye (class)
      ↳ Bye (class)

★★★★★★★★★★★★★★★★.Bye클래스는 다음과 같이 선언됩니다.

package com.example.bye;

public class Bye {
   public static void say() {
       System.out.println("Bye!");
   }
}

주요 은 이 되어 있습니다.Hello를 누릅니다

할 수 .Bye.say()의 장소에서, 「어플리케이션」으로 마크 에, 「어플리케이션」의 어느쪽인가를 사용해 .public이 경우 양쪽에서 안전하게 호출할 수 있습니다.Hello그리고.IBye.

하지만 우리가 원하지 않는다면, 만약 우리가 패키지에 있는 패키지에서만 접근할 수 있기를 바란다면 어떨까요?그럼, 그냥 이 장치를public에서say()메서드 선언에 아무것도 없습니다.그러면 해당 패키지에 없는 클래스가 메서드, 필드, 클래스 또는 생성자에 액세스할 수 없습니다.

하지만 주의해야 할 것이 있습니다.다음 점에 주의:IBye수업이요? 음, 엄밀히 따지면, 그건 같은 패키지에 들어있어요.Bye더 깊어지죠.안타깝게도 Java에서는 이 점에 대해 설명하지 않기 때문에 서브패키지에서는 액세스할 수 없습니다.

추가 정보 이제 Java에는 더 많은 액세스 수식어가 있지만 여기서 모두 설명하지는 않겠습니다.하지만 물론 이 주제에 대해 매우 유용한 사이트도 몇 개 있습니다.

간단히 말하면, 이 두 패키지는 비슷해 보이고 일반적으로 같은 목적을 위한 것이지만, Java 패키지는 가상이 아니며 다른 명명 규칙을 가지고 있으며 모듈 및 액세스 수식자를 관리합니다.

C#과 같은 에뮬레이션 Java에서는 Nested 클래스를 사용하여 C# 네임스페이스 시스템을 복제할 수 있습니다.그 이유는

1. Java 클래스는 C# 네임스페이스와 동일한 명명 규칙을 가지고 있습니다.

2. 중첩된 클래스는 완전히 가상이며 선언을 다른 클래스 범위로 이동하는 것만으로 이동할 수 있습니다.

그래서 우리가 우리 둘 다Hello'학번'의 수업Example.Test우리가 할 수 있는 일은 이것이다.

public class Example {
   public static class Test {
       public static class Hello { }
   }
}

Java에서는 패키지에 영향을 미치는 클래스에 다양한 액세스 지정자를 적용할 수 있습니다.

protected : 같은 패키지와 다른 패키지의 서브클래스에 액세스 할 수 있습니다.기본값 : 같은 패키지에 액세스 할 수 있습니다.public : universal accessible 、 private : 같은 패키지로도 액세스 할 수 없습니다.

이러한 유형의 액세스 지정자는 csharp의 네임스페이스에 적용되지 않습니다.

네임스페이스는 새 폴더와 같으며 모든 하위 폴더가 하위 네임스페이스입니다.네임스페이스를 마케팅 네임스페이스 아래에 네임스페이스를 애드버타이즈하는 것과 같은 함수로 간주할 경우 marketing.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;

'' 자바에서는 같은 방법을 사용합니다.여러 클래스를 하나의 패키지에 포장하여 여러 번 사용합니다.그것은 독특함을 높인다.한 번 쓰고 여러 번 쓰는 거죠.관련 클래스가 1개의 패키지에 포함되어 있습니다.여러 번 코드화할 필요가 없습니다.

언급URL : https://stackoverflow.com/questions/9249357/difference-between-namespace-in-c-sharp-and-package-in-java

반응형