TOC

This article is currently in the process of being translated into Thai (~99% done).

Classes:

Namespaces

ในบทก่อนๆเราได้ทำความรู้จักกับ namespace มาแล้วอย่างคร่าวๆ namespace จะอยู่ส่วนบนของ C# code Visual Studio จะสร้าง namespace ให้เราเวลาเราสร้าง project ใหม่ หน้าตาจะเป็นดังนี้

using System;  

namespace MyProject  
{  
    class Program  
    {  
static void Main(string[] args)  
{  
// More code below this....

ในตัวอย่างนี้ เราได้สร้าง namespace “MyProject” ไว้ใน app ของเรา เมื่อเราจะใช้ class นั้นที่อืน เราจะใส่ prefix ของ ชื่อ class และ ชื่อ namespace นั้นๆ

System.IO.File.ReadAllText("test.txt");

เราใช้ ReadAllText() method ซึ่งอยู่ใน File class และอยู่ใน System.IO namespace อีกที ถ้าเราใช้ method ใน File class นี้บ่อยๆ แล้วต้องมาเขียนอะไรยาวๆแบบนี้มันน่าเบื่อ ใน C# เราจะใช้การ import ด้วย namespace ในตัวอย่าง ถ้าเราใช้ File class บ่อยๆ ก็ควรจะใช้ using statement ของ File class ดังนี้ using System.IO

using System;
using System.IO;
// More using statements here...

ทำไมเราต้องใช้ namespace?

ถ้าใครพึ่งเริ่มเขียนโปรแกรมก็จะสงสัยว่าทำไมเราต้องใช้ namespace ทำไมเราไม่เอา class มาใส่ใน namespace เดียวกัน ถ้าเป็นโปรเจ็คเล็กๆก็พอจะทำได้ แต่ถ้าโปรเจ็คใหญ่ๆ จะทำให้เราหาโค้ด จัดการกับโค้ดได้ง่าย ถ้าเราสร้าง folder ในโปรเจ็ค Visual Studio จะสร้าง namespace ให้เราเอง เช่น เมื่อสร้าง folder ชื่อ MyFolder ใน project MyProjectnamespace จะถูกสร้างโดยอัตโนมัติดังนี้ MyProject.MyFolder

ตัวอย่างที่ดีของ namespace ก็คือ .NET framework ถ้า class ทั้้งหมดใน framework อยู่ใน global namespace เราจะทำงานได้ยาก เราควรจะจัดการโค้ดของเราให้ดี เช่น System.IO สำหรับ input/output System.Net สำหรับ network, และ System.Net.Mail สำหรับ mail

ชื่อ namespace ซ้ำกันซ้อนกัน

ใน .NET framework เราสามารถมีชื่อ class ซ้ำกันได้ ถ้า class นั้นอยู่คนละ namespace

using System;  

namespace MyProject.IO  
{  
    class File  
    {  
public static void HelloWorld()  
{  
    Console.WriteLine("Hello, world!");  
}  
    }  
}

เมื่อเราต้องการใช้ class ใน Program.cs Main method เราสามารเขียนแบบเต็ม ได้ดังนี้

MyProject.IO.File.HelloWorld();

หรือ import namespace ดังนี้

using System;
using MyProject.IO;

namespace MyProject
{
    class Program
    {
static void Main(string[] args)
{
    File.HelloWorld();
}
    }
}

ถ้าเราต้องการที่จะใช้ File class จาก System.IO และจาก File class ที่เราสร้างขึ้นมาเอง compiler จะไม่สามารถแยกแยะได้ว่า File class ที่เราต้องการใช้นั้น มาจาก namespace ไหน เราจึง import แค่ namespace เดียว นอกนั้น เราก็จะใส่ชื่อเต็มๆของ namespace อื่น เวลาเราเรียกใช้ method

using System;
using System.IO;

namespace MyProject
{
    class Program
    {
static void Main(string[] args)
{
    MyProject.IO.File.HelloWorld();
}
    }
}

บางครั้งการใช้ namespace ก็ทำให้ยุ่งยากเวลาที่มี namespace เป็น nest ซ้อนๆกันหลายชั้น เช่น MyProject.FileStuff.IO.File

การใช้ Alias Directive

C# สามารถย่อชื่อของ namespace ได้ โดยการใช้ Alias Directive ดังตัวอย่างต่อไปนี้

using System;
using System.IO;
using MyIO = MyProject.IO;

namespace MyProject
{
    class Program
    {
static void Main(string[] args)
{
    File.ReadAllText("test.txt");
    MyIO.File.HelloWorld();
}
    }
}

เช่น เราจะให้ชื่อสั้นๆ MyIO แทน MyProject.IO เวลาที่เรียกใช้ namespace เราก็ไม่ต้องใส่ชื่อยาวๆ แค่เรียกตามชื่อสั้นๆที่เราต้องไว้ ตามด้วย method()

สรุป

ด้วย namespace เราสามารถจัดการกับโครงสร้างของโปรแกรมได้ดี ไม่ว่าจะเป็น multiple class ที่ชื่อเดียวกัน หรือ class ที่อยู่คนละ namespace


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!