Mở đầu
Khi làm việc, ta cũng sẽ bắt gặp rất nhiều từ khóa namespace
, từ viết chương trình đơn giản tới phức tạp, viết class, hay làm bất cứ việc gì liên quan tới C# ta đều ít nhiều bắt gặp từ khóa này. Vậy trong bài viết này chúng ta cùng tìm hiểu từ khóa namespace
là gì nhé !
Namespace trong C# là gì ?
Định nghĩa
Theo Microsoft, namespace
được thiết kế để giữ một tập hợp các tên được phân biệt riêng rẽ nhau. Các tên giống nhau khi được đặt ở các namespace khác nhau sẽ không xung đột với nhau.
Tại sao lại cần tới namespace ?
Trong lập trình, khi chương trình lớn có nhiều tính năng thì ở mỗi tính năng có thể sẽ có các phương thức trùng tên nhau nhưng lại hoạt động khác nhau và 2 tính năng đó là độc lập thì cần phân ra mỗi namespace cho mỗi tính năng. Tương tự như Mỹ và Italia đều có 2 thành phố là Venice vậy nên chúng ta phải xác định thêm tên quốc gia để có thể biết 2 thành phố Venice này là khác nhau, namespace
cũng như thế (xem hình minh họa dưới đây).
ảnh minh họa: Devmaster
Khai báo
Để định nghĩa một namespace
trong C# ta bắt đầu với từ khóa namespace
trước rồi tới tên namespace. Sau đây là ví dụ đơn giản nhất về chương trình Hello, World:
using System; namespace luyencodec_ { class Program { static void Main(string[] args) { Console.WriteLine("Hello, world !"); Console.ReadKey(); // dừng màn hình } } }
Chương trình này sẽ xuất ra dòng chữ Hello, world !
, qua chương trình có thể thấy, chúng ta đã khai báo một namespace
tên là luyencodec_
và bên trong có chứa class Program
. Đây là chương trình cơ bản sau khi tạo một project C# nằm trong file Program.cs
.
Như vậy rút ra từ chương trình ví dụ, ta có thể dễ dàng nhận ra được cấu trúc để khai báo một namespace
trong C#:
namespace <tên namespace> { // code ... }
Khai báo namespace lồng nhau
Tương tự như các cấu trúc có thể lồng nhau namespace
cũng có thể làm tương tự như vậy. Dưới đây là ví dụ về cấu trúc namespace
lồng nhau:
... namespace namespaceA { ... namespace namespaceB { // code } namespace namespaceC { namespace namespaceD { //code } } ... } ...
Để truy cập vào các namespace con ở trong các namespace cha, ta gọi từ các namespace cha lần lượt vào trong. Ví dụ, để gọi vào namespaceD
ở trên:
namespaceA.namespaceC.namespaceD;
Cách sử dụng một namespace
Ở phần trước của bài chúng ta đã rút ra được từ chương trình được tạo sẵn sau khi tạo một project C#, namespace
này sẽ tự động được gọi khi chương trình thực thi. Nhưng giờ các bạn có nhiều namespace
khác nhau và muốn gọi chúng khi sử dụng thì sao ?
Để gọi một namespace
đã được định nghĩa ta sử dụng như sau:
... <tên namespace>.<tên phần tử>; ...
Ví dụ sau đây minh họa cách sử dụng namespace
trong C#:
using System; namespace con_meo { class Meo { public void check_namespace() { Console.WriteLine("Ban dang truy cap vao namespace "con_meo""); } } } namespace dong_vat { class Meo { public void check_namespace() { Console.WriteLine("Ban dang truy cap vao namespace "dong_vat""); } } } namespace luyencodec_ { class Program { static void Main(string[] args) { // khai báo class Meo thông qua namespace con_meo con_meo.Meo meo1 = new con_meo.Meo(); // khai báo class Meo thông qua namespace dong_vat dong_vat.Meo meo2 = new dong_vat.Meo(); meo1.check_namespace(); meo2.check_namespace(); Console.ReadKey(); // dừng màn hình } } }
Chương trình này sau khi chạy sẽ cho ra kết quả như sau:
Ban dang truy cap vao namespace "con_meo" Ban dang truy cap vao namespace "dong_vat"
Như vậy, chúng ta có thể khai báo và sử dụng 2 class bị trùng tên là Meo
thông qua 2 namespace là con_meo
và dong_vat
mà không bị xung đột.
Sử dụng namespace với từ khóa using
Ở phần trước của bài, bạn đã được giới thiệu về cách sử dụng một namespace đã được định nghĩa. Phần này, mình sẽ giới thiệu cho các bạn về từ khóa using
cũng là một cách khác để có thể sử dụng namespace đã được định nghĩa.
Ví dụ, chúng ta sử dụng câu lệnh using System;
ở mỗi đầu chương trình câu lệnh nhập xuất trong C# ra sử dụng:
Console.WriteLine("in ra cai gi do");
hoặc
System.Console.WriteLine("in ra cai gi do");
Như chúng ta có thể thấy, việc khai báo using System;
ở đầu chương trình thì chúng ta có thể rút gọn tên namespace System
ở mỗi lần sử dụng. Các bạn hãy thử bỏ câu lệnh using System;
ở đầu chương trình đi để thấy sự khác biệt nhé.
Tiếp tục, quay trở lại với ví dụ ở phần trên:
using System; namespace con_meo { class Meo { public void check_namespace() { Console.WriteLine("Ban dang truy cap vao namespace "con_meo""); } } } namespace dong_vat { class Meo { public void check_namespace() { Console.WriteLine("Ban dang truy cap vao namespace "dong_vat""); } } } namespace luyencodec_ { class Program { static void Main(string[] args) { // khai báo class Meo thông qua namespace con_meo con_meo.Meo meo1 = new con_meo.Meo(); // khai báo class Meo thông qua namespace dong_vat dong_vat.Meo meo2 = new dong_vat.Meo(); meo1.check_namespace(); meo2.check_namespace(); Console.ReadKey(); // dừng màn hình } } }
Giờ chúng ta hãy khai báo câu lệnh using con_meo;
ở đầu chương trình:
using System; using con_meo; // thêm dòng này vào đầu chương trình namespace con_meo { class Meo { public void check_namespace() { Console.WriteLine("Ban dang truy cap vao namespace "con_meo""); } } } namespace dong_vat { class Meo { public void check_namespace() { Console.WriteLine("Ban dang truy cap vao namespace "dong_vat""); } } } namespace luyencodec_ { class Program { static void Main(string[] args) { // khai báo class Meo thông qua namespace con_meo mà không cần gọi trực tiếp con_meo //con_meo.Meo meo1 = new con_meo.Meo(); Meo meo1 = new Meo(); // khai báo class Meo thông qua namespace dong_vat dong_vat.Meo meo2 = new dong_vat.Meo(); meo1.check_namespace(); meo2.check_namespace(); Console.ReadKey(); // dừng màn hình } } }
Chương trình vẫn sẽ xuất ra:
Ban dang truy cap vao namespace "con_meo" Ban dang truy cap vao namespace "dong_vat"
Như vậy là thông qua 2 ví dụ trên, chúng ta rút ra được cách sử dụng từ khóa using
:
using <tên namespace được định nghĩa>;
Các built-in namespace có sẵn trong C#
Với từ khóa using
đã được kể ở trên, bạn có thể sử dụng được các built-in namespace của C# bằng cách khai báo nó ở đầu chương trình, dưới đây là các built-in namespace có sẵn:
System
System.IO
System.Text
System.Draw
System.Collections.Generic
Những lưu ý khi sử dụng namespace
- Tên của namespace phải được đặt theo chuẩn quy tắc đặt tên.
- Nếu như khai báo nhiều namespace thì tên các namespace không được trùng nhau.
Tổng kết
Qua bài viết này mong các bạn sẽ hiểu rõ hơn về thế nào là namespace, cách khai báo và sử dụng namespace trong C#. Tổng kết lại chúng ta có namespace là:
- Namespace giống như là 1 thùng container chứa trong đó là các định nghĩa, các khai báo, các hàm, biến, cấu trúc… và được xem như là 1 block trong c#. Nhờ việc bao bọc như thế mà ta có thể đóng gói và gom nhóm từng tính năng riêng lẻ của 1 chương trình để phục vụ việc bảo trì và phát triển về sau.
Và đó là tất cả những gì mà các bạn cần biết để có thể hiểu về namespace
trong C#. Cảm ơn bạn đã đọc bài viết ! Hãy tiếp tục đồng hành cùng Lập Trình Không Khó trong các bài viết tiếp theo nhé !
Để lại một bình luận