Namespace trong C#

Một namespace trong C# được thiết kế để cung cấp một cách để tách một tập hợp các tên khác nhau. Các tên lớp được khai báo trong một namespace không xung đột với lớp cùng tên đó được khai báo trong namespace khác.

Định nghĩa namespace trong C#

Một namespace trong C# bắt đầu với từ khóa namespace được theo sau bởi tên của namespace đó, như sau:

namespace namespace_name 
{
   // code declarations
}

Để gọi phiên bản đã kích hoạt của namespace của hàm hoặc biến, bạn hãy thêm tên của namespace đó như sau:

namespace_name.item_name;

Ví dụ sau minh họa cách sử dụng của namespace trong C#:

using System;

namespace Space1 
{
   class ClassA 
   {
      public void Print() 
      {
         Console.WriteLine("Inside Space 1");
      }
   }
}
namespace Space2
{
   class ClassA 
   {
      public void Print() 
      {
         Console.WriteLine("Inside Space 2");
      }
   }
}
class TestClass 
{
   static void Main(string[] args) 
   {
      Space1.ClassA instance1 = new Space1.ClassA();
      Space2.ClassA instance2 = new Space2.ClassA();
      instance1.Print();
      instance2.Print();
      Console.ReadKey();
   }
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Inside Space 1
Inside Space 2

Từ khóa using trong C#

Từ khóa using  được sử dụng để khai báo sử dụng namespace cho chương trình. Do vậy, chương trình có thể truy cập và sử dụng các tên trong namespace đã khai báo.

Ví dụ: Để sử dụng lớp Console trong chương trình chúng ta sẽ viết như sau nê không khai báo sử dụng namespace System:

System.Console.WriteLine("Hello there");

Như bạn thấy ở ví dụ trên, việc thêm namespace System ở trước class Console làm cho câu lệnh trông khá dài dòng. Nếu bạn sử dụng lớp Console nhiều lần thì sẽ rất bất tiện vì phải viết đi viết lại nhiều lần.

Để tránh phải viết lặp đi lặp lại tên của namespace chúng ta có thể sử dụng khai báo using System; ở đầu chương trình. Lệnh này cho trình biên dịch biết rằng chương trình đang sử dụng các tên trong không gian tên được chỉ định.

Hãy để chúng tôi viết lại ví dụ trước của chúng tôi, bằng cách sử dụng chỉ thị trong C#:

using System;
using Space1;
using Space2;

namespace Space1 
{
   class ClassA 
   {
      public void Print() 
      {
         Console.WriteLine("Inside Space 1");
      }
   }
}
namespace Space2
{
   class ClassB 
   {
      public void Print() 
      {
         Console.WriteLine("Inside Space 2");
      }
   }
}
class TestClass 
{
   static void Main(string[] args) 
   {
      ClassA a = new ClassA();
      ClassB b = new ClassB();
      a.Print();
      b.Print();
      Console.ReadKey();
   }
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Inside Space 1
Inside Space 2

Namespace lồng nhau trong C#

Trong C#, bạn có thể định nghĩa một namespace bên trong các namespace khác, như sau:

namespace namespace_name1 
{   
   // code declarations
   
   namespace namespace_name2 
   {
      // code declarations
   }
}

Bạn có thể truy cập các thành viên của các namespace lồng nhau bằng cách sử dụng toán tử dot (.) trong C#, như sau:

using System;
using MainSpace;
using MainSpace.SubSpace;

namespace MainSpace 
{
   class ClassA 
   {
      public void Print() 
      {
         Console.WriteLine("Inside Main Space");
      }
   }
   
   namespace SubSpace 
   {
      class ClassB 
      {
         public void Print() 
         {
            Console.WriteLine("Inside Sub Space");
         }
      }
   }   
}

class TestClass 
{
   static void Main(string[] args) 
   {
      ClassA a = new ClassA();
      ClassB b = new ClassB();
      a.Print();
      b.Print();
      Console.ReadKey();
   }
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Inside Main Space
Inside Sub Space

Bí danh namespace trong C#

Ngoài những cách truy cập namespace đã được trình bày ở trên, C# còn cung cấp một cách nữa đó là sử dụng bí danh cho namespace (alias).

Ví dụ sau đây sẽ minh họa cách sử dụng bí danh cho namespace:

using generics = System.Collections.Generic;

namespace AliasExample
{
    class TestClass
    {
        static void Main()
        {
            generics::Dictionary<string, int> dict = new generics::Dictionary<string, int>()
            {
                ["A"] = 1,
                ["B"] = 2,
                ["C"] = 3
            };

            foreach (string name in dict.Keys)
            {
                System.Console.WriteLine($"{name} {dict[name]}");
            }
        }
    }
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

A 1
B 2
C 3

Như bạn đã thấy ở ví dụ trên, bí danh generics được sử dụng thay cho namespace System.Collections.Generic. Để truy sử dụng các tên trong không gian tên này chúng ta chỉ cần gọi theo cú pháp generics::

Lập Trình C#Lập Trình C# Cơ Bản
Bài Viết Liên Quan:
Garbage Collector (GC) trong C#
Trung Nguyen 29/03/2021
Garbage Collector (GC) trong C#

Bạn sẽ tìm hiểu về Garbage Collector (GC) của .NET quản lý việc cấp phát và giải phóng bộ nhớ cho ứng dụng của bạn.

Common Language Runtime (CLR) trong C#
Trung Nguyen 29/03/2021
Common Language Runtime (CLR) trong C#

Trong bài viết này, chúng ta sẽ tìm hiểu về Common Language Runtime (CLR) là gì? Cách biên dịch và chạy ứng dụng được viết bằng C#.

Giới thiệu về .NET Framework
Trung Nguyen 29/03/2021
Giới thiệu về .NET Framework

Cung cấp cho bạn một cái nhìn tổng quan về .NET Framework, để hiểu rõ các thành phần và kiến trúc của .NET Framework.

int[] và int[,] trong C#: Ai nhanh hơn
Trung Nguyen 10/10/2020
int[] và int[,] trong C#: Ai nhanh hơn

Hiểu được sự khác biệt giữa các loại mảng trong C# sẽ giúp bạn chọn cấu trúc dữ liệu chính xác cho mọi trường hợp.