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::



Bài viết liên quan:

Hướng dẫn này sẽ giúp bạn tìm hiểu về đọc ghi file (File I/O) trong C# và sử dụng các lớp tiện ích để đọc ghi file.

Reflection trong C#

  • 6 min read

Reflection trong C# là gì? Ứng dụng của Reflection trong C#. Cách khai báo và sử dụng Reflection trong C#.

Attribute trong C#

  • 7 min read

Attribute trong C# là gì? Có những loại attribute nào trong C#? Làm sao để sử dụng attribute trong C#.