Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

วิธีกำหนด Namespace ใน C#

Namespace ใน C#

Namespace ใช้จัดระเบียบโค้ดให้เป็นกลุ่ม ตัดกันไม่ให้ชื่อคลาส/โครงสร้างชนิดเดียวกันชนกัน (Name collision) และช่วยให้ค้นหาและใช้งานโค้ดง่ายขึ้น

ไวยากรณ์พื้นฐาน

namespace NamespaceName
{
    // ประกาศคลาส โครงสร้าง อินเทอร์เฟซ ฯลฯ
    public class MyClass { }
}

ตัวอย่างโค้ดสมบูรณ์

using System;

namespace FirstSpace
{
    class NamespaceClass
    {
        public void Func()
        {
            Console.WriteLine("อยู่ใน FirstSpace");
        }
    }
}

namespace SecondSpace
{
    class NamespaceClass
    {
        public void Func()
        {
            Console.WriteLine("อยู่ใน SecondSpace");
        }
    }
}

class TestClass
{
    static void Main(string[] args)
    {
        // ใช้ชื่อเต็ม (Fully qualified name)
        FirstSpace.NamespaceClass fc = new FirstSpace.NamespaceClass();
        SecondSpace.NamespaceClass sc = new SecondSpace.NamespaceClass();
        
        fc.Func();
        sc.Func();
        
        Console.ReadKey();
    }
}

ผลลัพธ์

อยู่ใน FirstSpace
อยู่ใน SecondSpace

การใช้งาน Namespace

1. using Directive (นำเข้า namespace)

using System;           // นำเข้า namespace ทั้งหมด
using SysIO = System.IO; // Alias สำหรับชื่อยาวหรือชนกัน

2. Nested Namespaces

namespace Company.Project.Module
{
    public class MyClass { }
}

// หรือ
namespace Company
{
    namespace Project
    {
        namespace Module { }
    }
}

3. File-scoped Namespaces (C# 10+)

// ไฟล์ทั้งไฟล์อยู่ใน namespace นี้ (ลด indentation)
namespace MyProject.Models;

public class User { }
public class Product { }

4. Global Using (C# 10+)

// ในไฟล์ GlobalUsings.cs หรือ .csproj
global using System;
global using System.Collections.Generic;
// ใช้ได้ทั่วโปรเจกต์โดยไม่ต้อง using ทุกไฟล์

แนวทางปฏิบัติที่ดี

  • ใช้ PascalCase สำหรับชื่อ namespace (เช่น MyCompany.MyProduct)
  • จัดกลุ่มตามฟังก์ชันหรือเลเยอร์ (Models, Services, Controllers)
  • หลีกเลี่ยงชื่อที่ชนกับ .NET built-in namespaces
  • ใช้ file-scoped namespace สำหรับไฟล์ที่มี namespace เดียว (C# 10+)
  • พิจารณา global using สำหรับ namespace ที่ใช้บ่อยในโปรเจกต์

การเข้าถึงคลาสใน namespace อื่น

// 1. Fully qualified name
var obj = new MyCompany.MyProject.Services.UserService();

// 2. using directive (ด้านบนไฟล์)
using MyCompany.MyProject.Services;
var obj = new UserService();

// 3. using alias (แก้ชื่อชนกัน)
using Svc = MyCompany.MyProject.Services;
var obj = new Svc.UserService();