1. Trang chủ
  2. » Luận Văn - Báo Cáo

Giáo Trình Lập Trình Nâng Cao - Đại Học Thủy Lợi.pdf

508 35 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Giáo Trình Lập Trình Nâng Cao
Tác giả Lý Anh Tuấn, Trần Thị Minh Hoàn, Nguyễn Thị Phương Dung
Trường học Trường Đại Học Thủy Lợi
Chuyên ngành Công Nghệ Thông Tin
Thể loại Giáo trình
Năm xuất bản 2021
Thành phố Hà Nội
Định dạng
Số trang 508
Dung lượng 39,34 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

TRƯỜNG ĐẠI HỌC THỦY LỢI KHOA CÔNG NGHỆ THÔNG TIN TS Lý Anh Tuấn (Chủ biên) ThS Trần Thị Minh Hoàn, ThS Nguyễn Thị Phưotig Dung GIÁO TRÌNH LẬP TRÌNH NÂNG CAO NHÀ XUẤT BẢN BÁCH KHOA HÀ NỘI Biên mục trên[.]

Trang 1

TRƯỜNG ĐẠI HỌC THỦY LỢI KHOA CÔNG NGHỆ THÔNG TIN

TS Lý Anh Tuấn (Chủ biên) ThS Trần Thị Minh Hoàn, ThS Nguyễn Thị Phưotig Dung

LẬP TRÌNH NÂNG CAO

Trang 2

Biên mục trên xuất bản phẩm của Thư viện Quốc gia Việt Nam

Trang 3

Giáo trình: LẬP TRÌNH NÂNG CAO

LỜI NÓI ĐÀU

C# là một ngôn ngữ tương đối mới đượcgiới thiệu khi Microsoftcông bố phiên bản NETFramework đầutiên vào tháng 7 năm 2000 Ke từ đó, mức độ phố biến của nó đã tăng lênrất nhiều và trở thành ngôn ngữ được lựa chọncho cả cácnhà phát triển Windows và Web

sử dụng NET Framework

Sự hấp dẫn của C# một phần đến từ cú pháp rõ ràng của nó, xuất phát từ C/C++ nhưnglược bỏ một số thứ trước đây thường gây chán nản cho các lập trình viên Mặc dù đượcđơn giảnhóa, C# vẫn giữđược sức mạnh của C++ và hiện tại không có lý do gì để không chuyến sang C# Ngôn ngữ không khó và là một ngôn ngữ tuyệt vời đế học các kỹ thuậtlập trình cơ bản Sự dễ học kết hợp với các khả năng của NET Framework làm cho C# làmột cách tuyệt vời đế bạn bắt đầu nghề lập trình

Các bản hành C# (hiện tại là C# 7.0), nằm trong các phiên bản tương ứng của NETFramework, được xây dựng những thành công sẵn có và cộng thêm nhiều tính năng hấp dẫn hơn nữa Các bản phát hành mới nhất của Visual Studio và dòng công cụ phát triển Express cũngmang đến nhiều cải tiến để giúp công việc của bạn dễdàng hơn và tăng đáng

kểnăng suất củabạn

C# làngôn ngữ tương đối mới và ở Việt Nam cókhá ít các chuyên gia cũng như lập trinhviên hiếu sâu về ngôn ngữ này, do vậy có rất ít tài liệu tiếng Việt chuyên sâu viết về lậptrinh c# Sau một thời gian tìm hiêu, làm việc và được tham gia giảng dạy lập trình C#,nhóm tác giả quyết định biên soạn cuốn sách “Giáo trình lập trình nâng cao" nhằm phục

vụ công tác giảng dạy vàhọc tập thuộc khối ngành công nghệ thông tin trong các trường đại học, cao đẳng cũng như làm tài liệu tham khảo cho các lập trình viên muốn tìm hiểu

Nội dung cuốn sách bao gồm những kiến thức căn bản của lập trình C# giúp người đọc dễdàng tiếp cập với ngôn ngữ này và đây cũng chínhlà một bước đệmgiúp bạn trở thành một lập trình viên NET Framework chuyên nghiệp Ngoài ra, cuốn sách cũng bao gồm một số chủ đề nâng cao như xử lý ngoại lệ, cơ chế ủy quyền và sự kiện, lập trình đồng thời, kết nối ADO NET và kết gán dữ liệu với các điều khiển Winform Để có thể đọc hiểu cuốn sách này người đọc cần nắm vững các kiến thức về: nhập môn lập trình, lập trình hướng

Trang 4

Giáo trình: LẬP TRÌNH NẰNG CAO

Cấu trúc cuốnsách:

Chương 1 - Giới thiệu ngôn ngữ C#

Chương mở đầu này giới thiệu về C# và cách nó khớp với môi trường NET Bạn sẽ tìm hiếu cácnguyên tắc cơ bảncủa việc lập trìnhtrong môi trường này và tìm hiếu vềcác công

cụphát triển ứng dụng C# là Visual C# 2010 Express (VCE) và Visual Studio 2010 (VS).Bạn cũng bắt đầu viếtứng dụng C# đầu tiên Điều nàysẽ minh họa một ứng dụng có thế dễdàng được thiết lập và chạy như thế nào trong môi trường phát triển vs, đồng thời giớithiệu một sốkhái niệm ngôn ngữc#

Chương 2 - Nen tảng ngôn ngữ C#

Trong chương này bạn sẽ tìm hiểu nhiều hơnvề các khái niệm cơ bản của ngôn ngữc#, từcác kiểu dữ liệu dựng sẵn tới các khái niệm biến, hằng, biểu thức và cách thao tác vớichúng Bạn sẽ tăng cường cấu trúc của ứng dụng bằng điều khiển luồng (rẽ nhánh và lệnh lặp) và bạn cũng xem xét một số kiểu dữ liệu phức bao gồm kiểu liệt kê, kiểu cấu trúc, mảng và xâu ký tự

Chương 3 - Lập trình hướng đối tượng trong C#

Trong chương này trước hết bạn sẽ tìm hiểu cách địnhnghĩa các kiểu củariêng mình bằng cách sử dụng các lớp và cách sử dụng chúng trong chươngtrình của bạn Bạn sẽ tìm hiểu cách tạo ra các đốitượngtừ các lớp Bạncũng sẽ họccách sử dụng cáclóp vàđối tượng để

mô hình hóa những thứ tồn tại trong thếgiới thực và cách sử dụng chúng làm đơn giản hóa nhiệm vụviết chươngtrình đểgiải quyết các bài toán phức tạp

Tiếp đó, bạn sẽ tìm hiếu về cách một lớp có thế đượcdẫn xuấttừ một lóp khác Bạn cũng

sẽ học cáchbạn có thể nạp chồng một toán tử đểthực hiện mã lệnh của riêng bạn khi một toántử cụ thể được sử dụng, thayvì sử dụng mã lệnh mặc định được cung cấpbởi c#

Cuối cùng, bạn sẽ tìm hiểu về giao diện Một giao diện chứa một danh sách các khai báo chẳng hạnnhư các khaibáo phươngthức vàthuộc tính Sau đó, bạn có thểyêu cầu lóp củabạn thựcthi một giao diện đã có

Chương 4 - Vào/ra tệp và chuỗi hóa đối tượng

Không gian tên System.IO cho phép bạn tương tác với cấu trúc thư mục và tệp trên mộtmáy tính Trong chương này, bạn sẽ học cách sao chép tệp và thưmục cũng như cách lấy thông tin về tệp tinvà thưmục bằng chương trình Bạn cũng sẽ tìm hiếu cách di chuyển dữliệu vào trong và ra khỏi các luồng khác nhau (ví dụ: dựa trên tệp, dựa trên xâu ký tự vàdựa trên bộ nhớ) Phần sau cùa chương này sẽ xem xét các dịch vụ tuần tự hóa đối tượng của nền tảng NET Nói một cách đơn giản, chuỗi hóa cho phép bạn làm bền trạngthái củamột đối tượng (hoặc một tập họp các đối tượng có liên quan) vào một luồng đế sử dụngsau Deserialization(như mong đợi) là quá trình kéomột đối tượng từ luồng vào bộnhớ đế

Trang 5

Giáo trình: LẬP TRÌNH NÂNG CAO

tiêu thụ bởi ứng dụng của bạn Sau khi bạn hiểu những điều cơ bản, bạn sẽ tìm hiểu cách tùy chỉnh quy trình tuần tựhóa bằng giao diện ISerializable và một tập hợp các thuộc tính NET

Chương 5 - Xử lý ngoại lệ

Điếm chính của chương này là thảo luận về cách xử lý các bất thường thời gian chạytrong

cơ sở mãlệnh của bạn thông qua việc sử dụng xử lý ngoại lệ có cấutrúc Bạnsẽkhông chỉtìm hiểu về các từkhóa C# cho phép bạnxử lý các vấnđề như vậy (try, catch, throw, when

và finally), mà bạn cũng sẽ hiểu được sự khác biệt giữa các ngoại lệ ờ mức ứng dụng vàmứchệ thống

Chương 6 - Tiểu trình và đồng bộ hóa

Chương này xem xét cách xây dựng các ứng dụng đa tiểu trình và minh họa một số kỹthuật bạn có thê sử dụng đê tạo mãan toàntiêu trình Bạn sẽ tìmhiêu cách sửdụng cáctiêu trình, cho phép bạn thực hiện songsong nhiều tác vụ Bạn sẽ học được rằng cómột số vấn

đề cần xem xét khi ứng dụng của bạn sử dụng nhiều tiểu trinh Cụthể, bạn cần lo lắng về việc đồng bộ hóa các tiểu trình và xử lý các bế tắc có thể phát sinh khi hai tiểu trình đang tranhgiành tàinguyên để thực hiện công việc của chúng

Chương 7 - Cơ chế ủy quyền và sự kiện

Mục đích của chương này này làm sáng tò kiểu ủy nhiệm Nói một cách đơn giản, một ủynhiệm NET là một đối tượng trỏ đến các phương thức khác trong ứng dụng của bạn Sử dụng kiểu này, bạn có thể xây dựng các hệ thống cho phép nhiều đối tượng tham gia vào một cuộchội thoại hai chiều Sau khi bạn đãxem xét việc sử dụng cácủy quyền NET, sau

đó bạn sẽ được giới thiệu từ khóa event c#, bạn có thể sử dụng từ khóa này để đơn giản hóa thao tác lập trình ủy nhiệm

Chương 8 - Collection và Iterator

Trong chương này bạn sẽ tìm hiểu về các collection Collection là các đối tượng lưu trữnhiều phần tửvà bạncó thể thay đồi khả năng bạn có thể thay đổi sau sức chứa của chúng sau khi tạo ra chúng Những đối tượng này cung cấp những cách linh hoạt để truy cập các phần tử của chúng Khi bạn thành thạo C#, bạn sẽ thấy các collection trở nên hữu ích khibạn cần thực hiện các thao tác dữ liệuphức tạp Bạn cũng học cách tạo ra các trình liệtkê

và sừ dụng chúngđể lặpqua một collection

Chương 9 - Xây dựng ứng dụng Windows Forms

Trong chương này bạn sẽ tìm hiểu về lập trình Windows Một chương trình Windows tận dụng môi trường đồ họa để hiển thị và sử dụng chuột, cũng như bàn phím, để nhập liệu.Bạn sẽ làm việc với Windows Forms và sử dụng một số điều khiển đi kèm với Visual

Trang 6

Giáo trình: LẬP TRÌNH NÂNG CAO

củaVisual Studio, việc phát triển giao diện người dùng và xử lý tươngtác người dùng rất đơn giản và thú vị Do không thể trình bày tất cả các điều khiển của Visual Studio, trongphạm vi cuốn sách, chương này chỉ xem xét một số điều khiển được sử dụng phổ biếnnhất, từnhãn và hộp văn bản đến list view và điều khiển tab

Chương 10 - Xử lý dữ liệu vói ADO NET

Trong chương này, bạn sẽ tìm hiểu cách truy cập cơ sờ dữ liệu từ một chương trình C# bằng ADO NET ADO NET là đối tượngdữ liệu hoạt động của NET Framework Bạnsẽ học cách kết nối với cơ sở dữ liệu và đưa ra các câu lệnh SQL để truy xuất và sửa đổi thông tin được lưu trữtrong cơ sở dữ liệu

Chương 11 - Kết gán dữ liệu với điều khiển Windows Forms

Chương này mở rộng thảo luận trong chương 11 về việc truy cập dữ liệu sử dụng ADO.NET Bạn sẽ tìm hiểu các kỹ thuật mà dữ liệu được “ràng buộc” với các điều khiển Windows Forms hiển thị dữ liệu.Bởi vì tất cả các điềukhiển dẫn xuất khả năng kết gán dữliệu của chúng từ lóp Control cơ sở, kiến thức về các thuộc tính và phươngthức củanó cóthểđượcáp dụng cho tấtcả cácđiều khiển

Đây là lần xuất bản đầu tiên của cuốn sách nên cho dù nhóm tác giả đã rất cố gắng, chắcchắn cuốn sách vẫn còn có những thiếu sót nhất định Nhóm tác giả rất mong nhận đượcnhữngý kiến đóng góp của các thầycô, các đồng nghiệp và bạn đọcđểcó thể tiếp tục hoàn thiện cuốn sách nhằm phục vụ tốt hơn nhu cầu học tập vàthamkhảo của sinh viên và các bạn đọc

Các tác giả

Trang 7

Giáo trình: LẬP TRÌNH NÂNG CAO

MỤC LỤC

LỜI NÓI ĐÀU 3

Chương 1 GIỚI THIỆU NGỒN NGỮ C# 15

1.1 .NET framework là gì? 15

1.1.1 .NET Framework bao gồm những gì? 16

1.1.2 Viết ứng dụngbang NET Framework 17

1.2 C# là gì? 20

1.3 Visual Studio 2010 22

1.3.1 Các sản phẩm Visual Studio 2010 Express 23

1.3.2 Solution 23

1.4 Viết một chương trình C# 23

1.4.1 Chương trìnhC# đầu tiên 24

1.4.2 Phát triến chươngtrình C# đầu tiên 33

1.4.3 Sửdụng Visual Studio 2010 Debugger 35

Bài tập 38

Chương 2 NÈN TÀNG NGỒN NGỮ C# 40

2.1 Kiểu dữ liệu 40

2.1.1 Kiểu dữ liệu dựng sẵn 41

2.1.2 Chọn kiểu dữ liệu 43

2.1.3 Chuyển đổi kiểu dữ liệu 44

2.2 Biến và Hằng 47

2.2.1 Gán giá trị xác định cho biến 47

2.2.2 Hằng 50

2.2.3 Kiểuliệt kê 52

Trang 8

Giáo trình: LẬP TRÌNH NÂNG CAO

2.2.4 Kiểu xâu ký tụ 55

2.2.5 Định danh 55

2.3 Biểu thức 55

2.3.1 Toán tử gán (=) 56

2.3.2 Toán tử toán học 56

2.3.3 Toán tử tăng và giảm 58

2.3.4 Toán tử quan hệ 61

2.3.5 Toán tử logic 62

2.3.6 Độ ưu tiên toán tử 64

2.3.7 Toán tử bangôi 66

2.3.8 Không gian tên 67

2.4 Điều khiển luồng 71

2.4.1 Rẽ nhánh không có điều kiện 71

2.4.2 Rể nhánh có điều kiện 73

2.4.3 Câulệnh lặp 80

2.5 Các kiểu dữ liệu phức 89

2.5.1 Kiểuliệt kê 89

2.5.2 Cấu trúc 92

2.5.3 Mảng 96

2.5.4 Thao tác xâu kýtự 104

Bài tập 109

Chương 3 LẬP TRÌNH HƯỚNG ĐÓI TƯỢNG TRONG C# 111

3.1 Xây dựng lớp - đối tượng 112

3.1.1 Địnhnghĩa lóp 112

3.1.2 Tạo đối tượng 117

3.1.3 Nạp chồng phương thức 121

3.1.4 Sử dụng các thành viên tĩnh 124

3.1.5 Hủyđối tượng 126

3.1.6 Truyền tham số 129

Trang 9

Giáo trình: LẬP TRÌNH NÂNG CAO

3.1.7 Đóng gói dữ liệu với thuộc tính 136

3.1.8 Nạp chồngtoántử 140

3.2 Ke thừa - đa hình 148

3.2.1 Quan hệchuyên biệt hóa và tổngquát hóa 148

3.2.2 Kế thừa 149

3.2.3 Đa hình 154

3.2.4 Lớp trừu tượng 163

3.2.5 Gốc củatất cả các lớp: Lóp Object 168

3.3 Giao diện 170

3.3.1 Thựcthi một giao diện 171

3.3.2 Thựcthi nhiều giao diện 174

3.3.3 Mờrộng giaodiện 175

3.3.4 Kết hợp cácgiao diện 175

3.3.5 Truy cậpcác phương thứcgiao diện 179

Bài tập 185

Chương 4 VÀO/RA TỆP VÀ CHUỖI HÓA ĐỐI TƯỢNG 187

4.1 Luồng (Stream) 187

4.2 Không gian tên System.IO 188

4.3 Các lóp thao tác tệp và thư mục 189

4.3.1 Sao chép tệp và thư mục 190

4.3.2 Lấy thông tinvề tệp và thư mục 198

4.4 Làm việc với tệp dữ liệu 203

4.4.1 Thứ tự củaviệc đọc một tệp 203

4.4.2 Các phương thứccho việc tạo và mở tệp 204

4.4.3 Viết vào một tệp văn bản 204

4.4.4 Đọc tệp văn bản 207

4.4.5 Viếtthông tinnhịphân vào tệp 208

4.4.6 Đọc thông tin nhị phân từ tệp 211

Trang 10

Giáo trình: LẬP TRÌNH NÂNG CAO

4.5 Chuỗi hóa đối tượng 214

4.6 Cấu hình đối tượng để chuỗi hóa 217

4.6.1 Định nghĩa các kiếu chuỗi hóa 218

4.6.2 Trườngpublic, trường private và thuộctính public 219

4.7 Chuỗi hóa đối tượng theo khuôn dạng 220

4.7.1 Chọn khuôn dạng chuỗi hóa 220

4.7.2 Chuỗi hóa đối tượng bangBinaryFormatter 223

4.7.3 Chuỗi hóa đối tượng bang SoapFormatter 226

4.7.4 Chuỗihóa đối tượng bang XmlSerializer 227

4.8 Chuỗi hóa tập đối tượng 229

Bài tập 231

Chương 5 xử LÝ NGOẠI LỆ 233

5.1 Ngoại lệ và Framework NET 234

5.1.1 Ngoại lệ là gì? 234

5.1.2 Các khối xây dựng của xử lý ngoại lệ NET 236

5.1.3 Lớp cơ sờ System.Exception 237

5.2 Ném ra và bắt ngoại lệ 239

5.2.1 Némra một ngoại lệ chung 243

5.2.2 Bắt ngoại lệ 244

5.3 Cấu hình trạng thái của ngoại lệ 246

5.3.1 Thuộc tính Targetsite 246

5.3.2 Thuộc tínhStackTrace 247

5.3.3 Thuộc tính HelpLink 248

5.3.4 Thuộc tính Data 249

5.4 Ngoại lệ mức hệ thống (System.SystemException) 252

5.5 Ngoại lệ mức ứng dụng (System.ApplicationException) 256

5.5.1 Xây dựng ngoại lệtùychỉnh, tình huống 1 256

5.5.2 Xây dựng ngoại lệtùychỉnh, tình huống2 259

Trang 11

Giáo trình: LẬP TRÌNH NÂNG CAO

5.5.3 Xây dựng ngoại lệtùy chỉnh, tình huống 3 260

5.6 Xử lý đa ngoại lệ 261

5.6.1 Câu lệnh catch tổng quát 265

5.6.2 Ném lại ngoại lệ 266

5.6.3 Ngoại lệnội tại 267

5.6.4 Khối finally 268

Bài tập 269

Chương 6 TIẾU TRÌNH VÀ ĐÒNG Bộ HÓA 272

6.1 Các tiểu trình 273

6.1.1 Khảo sát không gian tên System.Threading 273

6.1.2 Khởi động các tiếu trình 276

6.1.3 Đặt tên cho tiểu trình 280

6.1.4 Ráp nối các tiểu trình 282

6.1.5 Ngưng các tiểu trình bằng Sleep 283

6.1.6 Khai tử tiểu trình 284

6.2 Đồng bộ hóa (synchronization) 290

6.2.1 Sửdụng Interlocked 294

6.2.2 Sửdụng lock 296

6.2.3 Sửdụng Monitor 297

6.3 Điều kiện tranh đua và bế tắc 305

6.3.1 Điều kiện đua tranh 305

6.3.2 Bế tắc(deadlock) 305

6.4 Gom nhóm tiểu trình 306

Bài tập 309

Chương 7 cơ CHẾ ỦY QUYỀN VÀ sụ KIỆN 311

7.1 Delegate 311

7.1.1 Khai báo một lóp delegate 311

7.1.2 Tạo và sử dụng các đối tượng delegate 312

Trang 12

Giáo trình: LẬP TRÌNH NẰNG CAO

7.1.3 Đa kết nối delegate 316

7.1.4 Gọi các phương thức đối tượng bằng một delegate 319

7.1.5 Thiết lậpthứ tự thực thi bằng mảng delegate 324

7.2 Sự kiện 330

7.2.1 Khai báo một sự kiện 331

7.2.2 Khai báo lớp delegate đượcsử dụngvới một sự kiện 331

7.2.3 Khai báo lớp Reactor 332

7.2.4 Khai báo lớpReactorMonitor 334

7.2.5 Tạo và sử dụngđối tượng ReactorvàReactorMonitor 335

Bài tập 339

Chương 8 COLLECTION VÀ ITERATOR 343

8.1 ArrayList 345

8.1.1 Tạo và sử dụngArrayList 345

8.1.2 Cácthuộc tính và phương thức của lópArrayList 348

8.2 Hashtable 354

8.2.1 Tạo và sử dụngHashtable 354

8.2.2 Cácthuộc tính và phương thức của lóp Hashtable 357

8.3 SortedList 361

8.3.1 Tạo và sử dụng một SortedList 361

8.3.2 Cácthuộc tính và phương thức củalóp SortedList 364

8.4 Stack 369

8.4.1 Tạo và sử dụngStack 369

8.4.2 Cácthuộc tính và phương thức củalóp Stack 371

8.5 Queue 372

8.5.1 Tạo và sử dụng Queue 372

8.5.2 Cácthuộc tính và phương thức của lóp Queue 375

8.6 BitArray 375

8.6.1 Tạo và sử dụng BitArray 376

8.6.2 Cácthuộc tính phương thức của lóp BitArray 377

Trang 13

Giáo trình: LẬP TRÌNH NÂNG CAO

8.7 Danh sách liên kết 380

8.8 Sử dụng các trình liệt kê 383

8.9 Iterator 386

8.9.1 Các khối iterator 387

8.9.2 Câu lệnh yield 387

Bài tập 390

Chương 9 XÂY DựNG ỨNG DỤNG WINDOWS FORMS 392

9.1 Phát triển một ứng dụng Windows đơn giản 392

9.1.1 Tạo WindowsApplication 393

9.1.2 Kiếm tra tệp Forml.Design.es và Forml.cs 399

9.1.3 Làm việc với SolutionExplorer 405

9.2 Sử dụng các điều khiến Windows 406

9.2.1 Các điều khiển,thuộctính và sự kiện phổbiến 406

9.2.2 Các điều khiển cơ bản 410

9.2.3 Ví dụminh họa 427

Bài tập 431

Chương 10 xử LÝ DỮ LIỆU VỚI ADO NET 436

10.1 Kiến trúc tổng quan của ADO NET 436

10.2 Tong quan về các mô hình truy cập dũ’ liệu 438

10.2.1 Mô hình kết nối 438

10.2.2 Mô hình ngắt kết nối 440

10.3 Làm việc với mô hình kết nối 442

10.3.1 Lóp kết nối 442

10.3.2.Đối tượng Command 445

10.3.3.Đối tượngDataReader 451

10.4 Làm việc với mô hình ngắt kết nối 454

10.4.1 Lớp DataSet 454

10.4.2 Nạp dữ liệu vào DataSet 460

Trang 14

Giáo trình: LẬP TRÌNH NÂNG CAO

10.4.3 Cập nhậtcơ sở dữ liệu bằng DataAdapter 463

10.4.4 Định nghĩa mối quan hệ giữa các bảngtrong một DataSet 468

10.5 Lựa chọn giữa mô hình kết nối và mô hình ngắt kết nối 474

Bài tập 475

Chương 11 KẾT GÁN DỬ LIỆU VỚI ĐIỀU KHIÉN WINDOWS FORMS 477

11.1 Tổng quan về kết gán 477

11.2 Kết gán dữ liệu đơn giản 478

11.2.1 Kết gán với một danh sách 479

11.2.2.Kết gán đơn giản với ADO NET 480

11.3 Kết gán dữ liệu phức tạp với điều khiển danh sách 480

11.4 Ket gán dữ liệu một chiều và hai chiều 482

11.4.1 Hiệu ứngtrênnguồn dữ liệu củaviệc cập nhậtgiá trị điều khiển 482

11.4.2 Hiệu ứngtrên điều khiển củaviệc cập nhật nguồn dữ liệu 483

11.5 Sử dụng trình quản lý kết gán 484

11.6 Kết gán dữ liệu vói Datagridview 487

11.7 Ví dụ minh họa 491

Bài tập 499

BÀNG THUẬT NGỦ ANH VIỆT 503

TÀI LIỆU THAM KHẢO 506

Trang 15

Chương 1: GIỚI THIỆU NGÔN NGỮ C#

GIỚI THIỆU NGÔN NGỮ C#

Chương này giới thiệu tổng quan về C# và NET Framework, bao gồm vấn đề như vềnhững công nghệ này là gì, động lực sử dụng chúng vàchúng liên quan với nhau như thế

và sau đótrình bày cách viết một chương trìnhC#đơn giản ban đầu

Đầu tiên, chúng ta sẽ thảo luận chung về NET Framework Công nghệ này chứa nhiều khái niệm khó nắm bắt ban đầu Điều này có nghĩa là các thảo luận bao gồm nhiều khái niệmmới trong mộtnội dung ngắn Tuy nhiên, bạn cần phải xemnhanh các vấn đề cơ bản

để hiểu cách lập trình trong c# Ớ phần sau của cuốn sách, bạn sẽ gặp lại nhiều chù đềđược đề cậpở đây và khám phá chúngchi tiết hơn

Sau phần giới thiệu chung, chương này sẽ cung cấp mô tả cơbản về c#, bao gồm nguồn gốc và sự tương đồng của nó với C++ Tiếp đó, bạn sẽ xemxét haicông cụcơ bản được sử dụng trong cuốnsách này là Visual Studio 2010 (VS) và Visual c# 2010 Express (VCE)

Để làm quen với ngôn ngữ lập trình c#, chúng ta tiến hành theo cách truyền thống đó làbắt đầu với chương trình “Chào Mừng” Bạn sẽ tạo, biên dịch và chạy chương trình“Chào Mừng” đơn giản được viết bằng c# Việc phân tích ngắn gọn chương trình này sẽ giớithiệu các tính năng cơ bản của ngôn ngữc#

Cuối cùng, chúng ta sẽ tìm hiểu cách sử dụng một công cụ rất quan trọng trong bất kỳ môitrường phát triển nào là trình gỡ lỗi Cụ thể, chúngta sẽ tìmhiểu cách sử dụng trình gỡ lỗiVisual Studio 2010 Debugger đượctích hợp sẵn trong Visual Studio 2010

1.1 .NET FRAMEWORK LÀ GÌ?

.NET Framework (hiện ở phiên bản 4.8) là một nền tảng mang tính cách mạng được tạo bởi Microsoftđể phát triển các ứng dụng Khẳngđịnhnày khá mơ hồ nhưng cũng dựatrênmột số lý do chính đáng Trước hết, lưu ý rằng nền tảng này không ’phát triển ứng dụng trên hệ điều hành Windows.’’ Mặc dù phiên bản Microsoftcủa NET Framework chạy trên

hệ điều hành Windows, có thể tìm thấy các phiên bản thay thế hoạt động trên các hệ điều hành khác Một ví dụ là Mono, một phiên bản mã nguồn mở của NET Framework (bao gồm trình biên dịch c#) chạy trên một số hệ điều hành, bao gồm nhiều phiên bản khác nhau của Linux và Mac OS Ngoài ra, bạn có thể sử dụng Microsoft NET Compact Framework (về cơ bản là một tập con của NET Framework đầy đủ) trên các thiếtbị lóp trợ giúp kỹ thuật số cá nhân (PDA) và thậm chí một số điện thoại thông minh Một trong

Trang 16

.NET Framework đã được thiết kế để có thể được sử dụng với bất kỳ ngôn ngữ nào, bao gồm C# cũng như C++, Visual Basic, JScript và thậm chí cả với các ngôn ngữ cũ hơn như COBOL.

Đe làmđược điều này, các phiên bản NET dành riêng cho các ngôn ngữ này đãxuất hiện

và nhiều phiênbản khác cũng đang được phát hành Tất cả chúng không chỉ có quyềntruy cập vào NET Framework mà còn có thể giao tiếp với nhau Các nhà phát triển C# hoàn toàn có thể sử dụng mã được viết bởi các lập trìnhviên Visual Basic vàngược lại

Tất cả những điều này cung cấp một mức độ linh hoạt cực kỳ cao và góp phần làm cho việc sử dụng NET Framework có một triển vọng hấp dẫn

1.1.1 .NET Framework bao gồm những gì?

.NET Framework chủyếu bao gồm một thưviện mãkhống lồ mà bạnsử dụng ở các ngôn ngữ máy khách của mình (chẳng hạn như c#) bằng cách sử dụng các kỹ thuật lập trình hướng đối tượng (OOP) Thưviện này được phân loại thành các mô-đun khác nhau - bạn

sử dụng phần nào của nó tùy thuộc vào kết quả bạn muốn đạt được Ví dụ, một mô-đun chứa các khối xây dựng cho các ứng dụng Windows, một mô-đun khác để lập trình mạng

và một mô-đun khác để phát triển Web Một số mô-đun được chia thành các mô-đun con đặc thù hơn, chẳng hạn như mô-đun để xây dựng các dịch vụ Web nằm trong mô-đun đểphát triển Web

Mục đích là để các hệ điều hành khác nhau hỗ trợ một số hoặc tất cả các mô-đunnày, tùythuộcvào đặc điểm củachúng Ví dụ, một thiết bị PDA sẽ bao gồm sựhỗ trợcủa tất cả các chứcnăng NET cốt lồi nhưngkhông thể đòihỏi một số mô-đun đặc biệt hơn

Một phần của thưviện NET Framework địnhnghĩa một số kiêu cơ bản Một kiếu là mộtbiếu diễn của dữ liệu và chỉ rõ mộtsố tính chất cơ bản nhất củachúng (chang hạn như một

số nguyên có dấu 32 bit) giúp cho khả năng tương tác giữa các ngôn ngữ sử dụng NETFramework thuậntiện hơn Đây được gọi làHệthống kiểu chung (CTS)

Trang 17

Chương 1: GIÓI THIỆU NGÔN NGỮ C#

Cùng với việc cung cấp thư viện này, NET Framework cũng bao gồm NET Common Language Runtime (CLR), chịu trách nhiệm đảm bảo việc thựcthi củatất cả các ứng dụngđược phát triển bằng thư viện NET

1.1.2 Viết ứng dụng bằng NET Framework

Viết một ứng dụng bang NET Framework có nghĩa là viết mã lệnh (sử dụng bất kỳ ngônngữ nào hỗtrợFramework) bằng thư viện mã NET Trong cuốn sách này, bạn sử dụng vs

và VCE để phát triến ứng dụng của mình, vs là một môi trường phát triển tích hợp, mạnh

mẽ hỗ trợ C# (cũngnhư C++ được quản lý và không đượcquản lý, Visual Basicvà mộtsố ngôn ngữ khác) VCE là phiên bản rút gọn (và miễn phí) của vs chỉ hỗ trợ c# Uu điếm của các môi trường này là dễ dàng tích họp các tính năng NET vào mã lệnh của bạn Mã lệnh mà bạn tạo ra sẽ thuầntúy C#nhưng sử dụng NET Framework mọi chỗ và bạn có thế

sử dụng các công cụ hỗ trợ trong vs và VCE khi cầnthiết

Đe mã lệnh C# thực thi, nó phải được chuyển đổi thành ngôn ngữ mà hệ điều hành đích hiểu được, được gọi là mã gốc Việc chuyển đổi này được gọi là biên dịch mã lệnh, mộthành động đượcthực hiện bởi trình biên dịch Với NET Framework, đây là mộtquá trìnhgồm hai giai đoạn

Khi bạn biên dịch mã lệnh sử dụng thư viện NET Framework, bạn sẽ không ngay lập tức tạo ra mã gốc dành riêng cho hệ điều hành Thayvào đó, bạn biên dịch mã lệnh của mìnhthành mã Ngôn ngữ trung gian dùng chung (CIL) Mã này không đặc thù cho bất kỳ hệđiều hành (OS) nào và không đặc thù cho c# Các ngôn ngữ NET khác - ví dụ Visual Basic NET -cũng biên dịch sangngôn ngữ này ở giai đoạn đầu tiên Bước biên dịchnày được thực hiện bờivs hoặc VCEkhi bạn pháttriển các ứng dụng c#

Rõ ràng, cần làm thêmviệc để thực thi một ứng dụng Đó là nhiệm vụ của trình biên dịch tại chỗ (JIT- just-in-time), nó biên dịchCIL thành mã gốc dành riêng cho hệ điều hành và kiến trúc máyđang đượcnhắm đến Chỉ tại thời điểm này, hệ điềuhành mới có thể thực thiứng dụng Biên dịch tại chỗ nghĩa là mã CIL chỉđược biên dịch khi cầnthiết

Trước đây, thường cần phải biên dịch mã lệnh của bạn thành một số ứng dụng, mỗi ứng dụng nhắmđến một hệ điều hành và kiến trúc CPU cụ thế Thông thường, đây là một hìnhthức tối ưu hóa (ví dụ, đế cómã chạy nhanhhơn trên chipset AMD), nhưng đôi khi nó rấtrẳc rối (ví dụ, đế các ứng dụng làm việc cả trong môi trường Win9x và WinNT/2000) Việc này bây giờkhông cầnthiết, vì trình biên dịch JIT sử dụng mã CIL, độc lập với máy,

hệ điều hành và CPU Tồn tạimột số trìnhbiêndịch JIT, mồi trình nhắm đến một kiến trúckhác nhauvàtrình biên dịch thích họp được sử dụng đế tạo mã gốc cầnthiết

Trang 18

Giáo trình: LẬP TRÌNH NẰNG CAO

Cái hay của tất cả việc này lànó đòi hỏi ít công sứchơntừphía bạn - trên thực tế, bạn cóthế quên đi các chi tiết phụ thuộc hệ thống và tập trung vào chức năng thú vị hơn của mãlệnh củabạn

Các assembly

Khi bạn biên dịch một ứng dụng, mã CIL được tạo sẽ được lưu trữ trong một assembly Các assembly bao gồm cả các tệp ứng dụng thực thi mà bạn có thể chạy trực tiếp từ Windows mà không cần cho bất kỳ chương trình nào khác (các chương trình này có phần

mởrộng tên tệp exe) và các thư viện (cóphần mở rộng dll) để sử dụng bời cácứng dụng khác

Ngoài việc chứa CIL, các assembly cũng bao gồm thông tin meta (nghĩa là thông tin về thông tin chứatrong assembly,còn được gọi là siêudữ liệu)và các tàinguyên tùy chọn (dữliệu bổ sung được sử dụng bởi CIL, chẳng hạn như các tệp âm thanh vàhình ảnh) Thôngtin meta cho phép các assembly tự mô tả đầy đủ Bạn không cần thông tin nào khác đế sử dụng một assembly, nghĩa là bạn tránh được các tình huống chẳng hạn như thất bại trongviệc thêm dữ liệucần thiết vàoregistry hệ thống, , điều này thường là một vấn đề khi phát triến với các nền tảng khác

Điều này có nghĩa là việc triến khai các ứng dụng thường đơn giản như việc sao chép các tệp vàomột thư mục trên máy tính từxa Vì không có thông tin bổ sung nàođược yêu cầutrên các hệ thống đích,bạn có thể chỉ cần chạy mộttệp thực thi từ thưmục nàyvà (giả sử.NET CLR đã được càiđặt) thế là ổn

Tấtnhiên, bạn không nhấtthiếtmuốn bao gồmtất cả mọi thứ cầnthiết đế chạy ứng dụng ởmột chỗ Bạn có thể viết một số mã lệnh thực hiện các tác vụ theo yêu cầu của nhiều ứng dụng Trong các tình huống như vậy, thường hữu ích khi đặt mã có thể sử dụng lại ở mộtchỗ có thế truy cập được với tất cả các ứng dụng Trong NET Framework, đây là bộ đệm assembly toàn cục (GAC) Việc đặt mã trong GAC rấtđơn giản - bạn chỉ cần đặtassemblychứamã trong thư mục chứabộ đệmnày

Mã được quản lỷ

Vai trò của CLR không kết thúc sau khi bạn đã biên dịch mã lệnh của mình thành CIL vàtrinh biên dịch JIT đã biên dịch mã đó thành mã gốc Mã lệnh được viết bang NETFramework được quản lýkhi nóđược thực thi (một trạngthái thường được gọi làthời gian chạy) Điều này có nghĩa là CLR trông nom các ứng dụng của bạn bằng cách quản lý bộ nhớ, xử lý bảo mật, cho phép gỡ lỗi xuyên ngôn ngữ, Ngược lại, các ứng dụng khôngchạy dưới sự kiểm soát của CLR được gọi là không được quản lý và một số ngôn ngữ chẳng hạn nhưC++ có thế đượcsử dụngđế viết các ứng dụngđó, chúngví dụ như truycậpcác chức năng cấp thấp của hệ điều hành Tuy nhiên, trong C# bạn chỉ có thể viết mã lệnh chạy trong môi trường được quản lý Bạn sẽ sử dụng các tính năng được quản lý của CLR

và cho phép NETtự xử lý mọi tương tác với hệ điều hành

Trang 19

Chương 1: GIÓI THIỆU NGÔN NGỮ C#

Cơ chế thu dọn rác

Một trong những tính năng quan trọng nhất của mã được quản lý là khái niệm về cơ chếthu dọn rác Đây là phương pháp NET đảm bảo rằng bộ nhớ được sử dụng bởi một ứng dụng sẽ được giải phóng hoàn toàn khi ứng dụng không còn được sử dụng Trước NET, đâychủ yếu làtrách nhiệm của các lậptrình viên và một vài lỗi đơn giản trong mã lệnh cóthể dẫn đến cáckhối lớn bộ nhớ biến mất một cách bí ẩn do bị cấp phát vị trí sai trong bộ nhớ Điều đó thường đồng nghĩa với việc máy tính của bạn giảm tốc độ chạy và sau đó là

sựcố hệ thống

Cơ chế thu dọn rác NET hoạt động bằng cách kiểmtra định kỳ bộ nhớ máy tính của bạn

và xóa mọi thứ không còn cần thiết nữa khỏi nó Không có khung thời gian cho việc này;

nó có thế xảy ra hàng ngàn lần một giây, cứ sau vài giây một lần hoặc bất cứ khi nào, nhưng bạn có thể yên tâm rằng điều đó sẽ xảy ra

Ớ đâycó một số gợi ý cho các lập trình viên Bởivì công việc này được thực hiện tại một thời điếm không thể đoántrước, các ứng dụng phải được thiết kế với ý tưởng này Mã lệnh yêu cầu nhiều bộ nhớ để chạy nên tự dọn dẹp thay vì chờ việc thu gom rác xảy ra, tuynhiên việc này không quá khó như chúngta tưởng

Hình 1.1 minh họa tiến trình tạomột ứng dụng NET nhưđã thảo luận phíatrước, gồm các bước sau:

-Viếtmã lệnh bằng mộtngôn ngữ tương thích NET chang hạn như c#;

- Mã lệnh được biên dịch thànhCIL và được lưu trong một assembly;

-Khi mã này được thực thi, nó phải được biên dịch thành mã gốc (native code) bằng cách

sử dụng một trình biên dịch JIT;

- Mã gốc đượcthực thi trong ngữ cảnh CLR được quản lý, cùng với các ứng dụng và tiến trình đang chạykhác

Hình 1.1: Tiến trìnhbiên dịch C#

Trang 20

Giáo trình: LẬP TRÌNH NÂNG CAO

Liên kết

Lưu ý một điểm bố sung liên quan đến tiến trình này Mã C# biên dịch thành CIL không cần được chứa trong một tệp Có thế chia mã ứng dụng trên nhiều tệp mã nguồn, sau đóchúng được biên dịch lại thành một assembly duynhất Tiến trinh cực kỳ hữu íchnày đượcgọi là liên kết Nó cần thiết bởi vì sẽ dễ dàng hơnnhiều khi làm việc với vài tệp nhô hơnthay vì một tệp rất lớn Bạn có thế táchmã liênquanđến logic thành một tệpriêng lẻ đế nó

có thể được xử lỷ độc lập và sau đó thường bị lãng quên khi hoàn thành Điều này cũng giúp dễ dàng xác định vị trí các đoạn mã cụ thể khi bạn cần chúng vàcho phép các nhóm phát triến phân chia gánh nặng lập trình thànhcác phần có thê quản lý được, nhờ đó các cá nhân có the “check out” các đoạn mã để làm việc mà không có nguy cơ gây thiệt hại cho cácphầnkhác đã đạt yêu cầu hoặc các phần người khác đang làm việc

1.2 C# LÃ GÌ?

Như đã đề cập trước đây, C# là một trong những ngôn ngữ bạncó thể sử dụng để tạo các ứng dụng chạy trong NET CLR Nó là sự tiến hóa của ngôn ngữ c và C++, đượcMicrosoft tạo riêng đế hoạt động với nềntảng NET Ngôn ngữ C# đã được thiết kế đế kết họp nhiều tínhnăngtốt nhất từ các ngôn ngữ khác, đồng thời loại bỏ các hạn chế của chúng

Ngôn ngữ C# khá đơn giản, với chỉ khoảng 100 từ khóa và hơn mười kiểu dữ liệu dựng sẵn Tuy nhiên, ngôn ngữ C# có tính biểu cảm cao khi nó thực thi những khái niệm lậptrình hiện đại C# bao gồm tất cảnhững hỗ trợ cho cấu trúc, dựa trên component, lập trình hướng đối tượng mà bạn mong đợi từ một ngôn ngữ hiện đại được xây dựng trên nền tảng của C++ và Java

Phát triển ứng dụng bằng C# đơn giản hơn bằng C++, vì cú pháp ngôn ngữ của nó đơngiản hơn Tuy nhiên, C# là một ngôn ngữ mạnh mẽ và có rất ít việc bạn có thể làm trong C++ mà không thể làm trong C# Phải nói rằng, các tính năng đó của c#, song song với các tính năng nâng cao hơn của C++ chẳng hạn như truy cập trực tiếp và thao tác bộ nhớ

hệthống, chỉ có thế được thựchiện bằngcách sử dụngmã lệnh đượcđánh dấu là không antoàn Kỹ thuật lập trình nâng cao này có khả năng gây nguy hiểm (như tên gọi của nó) vì

cóthể ghi đè lên các khối bộ nhớ quan trọng của hệ thống vớikết quả thảm khốc Vì lýdonày và những vấnđề khác nữa, cuốn sách không bao gồm chủ đềnày

Đôi khi, mã C# dài hơn mộtchút so với C++ Đây làkết quả của việc C# là ngôn ngữ kiểu

an toàn (không giống như C++) Diễn giải đơn giản, điều này có nghĩa là một khi dữ liệu

đã được gán cho một kiểu, sau đó nó không thể tự chuyển đổi thành một kiểu không liên quan khác Do đó, các quy tắc nghiêm ngặt phái được tuân thủ khi chuyển đổi giữa các kiểu, điều đó có nghĩa là bạn thường phải viết nhiều mã lệnh hơn để thực hiện cùng mộttác vụ trong C#so với trong C++ Tuy nhiên, bạn nhận đượchai lợi ích: mãmạnh mẽ hơn,việc gỡ lồi đơn giản hơn và NET luôn có thể theo dõi kiểu của một mục dữliệu bấtcứ lúcnào Do đó, trong C# bạn không thể truy cập dữ liệu bằng cách tự do sử dụng con trỏ như trong C++ Ví dụ, nếu bạn có mảng byte, bạn không thể sao chép bất kỳ bon byte nào đótrực tiếp vào một biến kiểu int và bạn không thể hiểu mười byte nào đó là một mảng kiểu short, gồmnăm giá tri short

Trang 21

Chương 1: GIÓI THIỆU NGÔN NGỮ C#

C# chỉ là một trong những ngôn ngữ được cung cấp để phát triển NET, nhưng nó chắcchắn là ngôn ngữ tốt nhất Nó có lợi thế là ngôn ngữ duy nhất được thiết kế từ đầu cho NET Framework và là ngôn ngữ chính được sử dụng trong các phiên bản NET đượcchuyển cho các hệ điều hành khác Để giữ các ngôn ngữ chẳng hạn như phiên bản NETcủa Visual Basic giống nhất có thể với các phiên bản trước và tương thíchvới CLR, một số tính năngnhất định của thư viện mã NET không được hỗ trợ đầyđủ hoặc chí ít là yêu cầu

cú pháp bất thường Ngược lại, C# có thế sử dụng mọi tính năng mà thư viện mã NET Framework cung cấp Phiên bản mới nhất của NET bao gồmmột số bổ sung chongôn ngữ

c#, một phần để đáp ứng yêu cầu từ các nhà phát triển, làm cho nó thậm chí còn mạnh

mè hơn

Các ứng dụng bạn có thể viết với C#

Như thảo luận trước đây, vì NET Framework không hạn chế về kiểu ứng dụng, C# sử dụng NET Framework nên cũng không hạn về kiểu ứng dụng Tuy nhiên, sau đây là mộtvài kiếuứng dụngphố biến hơn:

• ứng dụng Windows: Các ứng dụng, như Microsoft Office, có giao diện thân thiện vớiWindows Điều này được thực hiện đơn giản bằng cách sử dụng mô-đun Windows Forms của NET Framework, đây làthư viện các control (chang hạn như các nút, thanh công cụ, menu, ) mà bạn có thể sử dụng để xây dựng một giao diện người dùngWindows (UI) Ngoài ra, bạn có thể sử dụng Windows Presentation Foundation (WPF)

đếxây dựng cácứng dụng Windows với nhiều tính linhhoạt và mạnh mẽ hơn

• ứng dụngweb: Các trang web như đã được thấy qua bất kỳ trình duyệt web nào .NETFramework bao gồm một hệ thống mạnh đế tạo ra nội dung web một cách linh hoạt,cho phép cá nhân hóa, bảo mật và hơn thế nữa Hệ thống này được gọi là ASP NET (Active Server Pages NET) và bạn có thể sử dụng C# để tạo các ứng dụng ASP NET bằng Web Forms Bạn cũng có thể viết các ứng dụng chạy bên trong trình duyệt bằng Silverlight

• Dịch vụweb: Một cách thú vị đểtạo các ứng dụng phântán đanăng Sử dụng các dịch

vụ web, bạn có thể trao đổi hầu như bất kỳdữliệunào quaInternet, bằng việc sử dụng cùng một cú pháp đơn giản không gắn với ngôn ngữ được sử dụng đế tạo ra một dịch

vụ web hoặc hệ thống mà nó cư trú Đe có các khả năng nâng cao hơn, bạn cũng có thể tạo ra các dịch vụ WindowsCommunication Foundation (WCF)

Bat kỳ kieu ứng dụng nào ở trên cũng có thế yêu cầu một hình thức truy cập cơ sờ dữ liệu nào đó, điều này cóthế đạt đượcbằng cách sử dụng phần ADO NET (Active Data Object NET) của NET Framework, thông qua ADO NET Entity Framework hoặc thông qua LINQ (Language Intergrated Query) của c# Nhiều tài nguyên khác có thể được cần đến, chẳng hạn như các công cụđể tạo ra các thànhphần mạng, xuất đồ họa, thực hiện các tác

vụ toán học phức tạp,

Trang 22

Giáo trình: LẬP TRÌNH NẰNG CAO

1.3 VISUAL STUDIO 2010

Trong cuốn sách này, bạn sử dụng các công cụ phát triến Visual Studio 2010 (VS) hoặcVisual c# 2010 Express (VCE) cho tat cả các chương trình C# của bạn, từ các ứng dụngdòng lệnh đơn giản đến các kiểu dự án phức tạp hơn Một công cụ phát triển hoặc môitrường phát triến tích họp (IDE), chang hạn như vs không phải là yếu tốthiết yếuđế pháttriển các ứng dụng c#, nhưng nó làm cho mọi thứ dễ dàng hơn nhiều Neu muốn, bạn cóthể thao táccác tệp mã nguồn C#trong trình soạn thào văn bản cơ bản, chẳng hạn như ứng dụngNotepadphổ biến và biên dịch mã thành các assembly bằng trình biên dịch dòng lệnh

là một phần của NET Framework Tuy nhiên, tại sao phải làmđiều này khi bạn có thể tận dụng được khả năng mạnh mẽ của các IDE?

Sau đây là danh sách liệt kê một số tính năng cùa Visual Studio khiến nó trở thành lựachọn hấpdẫn đếpháttriển NET:

• vs tự động hóa các bước cần thiết để biên dịch mã nguồn nhưng đồng thời cho phép bạn kiểm soát hoàn toànmọi tùy chọn được sử dụng nếu bạn muốn ghiđè lên chúng

• Trình soạn thảo vănbản vs được thiết kế dành cho các ngôn ngữ mà vs hỗ trợ (bao gồm c#) đểnó có thể pháthiện lỗi một cách thông minh vàđềxuất mã ở chồ thích họpkhi bạngõ Tính năng này được gọi làIntellỉSense.

• vs bao gồm các trìnhthiếtkế cho Windows Forms, Web Forms và các ứng dụngkhác,cho phép thiết kế kéo thảđơn giản các thành phần UI

• Nhiều kiểu dự án C# có thể được tạo ra bằng “mã soạn sẵn” đã có Thay vì bắt đầu từđầu, bạn sẽ thường thấy rằng cáctệp mã khác nhau đã có sẵn cho bạn, làm giảm lượngthời gian dành cho việc bắt đầu một dự án Điều này đặc biệt đúng với kiếu dự án

“Starter Kit”, chophép bạn phát triển từ một cơ sở ứng dụng đầy đủ chức năng Một sốstarter kit được bao gồmtrongbộ càivs và bạn có thể tìm thấyrất nhiều ờtrên mạng

• vs bao gồm một số trình hướng dẫn tự động hóa các tác vụ phổ biến, nhiều trìnhhướng dẫn có thể thêm mã phù họp vào các tệp hiện có mà bạn không phải lo lắng (hoặc trongmột số trường họp thậm chí là nhớ) về cú pháp chính xác

• vs chứa nhiều công cụ mạnh mẽ đế trực quan hóa và điều hướng thông qua các phần

tử củadựán của bạn, cho dùchúng là các tệpmã nguồn C#hoặc làcác tài nguyên khácnhư ảnh bitmaphoặc tệp âm thanh

• Cũng đơn giản như là viết các ứng dụng trong vs, bạn có thể tạo ra các dự án triển khai, giúp nó dễ dàng cung cấp mã cho khách hàng và để họ cài đặt nó mà không gặp nhiềurắc rối

• vs cho phép bạn sử dụng các kỹ thuật sửa lỗi nâng cao khi pháttriển các dự án, chẳnghạn như khả năng thực hiện từng bước mồi câu lệnh một lần trong khi vẫn theo dõi trạng tháiứng dụng củabạn

Trang 23

Chương 1: GIÓI THIỆU NGÔN NGỮ C#

1.3.1 Các sản phẩm Visual studio 2010 Express

Ngoài Visual Studio 2010, Microsoft cũng cung cấp một số công cụ phát triến đơn giản hơn như các sản phẩm Visual Studio 2010 Express Chúng được cung cấp miễn phí tạihttp://www.microsoft.com/express

Hai trong số các sản phấm này, Visual C# 2010 Express và Visual Web Developer 2010 Express, cho phép bạn tạo hầu hết mọi ứng dụng C# mà bạn có thể cần Cả hai đều hoạt động như các phiênbản rút gọn của vs vàgiữnguyên giao diện Mặc dù chúng cung cấpnhiều tính năng tương tự như vs, thiếu một số tính năng đáng chú ý, tuy nhiên điều đókhông ảnh hưởng nhiều đến việc bạn sử dụng các công cụ này cho các ứng dụng trongcuốn sách này

Trong cuốn sách này, bạn sử dụng VCE để phát triển các ứng dụng C# bất cứ khi nào cóthế và chỉ sử dụng vs khi cần thiếtcho một số chức năng nhất định Tất nhiên, nếu bạn có

vs thì không cầnsử dụng sản pham VCE

1.3.2 Solution

Khi bạn sử dụngvs hoặc VCE đế phát triến ứng dụng, bạn làm điều này bằng cách tạocác solution (giải pháp) Mộtsolution, theo thuậtngữvs và VCE, không chỉ là mộtứng dụng.Các solution chứa các project (dự án), có thể là các dựán WindowsForms, các dự ánWeb Form, Vì các solution có thể chứa nhiều project, bạn có thể nhóm các mã liên quan lạivới nhau ở một chỗ, ngay cả khi cuối cùng nó sẽ biên dịch thành nhiều assembly ờ nhiều nơi khác nhautrên đĩa cứng củabạn

Điều này rất hữu ích vì nó cho phép bạn làm việc với mã được chia sẻ (có thế được đặt trong GAC) cùng một lúc như là các ứng dụng sử dụng mã này Việc gỡ lỗi mã dễ dàng hơn rất nhiều khi chỉ có một môi trường phát triển được sử dụng, bời vì bạn có thế thựchiệntừng câu lệnh trong nhiều mô-đun mã lệnh

1.4 VIẾT MỘT CHƯƠNG TRÌNH C#

Thông thường, trong việc phát triển phần mềm, người phát triển phải tuân thủ một quytrình phát triển phần mềm một cách nghiêm ngặt và quy trình này đã được chuẩn hóa.Nhưng trong phạm vi tìm hiểu một ngôn ngữ mới và viết những chương trình nhỏ thìkhông đòi hỏi khắt khe thực hiện theo quy trình Tuy nhiên, để giải quyết được vấn đề thì bạn cũng cầnphải thực hiện đúng theo các bước sau Đầutiên làphải xác địnhvấn đề cầngiải quyết Nếu không biết rõ vấn đề thì bạn không thể tìm được phương pháp giải quyết Sau khi xác định được vấn đề, bạn có thể nghĩ ra các kế hoạch để thực hiện Sau khi cómột kế hoạch, bạn có thế thực thi kế hoạch này Sau khi kế hoạch được thực thi, bạn phải kiếmtra lại kết quảđê xem vấn đề được giải quyết xong chưa Logicnày thường được ápdụng trongnhiều lĩnh vực khác nhau, trongđó có lập trình

Khi tạo một chương trìnhtrong C# hay bất cứ ngôn ngữ nào, chúng ta nên tuân theo những

Trang 24

Giáo trình: LẬP TRÌNH NÂNG CAO

- Xácđịnh mụctiêu củachươngtrình;

- Xác định các phương phápgiải quyết vấn đề;

-Tạo một chươngtrình đế giải quyết vấn đề;

-Thực thi chương trìnhđểxemkếtquả

Ví dụ để viết chương trình xử lý văn bản đơn giản, bước đầu tiên cần xác mục tiêu chính của chương trình đó là xây dựng chương trình cho phép soạn thảo và lưu trữ các chuỗi ký

tự hay văn bản Neu không có mục tiêu thì không thế viết được chươngtrình hiệu quả.Bước thứ hai là quyết định phương pháp để viết chương trình Bước này xác định nhữngthông tin nào cần thiết được sử dụng trong chương trình, các phương thức nào được sử dụng Từnhững thông tin này bạn rútra được phương phápđể giải quyết vấn đề

Bước thứ ba là bước cài đặt, ở bước này có thể dùng các ngôn ngữ khác nhau để cài đặt, tuy nhiên, ngôn ngữ phù hợp để giải quyết vấn đề một cách tốt nhất sẽ được chọn Trong phạm vi của cuốn sách này, chúng ta mặc định là dùng c#, vì đơn giản là chúng ta đang tìm hiểu nó Và bước cuối cùng làphần thực thi chương trình để xem kết quả

1.4.1 Chương trình C# đầu tiên

Theo thông lệ, chúng ta thường bắt đầu một cuốn sách lập trình bằng một chương trình minh họa hiển thị lời chào Trong phần này, bạn sẽ tạo, biên dịch và chạy chương trình C#

đơn giản đầu tiên hiển thị lời chào Việc phân tích chương trình này sẽ giới thiệu các tínhnăng chínhcủa ngôn ngữ c#

Chươngtrình 1.1 minh họa các yếu tố cơ bản của một chươngtrìnhC#đơn giản

Trang 25

Chương 1: GIÓI THIỆU NGÔN NGỮ C#

Việc biên dịch và chạy Chương trình 1.1 sẽ hiển thị dòng chữ “Chao Mung” ở màn hìnhconsole Tuy nhiên, trước khi bạn biên dịch và chạy nó, hãy tìm hiểu kỹ hơn về chương trình đơn giản này Các mục sau đây sẽ giới thiệu các yếu tố cơ bản của một chương trình C# dựa vào Chương trình 1.1, còn chi tiết về từng yếu tố sẽ được trình bày trong các chương tiếptheo

Lớp, đối tượng và kiếu

Điều cốt lõi của lập trình hướng đối tượng là tạo ra các kiểumới Kiểu biểudiễn một thứ gì

đó Đôi khi nó có thể là trừu tượng như là một bảng dữ liệu, một tiểu trình; đôi khi nó cóthê hữu hình hơn như một nút lệnh trong một cửa số Kiêu định nghĩa các thuộc tính (properties) vàcác hànhvi ứng xử (behavior) chung củamột thứ đó

Neu chương trình của bạn tạo ra ba nút lệnh OK, Cancel, Help, trong một cửa sổ thì thựcchất là bạn đang sử dụng ba thếhiện của một kiếu nút lệnh và các nút nàycùng chia sẻ các thuộc tính và hành vi chung với nhau Ví dụ, các nút có các thuộc tính như kích thước, vịtrí, nhãn tên (label), tuy nhiên mỗi thuộc tính các nút không nhất thiếtphải giống nhau vàthường thì chúng khác nhau, như nút OK có nhãn là “OK”, Cancel có nhãn là “Cancel” Tương tự, các nút này có các hành vi chung như khả năng kéo, kích, đáp ứng sự kiện nhấn, mặc dù cách chúng thực hiện các hànhvi này cóthế khác nhau Tấtcảcác nút này được xem làcùng một kiểu

Cũng như nhiều ngôn ngữ lập trình hướng đối tượng khác, kiểu trong C# được định nghĩabởi một lớp (class) và các thể hiện cụ thể của lớp được gọi làđối tượng (object) Trong các chươngkế tiếp sẽ lý giải trong C# còn có các kiểukhác ngoài kiểu lớp như kiểu liệt kê, cấutrúc và kiểu ủy quyền(delegates) Tuy nhiên hiện tạihãy tập trung vào các lóp

Quay trởlại Chương trình 1.1, chương trinh này chỉ có một kiểu đơn giản là lóp Đe địnhnghĩa một kiểu trong C# bạn phải dùng từkhoá class, tiếp sau làtên lóp, trong trường họpnày, tên lóp là ChaoMung Sau đó, định nghĩa các thuộc tính và hành động cho lóp Cácđịnh nghĩathuộc tính vàhành động củamột lóp C# phải nằmtrongcặp dấu { }

Ghi chú: Khai báo lớp trong C# không có dấu; sau dấu ngoặc } cuối cùng của lớp

Vàkhác với lóp trong C/C++ làchia thành phần khai báo vàphần định nghĩa Trong c#,

định nghĩa một lớpđược gói gọntrong cặp dấu { } sau tênlớp và trong cùng một tệptin

Phương thức

Hai thành phần chính cấu thành một lóp là thuộc tính (hay tính chất) và phươngthức (hayhàm) là hành vi của đối tượng Trong c#, hành vi được định nghĩa như một phương thứcthành viên của lóp

Trang 26

Giáo trình: LẬP TRÌNH NẰNG CAO

Phương thức là các hàm được định nghĩa trong lớp Do đó, ta còn có thể gọi các phương thứcthành viên là các hàm thành viên trongmột lóp Các phươngthức định nghĩacác hành động mà lóp có thểthực hiện được cùng với cách thức thực hiện hành động đó Thông thường, tên của phương thức thường được đặt theo tên hành động, ví dụ như DrawLineQhay GetString()

Tuy nhiên, trong Chương trình 1.1 vừa trình bày, còn có một phương thức thành viên làMain() Đây là một phương thức đặc biệt, nó không mô tả hành động nào của lóp mà chỉđịnh cho CLR rằng đây là phương thức chính hoặc phương thức đầu tiên củalớp

Ghi chú: Trong c#, phương thức Main() được viết hoa ký tự đầu và có thể trả về giá trị void hay int

Khi chương trình thực thi, CLR gọi phương thức Main() đầu tiên, phương thức Main() làđầu vào của chương trình và mỗi chương trình phải có một phương thức Main() Đôi khichương trình C# có thế có nhiềuphương thức Main() nhưng lúc này ta phải thêm vào các chỉ dẫn biên dịch đểbáo cho CLRbiết đâu là phương thứcMain() đầu vào duy nhất trong chươngtrình

Việc khai báo phương thức được xem như là một sự giao ước giữa người tạo ra phươngthức và người sử dụng phương thức Thường thường, người tạo ra phương thức và người

sử dụng phương thức sẽ cùng là một lập trình viên, nhưng không phải lúc nào cũng như vậy Chẳng hạn trường hợp: một thành viên của nhóm phát triển sẽ tạo ra phương thức vàmột lập trình viên khác sẽ sử dụngnó

Các chương trình bao gồm các phương thức gọi lẫn nhau Khi một phương thức gọi mộtphương thứckhác, nó có thể truyền các giá trị cho phương thức mà nó gọi Các giá trị này được gọi là đối số hoặc tham số và phương thức được gọi có thể trảvề giátrị cho phươngthức đã gọi nó; giá trị được trả về được gọi tắtlà giá trị trảvề

Trên thực tế, để khai báo một phương thức, bạn chỉ rõ một kiểu giá trị trả về theo sau làmộtđịnh danh, theo sau làcặp dấu ngoặc đơn để trốnghoặc chứa các tham số Ví dụ:

int myMethod (intsize);

khai báo một phương thức tên là myMethod() nhận một tham số: một số nguyên sẽ đượctham chiếu tớitrong phương thức là size

Một tham số là một giátrị được truyền vào phương thức Thông thường, giá trị đó sẽ đượcthao tác trong phương thức,nó có thế hữu ích trong phươngthức đó hoặc cho bấtkỳ ai gọi phương thức Giống như việc trao chiếc áo của bạn,một cái nút và một cái kimcho người thợmay Cái kim giúpthợ may thực hiện may, nhưng cái kim không thay đối Tuy nhiên,nếu bạn maymắn,mối quan hệ giữa nút vàáo sẽ thay đổikhithợ may hoàn thành công việc

Trang 27

Chương 1: GIÓI THIỆU NGÔN NGỮ C#

Trên thực tế, cóhai cách đểtruyền tham số cho một phương thức: theo giá trị và theo tham chiếu Neu bạn truyền tham số theo giá trị, bạn truyền một bản sao và khi phương thứcthực hiện xong, giá trị ban đầu (trongphươngthức gọi) không thay đổi Trong trường họp

đó, điều mà bạn đang nói với người thợ may là “may một nút giống như nút này vào áocủa tôi”

Neu bạn truyền tham số bằng tham chiếu, kết quả là bạn đang truyền bản thân nút đó Khi phương thức được gọi trảvề, giá trị bạn truyềnvào có thể bị thay đổi (nó cóthể được gắn vào cái áo)

Một phương thứccó thể trảvề một giá trị duy nhất (trong trường hợp này trả về cái áo củabạn) Trong trường họp phương thức myMethod, một số nguyên được trả về Kiểu giá trị trả về nói cho người sử dụng phương thức biết loại dữ liệunào phương thức sẽ trả về khi phương thức chạyxong

Một số phương thức không trả về một giá trị nào cả; chúng được xem là trả về trốngkhông,được chỉ rõbởi từ khóa void Vídụ:

Cách thứ hai là truyền vào một đối tượng, nhưng làm cho đối tượng đó là một collection.Collection được đề cập đến trong Chương 8

Chú thích

Một chương trình được viếttốt thì cần phải có chú thích các đoạn mãđược viết Các đoạn chú thích này sẽ không được biên dịch và cũng không tham gia vào chương trình Mục đích chính là làm cho đoạn mã nguồn rõràng và dễ hiểu

TrongChương trình 1.1 có một dòng chú thích:

// Xuatra man hinh

Kiểu chú thích cho một dòng bắt đầu bằng hai dấu gạch chéo (//) Đây là chú thích kiểu C++, nó chỉ ra bằng tất cả văn bản bên phải dấu chú thích được coi là chú thích và trình biên dịch sẽ bỏ qua chúng

C# còn cho phép kiểu chú thích chomột hay nhiều dòng, còn được gọi là chú thích kiểu c,

khi đó bạn bắt đầu phần chú thích bằng dấu mở chú thích (/*) và kết thúc chú thích bằng dấu đóng chú thích (*/)

Trang 28

Giáo trình: LẬP TRÌNH NÂNG CAO

Chương trình 1.2: Minh họa dùng chú thích trên nhiều dòng.

class ChaoMung

{

staticvoid MaỉnQ

{

/* Xuat raman hĩnh chuoi 'Chao Mung'

Su dung ham WriteLine cua lop System.Console

Trang 29

Chương 1: GIÓI THIỆU NGÔN NGỮ C#

Mục tiêu của lập trình viên ờ đây là chú thích mã cũ, nhưng đặt nó ờ vị trí thuận tiện.Chương trình vẫn biên dịch bình thường, tuy nhiên thực tế là mã này rất khó đọcvà do đórất cóthể dẫn đếncác vấn đề về bảotrì trong quá trình sử dụng Đẻ khắc phục, bạn nên đặt chú thích ờ bên trên, bên dướihoặc bên phải dòng lệnh

Ngoài hai kiểu chú thích trên như trong C/C++ thì C# còn hỗ trợ thêm kiểu chú thích thứ

ba, kiểu này chứa các định dạng XML nhằm xuất ra tệp tin XML khi biên dịch để tạo tàiliệu cho mã nguồn

ứng dụng Console

Chương trình C# 1.1 đơn giản ờ trên là một ứng dụng console Kiếu ứng dụng này không

có giao diện đồ họa người dùng (GUI), giống như các ứng dụng thường thấy trongWindows Chúng giao tiếp với người dùng bằng cách nhập và xuất văn bản thông qua console chuẩn, tiêu biểu là một cửa sổ dòng lệnh hoặc DOS trên máy tính của bạn Trong các chương hướng tới việc xây dựng các ứng dụng trên Windows hay Web chúng ta mới

sử dụng giao diện đồ họa người dùng Cònđế tìmhiếu về ngônngữ C# thuần túy thì cáchtốt nhấtlà chúng ta viết các ứngdụng console

Tất cả những gì phương thức Main() thực hiện trong chương trình này là viết dòng chữ

“Chao Mung” vào đầu ra chuẩn (thường là cửa sổ dòng lệnh) Đầu ra chuẩn được quản lýbởi một đối tượng có tên là Console Đối tượng Console này có một phương thức gọi làWriteLine(), nó lấy một xâu ký tự (một tập các ký tự) và viết vào đầu ra chuẩn Khi bạn chạy chương trình, mànhình dòng lệnhhoặc DOS sẽ hiếnthị dòng chữ “Chao Mung”

Bạn gọi một phương thức bằng toán tử dấu chấm (.) Do đó, để gọi phương thức ConsoleWriteLine(), bạn viết Console.WriteLine( ) và điền vào xâu ký tựcần in

Không gian tên

Như chúng ta đãbiết, NET cung cấp mộtthư viện đồ sộ các lóp vàthư viện nàycó tên làFCL (Framework Class Library) Trong đó, Console chỉ là một trong hàng ngàn lớp cótrong thư viện Mỗi lớp có một tên, vì vậy FCL có hàng ngàn tên như là ArrayList,Hashtable, FileDialog, DataException, EventArgs

Điều này làm nảy sinh một vấn đề, đó là 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 Do vậy, sớm hay muộn bạn có thể tạo ra một đốitượng và cung cấp cho nó một cái tên đã được sử dụng rồi Điều gì sẽ xảy ra nếu bạnmua một lớp Hashtable từ một nhàcung cấp khác, chỉ để phát hiện ra rằng nó xung đột với lóp Hashtable mà NET cung cấp? Hãy nhớ rằng, mỗi lớp trong C# phải có một tên duy nhất

và bạn thường không thể đổi tên cáclớp trongmã lệnh của nhà cung cấp

Giải pháp để giảiquyết vấn đềnày là sử dụng một các khônggian tên (namespace), không gian tên 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 không giantênđãđịnhnghĩa

Trang 30

Giáo trình: LẬP TRÌNH NẰNG CAO

Giả sử tôi nói với bạn Toàn là một kỹ sư, từkỹ sư phải đi kèmvới một lĩnh vực nhất địnhnào đó, vì nếu không bạn sẽ không biết chắc anh ta thiết kế xây dựng, viết phần mềm hay điều khiển tàuhỏa

Trong tiếng Việt, tôi có thế nói rõ rằng “anh ta là một nhà khoa học” hoặc “anh ta là một

kỹ sư tàuhỏa” Khi đó một lậptrình viên C#nóivới bạn rằng Toàn là một KhoaHoc.KySuthay vì là một TauHoa.KySu Không giantên (trong trường họp này là KhoaHoc, TauHoa)

sẽ hạn chế phạm vi của từ theo sau nó Nó tạo ra một “không gian” mà ở đó tên đó cónghĩa

Hơn nữa, rất có thể Toàn không chỉ là loại KhoaHoc.KySu bất kỳ Có thể Toàn tốt nghiệp Đại học Thủy Lợi với bằng kỹ sư phần mềm, chứ không phải là kỹ sư cơ khí Do đó, đối tượng là Toàn có thể được định nghĩa cụ thể hơn là KhoaHọc.PhanMem.KySu Sự phân lóp này ngụý rằng không gian tên PhanMem có ý nghĩa trongkhông giantên KhoaHọc vàrằng KySu trong ngữ cảnh này có ý nghĩa trong không gian tên PhanMem Neu sau này bạn biết rằng Lan là một VanTai.TauHoa.KySu, bạn sẽ khôngbị nhầm lẫn về việc cô ấy làloại kỹ sư nào Hai cách sử dụng của từ KySu có thế cùng tồn tại, mỗi từ bên trong không gian têncủa riêng nó

Tương tự,nếu biết rang NET có lópHashtable trongkhông gian tên System.Collections của

nó, chúngta cũng đãtạo một lóp Hashtable trong không gian tên ProgCSharp.DataStructures,

sẽ không có xung độtbời vì mỗi lớptồn tại trong khồng gian têncủa riêng nó

Trong Chương trình 1.1, tên của lóp Console được chỉ rõ là nằm trong không gian tên System bằng cách sử dụng mã:

System.Console.WriteLineO;

Toán tử (.)

Trong Chương trình 1.1 ởtrên, toán tử (.) đượcsử dụng để truycập đến phương thức và dữliệu trong một lớp (trong trường hợp này là phương thức WriteLineO) vàhạn chế tên lớp trong một không gian tên cụthể (trong trường họp này định vị Console trong không gian tên System) Chúng làm việc tốtbởivì trong cả hai trường họp,chúng tađang “khoansâu”

đểtìm chính xác thứ mà chúng tamuốn Mức cao nhất làkhông gian tên System (chứatất

cả các đối tượng System mà FCL cung cấp); kiểu Console tồn tại trong không giantên này

và phương thứcWriteLine() là một hàm thành viên của kiểu Console

Trong nhiều trường họp, không gian tên được phân cấp Ví dụ, không gian tên Systemchứa mộtsố không gian tên con như Configuration, Collections, Data và bản thân không gian tênCollections còn được chiathành nhiều không gian tên con

Không gian tên giúp bạn tố chức và ngăn cách các kiểu của bạn Khi bạn viết một chương trình C# phức tạp, bạn có thế muốn tạo một phân cấp không gian tên của riêng bạn vàkhông giới hạn chiềusâucủa phân cấp này Mục đích của không giantên làgiúp bạn phân chiavàchinh phục sự phức tạp của hệthống phân cấp đối tượng của bạn

Trang 31

Chương 1: GIÓI THIỆU NGÔN NGỮ C#

Từ khóa using

Đẻ làm cho chương trình gọn hơn và không cần viết không gian tên cho từng kiểu, C# cung cấp từ khóa using, theo sau từ khóa này là không gian tên hay không gian tên con chứa các kiểu đế chỉ ra bạn đang sử dụng các kiếu từ không gian tên hoặc không gian tên con này

Chẳng hạn, bạn có thể dùng dòng lệnh sauở đầu chương trinh để chỉ rabạn đang sử dụng các kiểu từkhông gian tên System:

using System;

Khi đó trong chương trìnhnếu bạnsử dụng kiểu Console thì không cần phải viếtđầy đủ làSystem.Console mà chỉ cần viết Console thôi Xem minh họa cụ thế trong Chương trình 1.4 sau đây:

Lưu ý rằng phải đặt câu using Systemtrước định nghĩa lóp ChaoMung Visual Studio 2010 mặc định bao gồm bốn câu lệnh using trong tất cả các ứng dụng console (System,System.Collections.Generic, System.Linq và System.Text)

Mặc dù bạn có thể chỉ địnhrằng bạn sử dụng không giantên System, không giống với mộtvài ngôn ngữ khác, bạn không the thể chỉ định rằng bạn đang sử dụng đối tượng System.Console nhưtrong Chươngtrình 1.5 sau đây:

Trang 32

Giáo trình: LẬP TRÌNH NÂNG CAO

Chương trình 1.5: Mã lệnh không hợp lệ trong c#.

Chương trình trên khi biên dịch sẽ nhận được một thông báo lỗi nhưsau:

A usingnamespace directive can onlybe applied

to namespace; "System.Console' isa class not a namespace

Lệnh using co the giảm rat nhiều thao tác gõ bàn phím, nhưng nó có thế hủy hoại lợi thế củakhông gian tên do việc có nhiều tên không phân biệtgây ra sự hồn loạnphạm vi Giảipháp phổ biến là sử dụng lệnh using với các không gian tên dựng sẵn và với các không gian tên của riêng bạn, nhưng có lẽ không nên dùng cho các thành phần từ bên thứ ba

Phân biệt chữ thường và chữ hoa

Cũng giống như C/C++, C# là ngôn ngữ phân biệt chữ thường với chữ hoa, điều này cónghĩa rangwriteLine thì khác với WriteLine và cũng khác với WRITELINE Đáng tiếc làkhác với VB, môi trường phát triển C# sẽ không tự sửa các lỗi này, nếu bạn cùng một từbằng haicách khác nhauthì bạn có thể đãđưa vào chương trình một lỗikhó tìm

Đe tránh việc lãng phí thời gian và công sức, người ta phát triển một số qui ước cho cáchđặt tên biến, hằng, phương thức, Qui ước trong cuốn sách này là dùng cú pháp “lạc đà” (camel notation) để đặt tên biến và dùng cú pháp Pascal để đặt tên lóp, không gian tên, phương thức, hằng và thuộc tính Ví dụ: myDictionary là tên biến được đặt theo cú pháp lạc đà DrawLine là tên hàm, ColorBackground là tên thuộc tính được đặt theo cú pháp Pascal

Từ khóa static

Phương thức Main() trong chương trình minh họa trên có nhiều hơn một chỉ định Trong chươngtrình phương thức Main() đượckhai báo với kiểu trảvề làvoid, tức là phương thứcnàykhông trả về bất cứ giá trị nào cả Bạn có thể thấyngay trước từ khóa void là từ khóastatic:

static void MaỉnQ

Trang 33

Chương 1: GIÓI THIỆU NGÔN NGỮ C#

Từ khóa này chỉ ra rằng phương thức Main() có thể được gọi mà trước đó không cầnphải tạo ra một đối tượng kiếu ChaoMung Những vấn đề liên quan đến khai báo lóp, phươngthức, hay thuộctính sẽ được trình bày chi tiết trong các chương tiếp theo

1.4.2 Phát triển chương trình C# đầu tiên

Như đã nói ở phần trước, mặc dù chúng ta có thể phát triển phần mềm bên ngoài VisualStudio NET, IDE này cung cấp nhiều các tiện ích hỗ trợ người phát triến như: hỗ trợ canh

lề, soạnmã với màu sắc, tính năng IntelliSense, tích hợp các tệp tintrợ giúp, Quan trọngnhấtlàIDEcó một công cụ debug mạnh và nhiều công cụ trợ giúp phát triển ứng dụng khác.Cuốn sách này giả sử rằng người đọc đang sử dụng Visual Studio 2010 Tuy nhiên, phầnhướng dẫn sẽ tập trung nhiều vào ngôn ngữ vàplatform hơn là công cụ phát triển Bạn cóthể sao chéptất cả các ví dụ vào trong một trình soạn thảovăn bàn như Notepad hay Emacs,lưu chúng dưới dạng tệp văn bản, với phần mờ rộng là cs và biên dịch chúng bằng trình biêndịch dòng lệnh c#, chương trình sau đóđược phân phối cùng NET Framework SDK

□ Tạo và chỉnh sửa chương trình

Đe tạo chương trình “Chào Mừng” trong IDE, lựa chọn mục Visual Studio 2010 từ menu Start hoặc biểu tượng của nó trên desktop, sau khi khởi động xong chương trình, chọn tiếp chức năng File —► New —► Project từ menu Chức năng này sẽ gọi cửa so New Project.(Nếu chương trình Visual Studio 2010 được chạy lần đầutiên, cửa sổNew Project sẽxuất hiện tự động mà không cần kích hoạt) Hình 1.2hiên thị cửa sô New Project

Hình 1.2: Tạo một ứng dụngconsole C#trongVisual Studio2010

Trang 34

Giáo trình: LẬP TRÌNH NÂNG CAO

Đe tạo ứng dụng, ta lựa chọn mục Visual C# trong cửa số “Project Type” phía bên trái và chọn Console Application trong cửaso Templates (Neu bạn sử dụng phiênbản express củaVisual c#,bạn không cầnthực hiện buớc thứ nhất mà đitrực tiếp đến ứngdụng console)

Lúc này bạn có thể nhập tên cho dự án (tức là ChaoMung) và lụa chọn thu mục nơi bạn luu trữ các tệp tin Bạncũng có thế nhập tên của solution chứa dựán và lựa chọn xemliệu bạn có muon Visual Studio 2010 tạo một thu mục cho solution mới của bạn hay không.Cuối cùng, click vào OK và một cửa số mới sẽ xuất hiện, ở đó bạn có thê nhập vào mã lệnh của Chuơng trình 1.1, nhutrình bày trongHình 1.3:

static void Main(string[] args) {

} } }

100 % ’

Hình 1.3: Trìnhsoạn thảo được mởra cho dự án mới của bạn

Lưu ý rằng Visual Studio 2010 tạo ra một không gian tên dựa trên tên của project

mà bạn vừa cung cấp (ChaoMung) và thêm vào chỉ dẫn using cho System, System.Collections.Generic, System.Linq và System.Text bởi hầu như mọi chương trình

màchúngta viết sẽcần sử dụng các kiểutừ các không gian tênnày

Visual Studio 2010 tạo một lóp có tên là Program mà bạn có thế tự do đối tên Khi bạnđối tên lớp, cũng là một ý tưởng hay để đối tên tệp (Classl.cs) Nếu bạn đối tên tệp, VisualStudio sẽ tự động đổi tên lóp cho bạn Ví dụ, để tái tạo Chương trình 1.1, đổi tên tệpProgram.es (được liệt kê trong cửa so Solution Explorer) thành chaomung.es và đối tênChương trình thành ChaoMung (nếu bạn thực hiện theo thứtự ngược lại, Visual Studio sẽ đốitên lóp thành chaomung)

Cuối cùng, Visual Studio 2010 tạo ramột khung chương trình để giúp bạn bắt đầu Để táitạo Chương trình 1.1, hãy xóa các đối so (stringf] args) khỏi phươngthức Main() Sau đó,saochép haidòng sau vào phần thân của MainQ:

Trang 35

Chương 1: GIÓI THIỆU NGÔN NGỮ C#

//Xuat ra man hinh

System.Console.WriteLinef'Chao Mung");

Neu bạn không sử dụng Visual Studio 2010, hãy mở Notepad, nhập mã từ Chương trình1.1 và lưu tệp dưới dạng tệp văn bản có tênchaomung.es

□ Biên dịch và chạy chương trình

Có nhiều cách để biên dịch và chạy chương trình “Chào Mừng” từ trong Visual Studio Thôngthường, bạn có thể hoànthành mọi tác vụbằng cách chọn các lệnh từ thanhcông cụmenu Visual Studio, bằng cách sử dụng các nút và trong nhiều trường họp, bằng cách sử dụng các tổ họp phím tắt

Ví dụ, đế biên dịch chương trình Chào Mừng”, nhấn Ctrl-Shift-B hoặc chọn Build —► Build Solution Một sự lựa chọn khác là bạn có thế nhấp vào nút Build trên thanh công cụBuild (bạn có thể cần nhấp chuột phải vào thanh công cụđể hiển thị thanh công cụ Build) Thanh công cụ Build được hiển thị trong Hình 1.4; nút Build nằm ngoài cùng bên trái vàđược tô sáng

Hình 1.4: Thanh công cụ Build

Đe chạy chương trình “Chào Mừng” mà không cần trình gỡ lỗi, bạn có thể nhấn Ctrl-F5trên bànphím, chọn Debug —► StartWithout Debugging từ thanh công cụ IDE menu hoặcnhấn nút Start Without Debugging trên thanh công cụ IDE Build, như được hiến thị trong Hình 1.5 (bạn có thể cần tùy chỉnh thanh công cụ của mình làm cho nút này xuất hiện) Bạn có thế chạy chương trình mà không cần xây dựng chương trình trước; tùy thuộc vào cách thiết lập tùy chọn của bạn (Tools —► Options), IDE sẽ lưu tệp, xây dựng và chạy nó,

có thể yêu cầu bạn cho phép ở mỗi bước

’ Any CPU 'v Start Without Debugging (CtrkFSJ^,

Hình 1.5: Nut Start Without Debugging

1.4.3 Sử dụng Visual studio 2010 Debugger

Khi mới học lập trình, nhiều người rất ít sử dụng đến công cụ debug của Visual Studio Khi chương trình gặp lỗihay cho ra kết quả sai, bạn không biết tại sao và cố gắng đọc lại

Trang 36

Đầu tiên, chúngtaxem xét một chương trình ngắn viết bang C# có chứa nhiều biến cục bộ trong Hình 1.6 Để xem bên trong một phương thức bạn cầnsử dụng một breakpoint(Điểmdừng) ở một vị trí trong khối lệnh C# của bạn Ở đây chúng ta sẽ thêm một breackpointvào đầu chương trình Trên thanh bên trái của tab mã nguồn, bạn nhấp chuột vào dòng muon debug hoặc đưa con chạy tới dòng muon debug và nhấn F9, bạn sẽ thấy một dấu hình tròn màu xám trước dòng đó (như trong Hình 1.6) Lưu ý là có thể đặt nhiều breakpoint khác nhau Đe xóa một breakpoint, bạn nhấp chuột vào nó một lần nữa.

Hình 1.6: Đặt breakpointtrong chươngtrình c#

Đe bắt đầu debug, bạn nhấp chuột vào nút Start Debugging có dạng mũi tên màu xanh ởthanh công cụ trongVisual Studio như Hình 1.7 bên dướihoặc nhấn F5

Hình 1.7: Nút Start Debugging

Trang 37

Chương 1: GIỚI THIỆU NGÔN NGỮ C#

Khi chương trình chạy đến dòng lệnh mà bạn đặt breakpoint, nó sẽ dừng lại ờ đó vàchương trình debug sẽ được mở ra Bây giờ bạn có thể sử dụng tính năng locals kiểm tra cácbiến cục bộ củachươngtrình bằng cách vào menu Debug —► Windows —► Locals (hoặc

an Alt F4) Khiđó cửa sổ Locals sẽ xuất hiện như trong Hình 1.8:

Hình 1.8: CửasổLocals trong chếđộ debugTrong cửa sổ Locals, bạn có thể thấy các biến cục bộ trong chương trình của mình và giá trị của nó ởthời điếm chương trình tạm dừng Chức năng này cho bạn biết giá trị của mỗibiếnthayđồi như thế nào khi chươngtrìnhchạy đến đó

Trong chế độ debug, bạn có thể nhấp chuột vào nút mũi tên màu xanh ờ thanh công cụ Debug để đến breakpoint tiếp theo Bạn cũng có thể sử dụng các nút lệnh sau trên thanh công cụ Debug để tiến hành chạytừng bước (xem minh họa trong Hình 1.9)

- Step into (Fl 1): Công cụ debug sẽthiết lập con chạythực thi ờ lệnh đầu tiên củaphươngthức đầu tiên được gọitừ dòng hiện thời

- Step over (F10): Công cụ debug sẽ thực thi các dòng lệnh còn lại của phương thức vàthiết lậpcon chạy thực thi ở dòng lệnh ngay sau lời gọi phương thức

- Step out: Neu bạn không quan tâm tớiviệc một phươngthức cụ thể làm việc như thế nào, bạn có thểbòqua nó (phương thức sẽ tiếptục thực thi)

Trang 38

Giáo trình: LẬP TRÌNH NÂNG CAO

- Microsoft Visual Studio (Administrator) Debug I Data Tools Test Window Help

Delete All Breakpoints Ctrl* Shift* F9

o Disable All Breakpoints

Hình 1.9: Các lựa chọn trong chế độ debug

Ờ ví dụnày, bạn có thể sử dụng step over(F10) ở tất cả các bước thực hiện, điều này cho phép bạn xem giá trị củatất cả các biến

Công cụ debug của Visual Studio 2010 là khá toàn diệnvà hiệu quả cho hàu hết các vấn

đề Nó bao gồm nhiều sự lựa chọn hơn, bao gồm: Call Stack, Command Windows, Exception, Autos Bạn CO the trả lời nhiều câu hỏi lập trình bằng cách viết các chương trình minh họa ngắn và kiếm tra chúng trong công cụ debug Một công cụ debug tốt, theo nghĩa nào đó, là công cụ giảng dạy mạnh mẽ nhấtvới một ngôn ngữlập trình

BÀI TẬP

1.1 Nêu các lý do ngôn ngữC# được xem là một ngôn ngữ lập trình tốt?

1.2 Nêu các bước cơ bản của quá trình xây dựngmột chươngtrìnhc#?

1.3 Kháiniệm và ý nghĩa của namespace trong c#? Điều gì xảy ra nếu nhưngôn ngữ lậptrình không hỗtrợnamespace?

1.4 Nhập vào chương trinh sau và biên dịch nó Cho biết chương trình thực hiện công việc gì?

Trang 39

Chương 1: GIỚI THIỆU NGÔN NGỮ C#

int radius = 4;

constdouble PI = 3.14159;

double circum, area;

area= PI * radius*radius;

circum= 2 * PI * radius;

//in kết quả

Console.WriteLinef'Ban kinh = {0},PI = {1}", radius, PI);

Console.WriteLinef'Dien tich {0}", area);

Trang 40

Giáo trình: LẬP TRÌNH NÂNG CAO

Chương 2 NỀN TÀNG NGÔN NGỮ C#

Chương 1 đã trình bày một chương trình C# rất đơn giản Tuy nhiên, nó cũng đù phức tạp

để chúng ta phảibở qua một số chi tiết nhất định Chương này sẽ làm rõ nhữngchitiết này bằng cách đi sâu hơn vàocú phápvà cấu trúc của ngôn ngữ c#

Trong chương này, chúng ta sẽ thảo luận về hệ thống kiểu trong c#, bao gồm các kiểu dựng sằn như int, bool và các kiểu người dùng định nghĩa (các kiểudo bạn tạora) như các lớp, cấu trúc và giao diện Chúng ta cũng xem xét các nguyên tắc cơ bản về lập trình, chẳng hạn như cách tạo và sử dụng biến và hằng Tiếp đó, chúngta tìm hiểu về kiểu liệt kê, kiếu xâu ký tự, định danh

Phần tiếp theo của chương sẽ giới thiệu về các toán tử, bao gồm các toán tử gán, logic,quan hệ và toán học Tiếp đó là phần giải thích và minh họa cách sử dụng các câu lệnhđiều khiển luồng, bằng các câu lệnh if, switch, while, do while, for và foreach

Cuối cùng, chúng ta sẽ xem xét thêm một vài kiểu dữ liệu bạn có thể sử dụng bao gồm:kiểu liệt kê, cấu trúc và mảng Các kiểu này phức tạp hơn các kiểu dữ liệu đơn giản đôi chút nhưng chúng có thể làm cho công việc của bạn dễ dàng hơn nhiều Chúng ta cũng sẽ khám phá một chủ đề hữu ích khác liên quan đến xâu kýtự, đó là thao tác cơ bản về xâu ký tự

Mặc dù C# chủ yếu liên quan đến việc tạo và thao tác với đối tượng, tốt nhất nên bắt đầu với các khối xây dựng cơ bản: các yếu tố màtừđó các đối tượng được tạo Chúng bao gồmcác kiểu dựng sẵn là một phần nộitại của ngôn ngữ C# cũng như các yếu tố cú pháp của c#

2.1 KIỂU DỮ LIỆU

C# là ngôn ngữ lập trình định kiểu mạnh, ngôn ngữ định kiểu mạnh là ngôn ngữ phải khai báo kiểu củamỗi đối tượng khi tạo (kiểu số nguyên, số thực, kiểu chuỗi, kiểu Control ) vàtrìnhbiên dịchsẽ giúp người lập trình không bị lỗi khi chỉ cho phép mỗi kiểudữ liệu đượcgán bằng một loại dữ liệu Kiếu dữ liệu của một đối tượng là một dấu hiệu đế trình biên dịch nhận biết kích thước của một đối tượng (ví dụ, kiểuint có kích thước là4 byte) và khả năng của nó (ví dụ, một đối tượng button có thế phản ứng khi đượcnhấn, )

Ngày đăng: 17/07/2023, 08:06

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w