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:
Loạt bài: Khám phá .NET 6
Trung Nguyen 02/04/2022
Loạt bài: Khám phá .NET 6

Trong loạt bài này, tôi sẽ xem xét một số

Các thành viên static abstract trong interface C# 10
Trung Nguyen 20/02/2022
Các thành viên static abstract trong interface C# 10

Ngôn ngữ C# đã bật các bộ tăng áp liên

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.