Các lớp .NET Framework
Có lẽ một trong những lợi ích lớn nhất của viết mã có quản, ít nhất là đối với một nhà phát triển, đó là bạn có thể sử dụng thư viện lớp cơ sở của .NET.
Thư viện lớp cơ sở của .NET là một tập hợp lớn các lớp mã có quản được viết bởi Microsoft, những lớp này cho phép bạn thao tác rất nhiều các tác vụ sẵn có trong Windows. Bạn có thể tạo các lớp của mình từ các lớp có sẵn trong thư viện lớp cơ sở của .NET dựa trên cơ chế thừa kế đơn.
Thư viện lớp cơ sở của .NET rất trực quan và rất dễ sử dụng. Ví dụ, để tạo một tiến trình mới, bạn đơn giản gọi phương thức Start() của lớp Thread. Để disable một TextBox, bạn đặt thuộc tính Enabled của đối tượng TextBox là false. Thư viện này được thiết kế để dễ xài như là Visual Basic và Java. Tất nhiên là nó dễ sử dụng hơn các lớp của C++: các vỏ bọc ngoài các hàm API thô như GetDIBits(), RegisterWndClassEx(), và IsEqualIID().
Mặt khác, những nhà phát triển C++ luôn dễ dàng truy cập đến các API, ngược lại những nhà phát triển Visual Basic và Java đã bị giới hạn trong những thao tác hệ thống cơ bản mà ngôn ngữ đã từng ngôn ngữ đã cung cấp sẵn. Cái mới của thư viện lớp cơ sở .NET là kết hợp tính đơn giản của các thư viện Visual Basic và Java với hầu hết các đặc tính trong các hàm Windows API. Có nhiều đặc tính của Windows không sẵn có trong các lớp của thư viện .NET, trong trường hợp đó bạn cần phải gọi các hàm API, những đặc tính này thường là các đặc tính lạ, ít sử dụng. Những đặc tính thông dụng đều đã được hỗ trợ đầy đủ trong thư viện lớp của .NET. Và nếu bạn muốn gọi một hàm API, .NET gọi là “platform-invoke”, cơ chế này luôn bảo đảm tính đúng đắn của kiểu dữ liệu, vì vậy thao tác này không khó hơn việc gọi trực tiếp từ mã C++, nó được hỗ trợ cho cả C#, C++, và VB.NET.
WinCV, một tiện ích Windows-based, bạn có thể dùng để tham khảo các lớp, cấu trúc, giao diện, kiểu liệt kê trong thư viện .NET base class. Chúng ta sẽ tìm hiểu WinCV trong chương 6.
Dù rằng chủ đề của chương 5 bàn về các lớp cơ sở, nhưng thực tế, chúng tôi chỉ nói về các cú pháp của ngôn ngữ C#, chủ yếu quyển sách này chỉ cho các bạn về cách dùng các lớp khác nhau trong thư viện .NET base class. Một cách tổng quát .NET base classes bao gồm các vấn đề:
Các đặc tính lõi cung cấp bởi IL (chủ yếu là về các kiểu dữ liệu trong CTS, Chương 5)
Hỗ trợ Windows GUI và controls (Chương 7)
Web Forms (ASP.NET, 16)
Data Access (ADO.NET, 10)
Directory Access (Chương 13)
File system và registry access (Chương 12)
Networking và web browsing (Chương 20)
.NET attributes và reflection (Chương 5)
Truy xuất vào hệ điều hành Windows (các biến môi trường vv…, Chương 23)
COM interoperability (18)
Một cách tình cờ, hầu hết các thư viện lớp cơ sở của .NET được viết bằng C#!
Các Namespace
Namespace là cách mà .NET dùng để chống lại sự xung đột tên giữa các lớp. Chẳng hạn như trường hợp bạn có một lớp mô tả khách hàng gọi là lớp Customer, và sau đó một người khác cũng có một lớp giống như vậy.
Một namespace không chỉ là một nhóm các kiểu dữ liệu, mà nó làm cho tên của tất cả các kiểu dữ liệu trong cùng một không gian tên sẽ có tiếp đầu ngữ là tên của namespace đó. Nó cũng cho phép một không gian tên nằm trong một không gian tên khác. Ví dụ, hầu hết các hỗ trợ chung của các thư viện lớp cơ sở .NET đều nằm trong một không gian tên gọi là System. Lớp cơ sở Array nằm trong không gian tên này có tên đầy đủ là System.Array.
.NET yêu cầu tất cả các kiểu đều phải được định nghĩa trong một không gian tên, ví dụ bạn có thể đặt lớp Customer của bạn trong một không gian tên gọi là YourCompanyName. Lớp này sẽ có tên đầy đủ là YourCompanyName.Customer.
Nều một namespace không được khai báo rõ ràng, các kiểu sẽ được đặt vào một namespace toàn cục không tên.
Microsoft khuyên rằng các hỗ trợ của bạn nên đặt vào một namespace ít nhất là 2 cấp, cấp một là tên của công ty của bạn, cấp hai là tên của công nghệ hoặc là phần mềm của gói sản phẩm đó, chẳng hạn như YourCompanyName.SalesServices.Customer. Làm như vậy trong hầu hết các trường hợp đảm bảo rằng, các lớp trong ứng dụng của bạn không xung đột tên với các lớp của các tổ chức khác.
Chúng ta sẽ xem xét thêm về namespace ở chương 2.