ความแตกต่างระหว่างเนมสเปซใน C # และแพ็กเกจใน Java


98

อะไรคือความแตกต่าง (ในแง่การใช้งาน) ระหว่างเนมสเปซใน C # และแพ็คเกจใน Java

คำตอบ:


74

จาก: 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 {}

ไม่สามารถซ้อนแพ็กเกจได้ ไฟล์ต้นฉบับหนึ่งไฟล์สามารถมีคำสั่งแพ็กเกจเดียวเท่านั้น

ค#

เนมสเปซใช้ในการจัดระเบียบโปรแกรมทั้งเป็นระบบองค์กร "ภายใน" สำหรับโปรแกรมและระบบองค์กร "ภายนอก"

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

3
คำตอบที่ดี แต่ฉันคิดว่าการนำเข้า java ใช้ไม่ได้ import system.security.crypography.AsymmetricAlgorithm;มันควรจะเป็น เนื่องจากใน java คุณต้องนำเข้าคลาสไม่ใช่แพ็กเกจ เป็นไปได้ที่จะนำเข้าคลาสทั้งหมดในแพ็กเกจที่มีimport package.*แต่การนำเข้าคลาสนั้นเกินไปไม่ใช่แพ็กเกจ
Imus

มีวิธีการเนมสเปซใน Java โดยไม่ต้องใช้โฟลเดอร์มากมายหรือไม่? namespaceคำหลักในชวาจะดี

42

มีรายละเอียดเล็กน้อยที่แตกต่างกัน

ใน Java โครงสร้างไดเร็กทอรีควรตรงกับโครงสร้างแพ็คเกจ ไม่มีข้อ จำกัด ดังกล่าวใน C #

ใน C # คุณสามารถมีหลายเนมสเปซในไฟล์เดียว ใน Java หนึ่งไฟล์เป็นของแพ็คเกจเดียว (ดูก่อนหน้า)

Java มีการเข้าถึงดีฟอลต์ / แพ็คเกจ การช่วยสำหรับการเข้าถึงภายใน C # จะอยู่ในชุดประกอบ

หากคุณใช้ VS และ Eclipse และปล่อยให้โครงสร้างของโครงการคุณจะไม่รู้สึกถึงความแตกต่างมากนัก


35

ไม่มีคำที่เรียกว่า "เนมสเปซ" ใน Java - แพ็กเกจทำหน้าที่เป็นเนมสเปซใน Java ในแง่ของการให้ขอบเขตสำหรับชื่อ นอกจากนี้ยังเป็นส่วนหนึ่งของโมเดลการช่วยสำหรับการเข้าถึง

จากส่วนที่ 7 ของข้อกำหนดภาษา Java :

โปรแกรมต่างๆจัดเป็นชุดของแพ็คเกจ แต่ละแพ็กเกจจะมีชุดชื่อประเภทของตัวเองซึ่งช่วยป้องกันไม่ให้ชื่อขัดแย้งกัน ประเภทระดับบนสุดสามารถเข้าถึงได้ (§6.6) นอกแพ็กเกจที่ประกาศก็ต่อเมื่อประเภทนั้นถูกประกาศแบบสาธารณะ

แก้ไข: เอาล่ะหลังจากการชี้แจง: แพคเกจ Java คล้ายกับเนมสเปซ C # - ยกเว้นว่าจะมีผลกระทบต่อความสามารถในการเข้าถึงในขณะที่ใน C # เนมสเปซและการเข้าถึงจะมีมุมฉากทั้งหมด


12

ใน C ++ / C # เนมสเปซใช้สำหรับการแบ่งชื่อเพื่อหลีกเลี่ยงการชนกันโดยบังเอิญใช้ชื่อเดียวกันสำหรับตัวแปรในที่ต่างๆ

ใน Java แพ็กเกจเป็นมากกว่าแค่นั้น - แพ็กเกจใช้สำหรับโมดูลด้านการตั้งชื่อเป็นเพียงส่วนหนึ่งของมัน


0

ใน java คุณสามารถใช้ตัวระบุการเข้าถึงต่างๆกับคลาสซึ่งจะส่งผลกระทบต่อแพ็คเกจของคุณ

ได้รับการป้องกัน: สามารถเข้าถึงแพ็กเกจเดียวกันและคลาสย่อยในแพ็กเกจอื่นค่าเริ่มต้น: สามารถเข้าถึงแพ็กเกจเดียวกันสาธารณะ: เข้าถึงได้ทั่วไปเป็นส่วนตัว: ไม่สามารถเข้าถึงได้ด้วยแพ็กเกจเดียวกัน

ตัวระบุการเข้าถึงประเภทนี้ใช้ไม่ได้กับเนมสเปซใน c sharp


-2

เนมสเปซก็เหมือนกับโฟลเดอร์ใหม่โฟลเดอร์ย่อยทั้งหมดคือเนมสเปซย่อย หากเราพิจารณาเนมสเปซเป็นฟังก์ชันเช่นเรามีการโฆษณาเนมสเปซภายใต้เนมสเปซทางการตลาดเราจะใช้วิธีการ marketing.advertising.adsclass.ads แก้ปัญหาได้ง่ายมาก 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 คุณใช้วิธีเดียวกัน คุณบรรจุคลาสหลายคลาสไว้ในแพ็คเกจเดียวและใช้ได้หลายครั้ง เพิ่มความเป็นเอกลักษณ์ คุณเขียนครั้งเดียวและใช้ได้หลายครั้ง ชั้นเรียนที่เกี่ยวข้องในแพ็คเกจเดียว ไม่ต้องโค้ดหลายครั้ง


2
คำถามเกี่ยวกับความแตกต่างระหว่างเนมสเปซใน C # และแพ็คเกจใน Java คำตอบนี้ไม่ได้กล่าวถึงเรื่องนี้เลย
โยฮั
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.