Namespace
Như chúng ta đã biết .NET cung cấp một thư viện các lớp đồ sộ và thư viện này có tên là
FCL (Framework Class Library). Trong đó Console chỉ là một lớp nhỏ trong hàng ngàn lớp
trong thư viện. Mỗi lớp có một tên riêng, vì vậy FCL có hàng ngàn tên như ArrayList,
Dictionary, FileSelector,…
Điều này làm nảy sinh vấn đề, người lập trình không thể nào nhớ hết được tên của các lớp
trong .NET Framework. Tệ hơn nữa là sau này có thể ta tạo lại một lớp trùng với lớp đã có
chẳng hạn. Ví dụ trong quá trình phát triển một ứng dụng ta cần xây dựng một lớp từ điển và
lấy tên là Dictionary, và điều này dẫn đến sự tranh chấp khi biên dịch vì C# chỉ cho phép một
tên duy nhất.
Chắc chắn rằng khi đó chúng ta phải đổi tên của lớp từ điển mà ta vừa tạo thành một cái
tên khác chẳng hạn như myDictionary. Khi đó sẽ làm cho việc phát triển các ứng dụng trở
nên phức tạp, cồng kềnh. Đến một sự phát triển nhất định nào đó thì chính là cơn ác mộng
cho nhà phát triển.
Giải pháp để giải quyết vấn đề này là việc tạo ra một namespace, namsespace sẽ hạn chế
phạm vi của một tên, làm cho tên này chỉ có ý nghĩa trong vùng đã định nghĩa.
Giả sử có một người nói Tùng là một kỹ sư, từ kỹ sư phải đi kèm với một lĩnh vực nhất định
nào đó, vì nếu không thì chúng ta sẽ không biết được là anh ta là kỹ sư cầu đường, cơ khí hay
phần mềm. Khi đó một lập trình viên C# sẽ bảo rằng TùngCauDuong.KySu phân biệt với CoKhi.KySu hay PhanMem.KySu. Namespace trong trường hợp này là CauDuong, CoKhi, PhanMem sẽ hạn chế phạm vi của những từ theo sau. Nó tạo ra một vùng không gian để tên sau đó có nghĩa.
Tương tự như vậy ta cứ tạo các namespace để phân thành các vùng cho các lớp trùng tên
không tranh chấp với nhau.
Tương tự như vậy, .NET Framework có xây dựng một lớp Dictionary bên trong
namespace System.Collections, và tương ứng ta có thể tạo một lớp Dictionary khác nằm
trong namespace ProgramCSharp.DataStructures, điều này hoàn toàn không dẫn đến sự tranh chấp với nhau.
Trong ví dụ minh họa sau đối tượng Console bị hạn chế bởi namespace bằng việc sử dụng mã lệnh:
System.Console.WriteLine();

class ChaoMung
{
static void Main()
{
/* Xuat ra man hinh chuoi ‘chao mung’
Su dung ham WriteLine cua lop System.Console
*/
System.Console.WriteLine(“Chao Mung”);
}
} —

Toán tử ‘.’
Trong vídụ bên trên dấu ‘.’ được sử dụng để truy cập đến phương thức hay dữ liệu trong
một lớp (trong trường hợp này phương thức là WriteLine()), và ngăn cách giữa tên lớp đến
một namespace xác nhận (namspace System và lớp là Console). Việc thực hiện này theo
hướng từ trên xuống, trong đó mức đầu tiên namespaceSystem, tiếp theo là lớp Console, và cuối cùng là truy cập đến các phương thức hay thuộc tính của lớp.
Trong nhiều trường hợp namespace có thể được chia thành các namespace con gọi là
subnamespace.

Ví dụ: trong namespace System có chứa một số các subnamesapce như
Configuration, Collections, Data, và còn rất nhiều nữa, hơn nữa trong namespace Collection còn chia thành nhiều namesapce con nữa.
Namespace giúp chúng ta tổ chức và ngăn cách những kiểu. Khi chúng ta viết một
chương trình C# phức tạp, chúng ta có thể phải tạo một kiến trúc namespace riêng cho mình,
và không giới hạn chiều sâu của cây phân cấp namespace. Mục đích của namespace là giúp
chúng ta chia để quản lý những kiến trúc đối tượng phức tạp.
Từ khóa using
Để làm cho chương trình gọn hơn, và không cần phải viết từng namespace cho từng đối
tượng, C# cung cấp từ khóa là using, sau từ khóa này là một namespace hay subnamespace với mô tả đầy đủ trong cấu trúc phân cấp của nó.
Ta có thể dùng dòng lệnh :
using System;
ở đầu chương trình và khi đó trong chương trình nếu chúng ta có dùng đối tượng Console thì
không cần phải viết đầy đủ : System.Console. mà chỉ cần viết Console. thôi.
Ví dụ: Dùng khóa using
—————————————————————————–
using System;
class ChaoMung
{
static void Main()
{
//Xuat ra man hinh chuoi thong bao
Console.WriteLine(“Chao Mung”);
}
} —
—————————————————————————
Kết quả:
Chao Mung
—————————————————————————–
Lưu ý rằng phải đặt câu using System trước định nghĩa lớp ChaoMung.
Mặc dù chúng ta chỉ định rằng chúng ta sử dụng namespace System, và không giống như các
ngôn ngữ khác, không thể chỉ định rằng chúng ta sử dụng đối tượng System.Console.
Ví dụ: Không hợp lệ trong C#.
—————————————————————————–
using System.Console;
class ChaoMung
{
static void Main()
{
//Xuat ra man hinh chuoi thong bao
WriteLine(“Chao Mung”);
}
} —
—————————————————————————
Đoạn chương trình trên khi biên dịch sẽ được thông báo một lỗi như sau:
error CS0138: A using namespace directive can only be applied to namespace;
‘System.Console’ is a class not a namespace.
Cách biểu diễn namespace có thể làm giảm nhiều thao tác gõ bàn phím, nhưng nó có thể sẽ
không đem lại lợi ích nào bởi vì nó có thể làm xáo trộn những namespace có tên không khác
nhau. Giải pháp chung là chúng ta sử dụng từ khóa using với các namespace đã được xây
dựng sẵn, các namespace do chúng ta tạo ra, những namespace này chúng ta đã nắm chắc sưu
liệu về nó. Còn đối với namespace do các hãng thứ ba cung cấp thì chúng ta không nên dùng từ khóa using.

Chúc các bạn thành công !

Ở bài tiếp theo chúng ta sẽ tìm hiểu Phân biệt chữ thường, chữ hoa và tìm hiểu Từ khóa static trong C#

ĐỂ LẠI PHẢN HỒI CỦA BẠN TẠI ĐÂY

Phản hồi về bài viết này

NO COMMENTS

LEAVE A REPLY


*