อะไรคือความแตกต่าง (ในแง่การใช้งาน) ระหว่างเนมสเปซใน C # และแพ็คเกจใน Java
อะไรคือความแตกต่าง (ในแง่การใช้งาน) ระหว่างเนมสเปซใน C # และแพ็คเกจใน Java
คำตอบ:
จาก: http://www.javacamp.org/javavscsharp/namespace.html
แพ็กเกจใช้เพื่อจัดระเบียบไฟล์หรือประเภทสาธารณะเพื่อหลีกเลี่ยงความขัดแย้งของประเภท โครงสร้างแพ็กเกจสามารถแม็พกับระบบไฟล์ได้
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 {}
}
}
มีรายละเอียดเล็กน้อยที่แตกต่างกัน
ใน Java โครงสร้างไดเร็กทอรีควรตรงกับโครงสร้างแพ็คเกจ ไม่มีข้อ จำกัด ดังกล่าวใน C #
ใน C # คุณสามารถมีหลายเนมสเปซในไฟล์เดียว ใน Java หนึ่งไฟล์เป็นของแพ็คเกจเดียว (ดูก่อนหน้า)
Java มีการเข้าถึงดีฟอลต์ / แพ็คเกจ การช่วยสำหรับการเข้าถึงภายใน C # จะอยู่ในชุดประกอบ
หากคุณใช้ VS และ Eclipse และปล่อยให้โครงสร้างของโครงการคุณจะไม่รู้สึกถึงความแตกต่างมากนัก
ไม่มีคำที่เรียกว่า "เนมสเปซ" ใน Java - แพ็กเกจทำหน้าที่เป็นเนมสเปซใน Java ในแง่ของการให้ขอบเขตสำหรับชื่อ นอกจากนี้ยังเป็นส่วนหนึ่งของโมเดลการช่วยสำหรับการเข้าถึง
จากส่วนที่ 7 ของข้อกำหนดภาษา Java :
โปรแกรมต่างๆจัดเป็นชุดของแพ็คเกจ แต่ละแพ็กเกจจะมีชุดชื่อประเภทของตัวเองซึ่งช่วยป้องกันไม่ให้ชื่อขัดแย้งกัน ประเภทระดับบนสุดสามารถเข้าถึงได้ (§6.6) นอกแพ็กเกจที่ประกาศก็ต่อเมื่อประเภทนั้นถูกประกาศแบบสาธารณะ
แก้ไข: เอาล่ะหลังจากการชี้แจง: แพคเกจ Java คล้ายกับเนมสเปซ C # - ยกเว้นว่าจะมีผลกระทบต่อความสามารถในการเข้าถึงในขณะที่ใน C # เนมสเปซและการเข้าถึงจะมีมุมฉากทั้งหมด
ใน C ++ / C # เนมสเปซใช้สำหรับการแบ่งชื่อเพื่อหลีกเลี่ยงการชนกันโดยบังเอิญใช้ชื่อเดียวกันสำหรับตัวแปรในที่ต่างๆ
ใน Java แพ็กเกจเป็นมากกว่าแค่นั้น - แพ็กเกจใช้สำหรับโมดูลด้านการตั้งชื่อเป็นเพียงส่วนหนึ่งของมัน
ใน java คุณสามารถใช้ตัวระบุการเข้าถึงต่างๆกับคลาสซึ่งจะส่งผลกระทบต่อแพ็คเกจของคุณ
ได้รับการป้องกัน: สามารถเข้าถึงแพ็กเกจเดียวกันและคลาสย่อยในแพ็กเกจอื่นค่าเริ่มต้น: สามารถเข้าถึงแพ็กเกจเดียวกันสาธารณะ: เข้าถึงได้ทั่วไปเป็นส่วนตัว: ไม่สามารถเข้าถึงได้ด้วยแพ็กเกจเดียวกัน
ตัวระบุการเข้าถึงประเภทนี้ใช้ไม่ได้กับเนมสเปซใน c sharp
เนมสเปซก็เหมือนกับโฟลเดอร์ใหม่โฟลเดอร์ย่อยทั้งหมดคือเนมสเปซย่อย หากเราพิจารณาเนมสเปซเป็นฟังก์ชันเช่นเรามีการโฆษณาเนมสเปซภายใต้เนมสเปซทางการตลาดเราจะใช้วิธีการ 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 คุณใช้วิธีเดียวกัน คุณบรรจุคลาสหลายคลาสไว้ในแพ็คเกจเดียวและใช้ได้หลายครั้ง เพิ่มความเป็นเอกลักษณ์ คุณเขียนครั้งเดียวและใช้ได้หลายครั้ง ชั้นเรียนที่เกี่ยวข้องในแพ็คเกจเดียว ไม่ต้องโค้ดหลายครั้ง
import system.security.crypography.AsymmetricAlgorithm;มันควรจะเป็น เนื่องจากใน java คุณต้องนำเข้าคลาสไม่ใช่แพ็กเกจ เป็นไปได้ที่จะนำเข้าคลาสทั้งหมดในแพ็กเกจที่มีimport package.*แต่การนำเข้าคลาสนั้นเกินไปไม่ใช่แพ็กเกจ