ใน Java ใช้ แพ็กเกจ (Package) เพื่อจัดระเบียบคลาส ป้องกันชื่อซ้ำ และควบคุมการเข้าถึง ใน C# มีแนวคิดที่เทียบเท่าคือ เนมสเปซ (Namespace)
แพ็กเกจใน Java
แพ็กเกจช่วยให้:
- ป้องกันการชนกันของชื่อคลาส (Naming conflicts)
- ควบคุมระดับการเข้าถึง (Access control)
- ค้นหาและจัดการคลาส อินเตอร์เฟซ Enum และ Annotation ได้ง่ายขึ้น
เนมสเปซใน C#
เนมสเปซให้วิธีแยกกลุ่มชื่อ (Identifiers) ให้แยกจากกัน ชื่อคลาสในเนมสเปซหนึ่งจะไม่ชนกับชื่อเดียวกันในเนมสเปซอื่น
การประกาศเนมสเปซ
namespace NamespaceName {
// คลาส โครงสร้าง อินเตอร์เฟซ ฯลฯ
}
ตัวอย่างการใช้งาน
using System;
namespace first_space {
class NamespaceClass {
public void Func() {
Console.WriteLine("Inside first_space");
}
}
}
namespace second_space {
class NamespaceClass {
public void Func() {
Console.WriteLine("Inside second_space");
}
}
}
class TestClass {
static void Main(string[] args) {
first_space.NamespaceClass fc = new first_space.NamespaceClass();
second_space.NamespaceClass sc = new second_space.NamespaceClass();
fc.Func();
sc.Func();
Console.ReadKey();
}
}
คำอธิบาย
- คลาส
NamespaceClassมีอยู่ในทั้งfirst_spaceและsecond_spaceแต่ไม่ชนกัน - ใช้ชื่อเต็ม (Fully qualified name) เช่น
first_space.NamespaceClassเพื่ออ้างอิง - คีย์เวิร์ด
usingช่วยลดความยาวของชื่อเมื่อใช้บ่อย
แนวทางปฏิบัติที่ดี
- ตั้งชื่อเนมสเปซด้วย PascalCase (เช่น
MyCompany.Project.Module) - จัดกลุ่มฟังก์ชันที่เกี่ยวข้องไว้ในเนมสเปซเดียวกัน
- หลีกเลี่ยงเนมสเปซซ้อนกันลึกเกินไป