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:
Tạo tập tin Zip với .NET 5
Trung Nguyen 11/11/2021
Tạo tập tin Zip với .NET 5

Trong bài viết này, chúng ta sẽ tìm hiểu lớp tiện ích ZipFile trong C#, cách nén tập tin và thư mục, cùng với giải nén tập tin zip.

Đọc và ghi file Excel trong C#
Trung Nguyen 29/10/2021
Đọc và ghi file Excel trong C#

Bài viết này sẽ giới thiệu cách đơn giản nhất mà tôi đã tìm thấy để đọc và ghi file Excel bằng C# sử dụng ExcelMapper.

Làm việc với PriorityQueue của .NET 6
Trung Nguyen 25/10/2021
Làm việc với PriorityQueue của .NET 6

Bài viết này sẽ giúp bạn tìm hiểu PriorityQueue của .NET 6 là gì, cách chúng ta thêm các phần tử và cách chúng ta có thể xếp hàng lại cho các phần tử.

Hướng dẫn nhanh và ví dụ về pattern matching trong C#
Trung Nguyen 23/10/2021
Hướng dẫn nhanh và ví dụ về pattern matching trong C#

Bài viết này sẽ trình bày một số ví dụ về pattern matching hữu ích và bạn có thể xem xét sử dụng trong các dự án hiện tại hoặc tương lai của bạn.