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 { }
Helloto에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
'source' 카테고리의 다른 글
| 시스템을 사용하는 것이 좋습니까?어레이를 복사하기 위한 for 루프가 아닌 arraycopy(...)를 선택하십시오. (0) | 2022.09.03 |
|---|---|
| 줄바꿈(JLABEL) (0) | 2022.09.03 |
| 디폴트 패키지 내의 Java-classes에 액세스하려면 어떻게 해야 합니까? (0) | 2022.09.03 |
| Java에 Serializable 인터페이스가 필요한 이유 (0) | 2022.09.03 |
| Jackson 2.2의 Object Mapper에서 JSON을 예쁘게 인쇄했습니다. (0) | 2022.09.03 |