namespace คืออะไร
ในภาษา C# เนมสเปซ (namespace) นั้นเป็นเซตของเมธอดและคลาส ที่ใช้ในการจัดการสิ่งเหล่านี้ให้เป็นกลุ่ม หรือเป็นการรวบรวมของออบเจ็ค มันเป็นแนวคิดแบบนามธรรมที่ใช้ในการกำหนดขอบเขตของออบเจ็คภายในโปรแกรมNamespaces นั้นจะมีประโยชน์ในการป้องกันชื่อของคลาสที่ซ้ำกัน หรือว่าการนำคลาสนั้นกลับมาใช้โดยมีชื่อเดียวกันกับโปรเจ็คของเรา ยกตัวอย่างเช่น บริษัท A มีคลาสที่ชื่อว่า
User
และเมื่อคุณนำโค้ดจากบริษัท B มาใช้ ก็มีคลาสที่ชื่อว่า User
เช่นเดียวกัน นี่เรียกว่าการชนกันของชื่อและเราสามารถใช้ namespace
ในการแก้ไขปัญหานี้ได้ มันมีต้นกำเนิดแนวคิดมาจากพาธไฟล์ของคอมพิวเตอร์
ดังนั้น namespace
จึงสามารถที่จะซ้อนกันเป็นลำดับเหมือนกับโฟล์เดอร์นั่นเองการสร้าง namespaces
ในการประกาศ namespace ในภาษา C# คุณต้องทำตามรูปแบบของการสร้างข้างล่างนี้namespace Indentifier { // namespace members }และอีกรูปแบบหนึ่งในกรณีที่ namespace นั้นซ้อนกัน
namespace Indentifier { namespace SubIndentifier1 { // namespace members } // namespace members }โดยคำสั่ง
namespace
จะใช้เพื่อสร้าง namespace และ Identifier
นั้นสำหรับเป็นชื่อให้กับ namespace ที่สร้างขึ้น การตั้งชื่อให้กับ
namespace มีกฏเหมือนกันกับการตั้งชื่อตัวแปรและเมธอด
และมักจะเริ่มต้นด้วยตัวพิมพ์ใหญ่ในบล็อคคำสั่งของ namespace
นั้นเป็นที่ที่จะประกาศสมาชิกของมัน โดยสมาชิกสามารถเป็นคลาสหรือ namespace
อื่นมาดูตัวอย่างของการสร้าง namespace ในภาษา C#
namespace CompanyA { class User { string firstName; string lastName; public User(string fn, string ln) { firstName = fn; lastName = ln; } public string GetName() { return firstName + " " + lastName; } } }ในตัวอย่างด้านบน เราได้สร้าง namespace
CompanyA
โดยมีคลาส User
เป็นสมาชิก ถ้าคุณยังไม่เข้าใจเกี่ยวกับคล่าในตอนนี้ ไม่ต้องกังวลเพราะคุณจะได้เรียนในบทต่อไปการใช้และการเข้าถึง namespaces
เมื่อ namespace ได้ถูกสร้างขึ้น คุณสามารถที่จะใช้งานมันได้ 2 วิธีในภาษา C# แบบแรกเป็นการใช้โดยตรงโดยการเติม prefix ซึ่งเป็นชื่อของ namespace ข้างหน้าออบเจ็ค แบบที่สอง คือใช้คำสั่งusing
เพื่อนำเข้า namespace มายังพื้นที่การเขียนโปรแกรมปัจจุบันการใช้ namespace โดยตรง
นี่เป็นวิธีที่ง่ายและตรงไปตรงมาในการใช้ Namespace ที่สร้างขึ้น โปรแกรมข้างล่างนี้เป็นตัวอย่างของการเรียกใช้ namespaceusing System; namespace Namespaces { class Program { static void Main(string[] args) { CompanyA.User a = new CompanyA.User("Mateo", "Marcus"); Console.WriteLine(a.GetName()); Console.ReadLine(); } } } namespace CompanyA { class User { string firstName; string lastName; public User(string fn, string ln) { firstName = fn; lastName = ln; } public string GetName() { return firstName + " " + lastName; } } }เราได้ใช้ namespace
CompanyA
ที่เราได้สร้างขึ้นในตัวอย่างก่อนหน้า โดยการเข้าถึงคลาส User
ภายใน namespace นี้เราจะใช้ CompanyA.User
ที่เข้าถึงคลาสที่เราต้องการโดยตรงการใช้คำสั่ง using
ใน บางครั้งมันอาจจะไม่สะดวกที่จะใช้วิธี prefix ถ้าเรามีออบเจ็คเป็นจำนวนมากที่ต้องการเข้าถึงใน namespace หรือมันเป็น namespace ที่ซ้อนกันหลายชั้น คำสั่งusing
สามารถออำนวยความสะดวกให้กับเราสำหรับเรื่องนี้using System; using CompanyA; namespace Namespaces { class Program { static void Main(string[] args) { User a = new User("Mateo", "Marcus"); Console.WriteLine(a.GetName()); Console.ReadLine(); } } } namespace CompanyA { class User { string firstName; string lastName; public User(string fn, string ln) { firstName = fn; lastName = ln; } public string GetName() { return firstName + " " + lastName; } } }ในตัวอย่างด้านบน เราได้ใช้คำสั่ง
using CompanyA
เพื่อนำเข้า namespace เข้ามายังพื้นที่การเขียนโปรแกรมปัจจุบันของเรา ดังนั้น เราสามารถใช้ User
โดยไม่จำเป็นต้องมี prefix ด้วย CompanyA อีกต่อไปNamespace Aliases
มัน เป็นไปได้ที่บางออบเจ็คใน namespace อาจจะมีชื่อที่เหมือนกัน ในการที่จะป้องกันปัญหาเมื่อตอนนำมาใช้งานกับโปรแกรม วิธีแรกที่เราสามารถทำได้คือการใช้ prefix อย่างที่ได้กล่าวไปก่อนนี้แล้ว แต่ในตอนนี้ เราจะใช้ namespace aliases ซึ่งก็คือการตั้งชื่อเสมือนให้กับ namespace โดยการเปลี่ยนชื่อของ namespace ที่ต้องการให้เป็นอย่างอื่นเพื่อใช้ในโปรแกรม มาดูตัวอย่างของการใช้งาน namespace aliasesusing System; using NX = CompanyA.User; using NY = CompanyB.User; namespace Namespaces { class Program { static void Main(string[] args) { NX a = new NX("Mateo", "Marcus"); NY b = new NY("Mateo", "Marcus"); Console.WriteLine(a.GetName()); Console.WriteLine(b.GetName()); Console.ReadLine(); } } } namespace CompanyA { class User { string firstName; string lastName; public User(string fn, string ln) { firstName = fn; lastName = ln; } public string GetName() { return firstName + " " + lastName; } } } namespace CompanyB { class User { string firstName; string lastName; public User(string fn, string ln) { firstName = fn; lastName = ln; } public string GetName() { return lastName + " " + firstName; } } }ใน ตัวอย่างเรามี namespace CompanyA และ CompanyB ซึ่ง namespace ทั้งสองนั้นต่างก็มีคล่าที่ชื่อ User เป็นสมาชิกเหมือนกัน ดังนั้น คำสั่ง
using NX = CompanyA.User
นั้นเพื่อทำการเปลี่ยน CompanyA.User
ให้เป็น NX
และคำสั่ง using NY = CompanyB.User
เปลี่ยนให้เป็น NY
ตามลำดับ ตอนนี้คุณลองพิจารณาโค้ดข้างล่างนี้NX a = new NX("Mateo", "Marcus"); NY b = new NY("Mateo", "Marcus"); // are equivalent to CompanyA.User a = new CompanyA.User("Mateo", "Marcus"); CompanyB.User b = new CompanyB.User("Mateo", "Marcus");ทั้ง สองวิธีการนั้นจะให้ผลลัพธ์ที่เท่ากัน ผลลัพธ์ของการใช้ namespace alias สามารถทำให้เราเขียนโค้ดที่สั้นลงและเรียกใช้ namespace ได้รวดเร็วขึ้นโดยการตั้งชื่อใหม่ให้กับมัน
และนี่เป็นผลลัพธ์เมื่อเราได้ทำการรันโปรแกรม
Mateo Marcus Marcus Mateoจากผลัพธ์ ถึงแม้ว่าจะเป็นคล่าเดียวกันและเรียกใช้เมธอดเหมือนกัน แต่ว่า GetName ในแต่ละคลาสนั้นทำงานแตกต่างกัน
Nested namespaces
Namespace สามารถที่จะซ้อนกันกี่ระดับก็ได้ตามที่คุณต้องการ จากตัวอย่างโค้ดข้างล่างนี้namespace A { namespace B { namespace C { // ... } } namespace B1 { // ... } }ใน บทนี้ คุณได้เรียนเกี่ยวกับ namespace และรู้วิธีการสร้างและใช้มันเมื่อต้องการ และในบทนี้ คุณได้เห็นเกี่ยวกับคลาสและออบเจ็ค ซึ่งเป็นเรื่องสำคัญที่คุณจะได้เรียนในบทต่อไป
ไม่มีความคิดเห็น:
แสดงความคิดเห็น