MỤC LỤC
LỜI NÓI ĐẦU .................................................................................................................... 4
CHƢƠNG 1: TỔNG QUAN VỀ ASP.NET..................................................................... 5
1.1. Giới thiệu tổng quan về công nghệ .NET ............................................................... 5
1.1.1. Sự ra đời của .NET ........................................................................................... 5
1.1.2. .NET Framework .............................................................................................. 5
1.1.3. Ƣu điểm chính của .NET Framework .............................................................. 7
1.2. Giới thiệu về ASP.NET .......................................................................................... 8
1.3. Cài đặt Visual Studio.NET ..................................................................................... 8
1.3.1. Các phiên bản .NET ......................................................................................... 8
1.3.2. Cài đặt Visual Studio.NET ............................................................................... 8
1.3.3. Giao diện Visual Studio.NET .......................................................................... 9
1.4. Xây dựng ứng dụng Web ...................................................................................... 11
1.4.1. Tạo mới ứng dụng Web ................................................................................. 11
1.4.2. Lƣu ứng dụng Web ........................................................................................ 12
1.4.3. Chạy ứng dụng Web ....................................................................................... 12
1.5. Bài tập ................................................................................................................... 13
CHƢƠNG 2: NGƠN NGỮ LẬP TRÌNH C# ................................................................ 14
2.1. Giới thiệu về ngơn ngữ lập trình C# ........................................................................ 14
2.2. Cấu trúc một chƣơng trình C# ................................................................................. 15
2.3. Các kiểu dữ liệu ....................................................................................................... 15
2.3.1. Kiểu dữ liệu xây dựng sẵn.............................................................................. 16
2.3.2. Chọn kiểu dữ liệu ........................................................................................... 17
2.3.3. Chuyển đổi kiểu dữ liệu ................................................................................. 18
2.3.4. Kiểu dữ liệu mảng .......................................................................................... 18
2.3.5. Kiểu dữ liệu xâu ............................................................................................. 20
2.4. Biến và hằng ............................................................................................................ 20
2.5. Biểu thức và toán tử ................................................................................................. 21
2.6. Các lệnh điều khiển.................................................................................................. 22
2.6.1. Các câu lệnh rẽ nhánh .................................................................................... 22
2.6.2. Các câu lệnh lặp ................................................................................................ 27
2.7. Xây dựng lớp và đối tƣợng ...................................................................................... 31
2.7.1. Xây dựng lớp .................................................................................................. 31
2.7.2. Tạo đối tƣợng ................................................................................................. 35
2.8. Xử lý ngoại lệ........................................................................................................... 36
2.8.1. Câu lệnh throw ............................................................................................... 37
2.8.2. Câu lệnh catch ................................................................................................ 38
2.8.3. Câu lệnh finally .............................................................................................. 43
2.9. Bài tập ...................................................................................................................... 45
CHƢƠNG 3: LÀM VIỆC VỚI WEB FORM ............................................................... 51
3.1. ASP.NET và Web Form ....................................................................................... 51
3.1.1. Mô hình lập trình phía máy chủ ..................................................................... 51
3.1.2. Giới thiệu về ASP.NET .................................................................................. 52
3.1.3. Cơ chế xử lý file ASP.NET phía máy chủ ..................................................... 54
3.1.4. Web Form trong ASP.NET ............................................................................ 58
3.1.5. Tìm hiểu cấu trúc trang ASP.NET ................................................................. 58
3.1.6. Các phƣơng pháp viết mã trong ASP.NET .................................................... 60
3.1.7. ASP.NET Server Control ............................................................................... 62
3.1.7. Điều khiển Validation Controls ................................................................... 119
3.2. Tạo và sử dụng Custom Control ......................................................................... 135
3.2.1. Giới thiệu User Custom Control .................................................................. 135
3.2.2. Các bƣớc tạo User Custom Control ............................................................. 135
3.2.3. Thêm các thuộc tính, phƣơng thức và sự kiện vào UCC ............................. 137
3.2.4. Truy cập thuộc tính, phƣơng thức của các phần tử con trong UCC ............ 139
3.3. Các đối tƣợng cơ bản trong ASP.NET................................................................ 143
3.3.1. Đối tƣợng Request........................................................................................ 144
3.3.2. Đối tƣợng Response ..................................................................................... 147
3.3.3. Đối tƣợng Server .......................................................................................... 150
3.3.4. Đối tƣợng Session ........................................................................................ 151
3.3.5. Đối tƣợng Application ................................................................................. 153
3.3.6. Đối tƣợng Cookies ....................................................................................... 155
3.4. Tệp tin quản lí và cấu hình ứng dụng ................................................................. 158
3.4.1. Tệp tin Global.asax ...................................................................................... 158
3.4.2. Tệp tin Web.config....................................................................................... 160
3.5. Làm việc với giao diện Web ............................................................................... 163
3.5.1. Master Page .................................................................................................. 163
3.5.2. Cascading Style Sheets - CSS ...................................................................... 167
3.5.3. Theme và Skin .............................................................................................. 172
3.5.4. Navigation Controls ..................................................................................... 176
3.6. Bài tập ................................................................................................................. 186
CHƢƠNG 4: TRUY NHẬP CƠ SỞ DỮ LIỆU........................................................... 195
4.1. Giới thiệu chung .............................................................................................. 195
4.2. Kiến trúc của ADO.NET ................................................................................. 196
4.3. Tìm hiểu trình cung cấp dữ liệu của ADO.NET ............................................. 197
4.4. Các namespace của ADO.NET ....................................................................... 199
4.5. Các lớp thao tác với cơ sở dữ liệu ................................................................... 204
4.5.1. Lớp Connection ............................................................................................ 204
4.5.2. Lớp Command .............................................................................................. 209
4.5.3. Lớp DataReader ........................................................................................... 218
4.5.4. Lớp DataAdapter .......................................................................................... 222
4.5.5. Lớp DataSet .................................................................................................. 223
4.5.6. Lớp DataColumns ........................................................................................ 224
4.5.7. Lớp DataRow ............................................................................................... 227
4.5.8. Lớp DataTable .............................................................................................. 227
4.6. Data Binding ....................................................................................................... 228
4.6.1. Giới thiệu DataBinding ................................................................................ 228
4.6.2. Data Binding ................................................................................................ 229
4.6.3. Các điều khiển Data Source ......................................................................... 232
4.7. Các điều khiển liên kết dữ liệu ........................................................................... 237
4.7.1. Điều khiển GridView ................................................................................... 237
4.7.2. Điều khiển DataList ..................................................................................... 253
4.7.3. Điều khiển Repeater ..................................................................................... 254
4.7.4. DetailView ................................................................................................... 255
4.7.5. FormView..................................................................................................... 256
4.7.6. ListView ....................................................................................................... 257
4.8. Bài tập ................................................................................................................. 257
CHƢƠNG 5: WEB SERVICES ................................................................................... 266
5.1. Giới thiệu về Web Services ................................................................................ 266
5.2. Kiến trúc và các thành phần Web Services ......................................................... 266
5.3. Tạo Web Services ............................................................................................... 270
5.4. Kiểm tra Web Services ....................................................................................... 271
5.5. Sử dụng Web Services ........................................................................................ 272
5.5.1. Sử dụng Web Services do mình tạo .................................................................... 272
5.5.2. Sử dụng Web Services đƣợc cung cấp trên mạng .............................................. 276
5.6. Bài tập ................................................................................................................. 279
TÀI LIỆU THAM KHẢO............................................................................................. 281
LỜI NÓI ĐẦU
Ngày nay việc sử dụng Internet và các dịch vụ trên Internet là một phần tất yếu của
cuộc sống. Công nghệ Internet và các ứng dụng phát triển trên nền Web và Internet đã và
đang làm cho đời sống của chung ta thay đổi. Internet là một nguồn thông tin quý giá
phục vụ cho việc học tập, nghiên cứu, kinh doanh, giải trí. Vì vậy ngày càng có nhiều ứng
dụng trên Internet sử dụng giao diện Web. Các cơng nghệ phát triển trên Internet ngày
một hồn thiện.
Trên cơ sở đó, mơn học Lập trình trên nền Web đã đƣợc đƣa vào giảng dạy và
nghiên cứu tại các khoa, ngành tin học, toán tin, thƣơng mại điện tử hay các ngành có liên
quan khác trong các trƣờng đại học. Môn học này sẽ là tiền đề cung cấp cho sinh viên và
các nhà nghiên cứu các lý thuyết từ cơ sở cho đến ứng dụng nhằm xây dựng và xử lý
thơng tin dƣới dạng trang Web, nhờ đó cho phép họ tiếp cận dễ dàng hơn với các kỹ thuật
lập trình hiệu quả các ứng dụng trên nền Web và Internet.
Tập bài giảng này nghiên cứu về công nghệ phổ biến và tiên tiến nhất đƣợc dùng
đề tạo các ứng dụng chạy trên nền Web của MicroSoft là ASP.NET, ngơn ngữ lập trình
C#, truy xuất dữ liệu qua ADO.NET và Web Services đáp ứng đƣợc việc học tập và
nghiên cứu của sinh viên Đại học, Cao đẳng ngành Công nghệ thơng tin và Khoa học máy
tính Trƣờng Đại học Sƣ phạm kỹ thuật Nam Định.
Tập bài giảng gồm 5 chƣơng
Chƣơng 1: Tổng quan về ASP.NET
Chƣơng 2: Ngôn ngữ lập trình C#
Chƣơng 3: Làm việc với Web Form
Chƣơng 4: Truy nhập cơ sở dữ liệu
Chƣơng 5: Web Services
Nội dung các chƣơng cung cấp kiến thức về thiết kế và lập trình xử lý dữ liệu Web
dựa trên cơng cụ Visul Studio .Net. Sau mỗi phần có các ví dụ giúp sinh viên dễ tiếp cận
và nắm bắt vấn đề. Cuối mỗi chƣơng đều có bài tập giúp cho sinh viên ôn tập và hệ thống
kiến thức môn học.
Trong quá trình biên soạn nhóm chúng tơi đã bám sát chƣơng trình môn học đƣợc
nhà trƣờng ban hành, đã cố gắng thể hiện nội dung cơ bản, hiện đại gắn gắn với yêu cầu
thực tế. Tuy nhiên do khả năng có hạn, hạn chế về thời gian nên không tránh khỏi sai sót.
Rất mong nhận đƣợc sự đóng góp chân thành của đồng nghiệp và bạn đọc để tập bài
giảng ngày càng hồn thiện hơn.
NHĨM TÁC GIẢ
CHƢƠNG 1: TỔNG QUAN VỀ ASP.NET
1.1. Giới thiệu tổng quan về công nghệ .NET
1.1.1. Sự ra đời của .NET
Trong lĩnh vực phát triển phần mềm có rất nhiều ngơn ngữ lâp trình đƣợc sử dụng
để phát triển (nhƣ Delphi, Ada, Cobol, Fortran, Basic, LISP, Prolog, Foxpro, Java, Pascal,
C/C++, VB.NET, VC++, C#...). Mỗi ngơn ngữ đều có những ƣu và nhƣợc điểm riêng.
Những ƣu điểm có tính đặc thù của từng ngôn ngữ là điều đã đƣợc khẳng định.
Tuy nhiên, rất khó để có thể tận dụng đƣợc sức mạnh của tất cả các ngơn ngữ lập trình
trong một dự án phần mềm, chẳng hạn khơng thể hoặc rất khó khăn để viết một ứng dụng
có sử dụng đồng thời cả ngôn ngữ Visual Basic và Java hay Foxpro với Delphi v.v… Nói
cách khác, việc “liên thơng” giữa các ngơn ngữ là gần nhƣ không thể.
Cũng do sự khác biệt giữa các ngơn ngữ lập trình mà việc tiếp cận hay chuyển đổi
sang ngơn ngữ lập trình mới sẽ tốn rất nhiều thời gian. Vì vậy, khi các dự án sử dụng
ngơn ngữ lập trình khác nhau thì chi phí cho chuyển đổi sẽ là rất lớn gây lãng phí thời
gian không cần thiết và chất lƣợng phần mềm chắc chắn khơng cao.
Từ những hạn chế trong q trình phát triển phần mềm nhƣ đã nêu, địi hỏi phải có
một cách tiếp cận sao cho tối ƣu nhất, vừa đảm bảo tốn ít chi phí chuyển đổi vừa đảm bảo
nhiều ngƣời có thể tham gia cùng một dự án mà khơng nhất thiết phải viết trên cùng một
ngơn ngữ lập trình, đồng thời ứng dụng phải hoạt động tốt trong môi trƣờng mạng
Internet. Đó chính là lý do để Microsoft cho ra công nghệ phát triển phần mềm mới .NET.
1.1.2. .NET Framework
Thơng thƣờng, mỗi ngơn ngữ lập trình đều có một tập các thƣ viện riêng, chẳng
hạn: VC++ thì có thƣ viện chính là msvcrt.dll; Visual Basic thì có svbvm60.dll …Các
thƣ viện này chứa các hàm, thủ tục cơ bản của mỗi ngơn ngữ. Tất cả đều có ý nghĩa
logic giống nhau nhƣng về cách sử dụng hay cú pháp thì hầu nhƣ là khác nhau.
Ý tƣởng của Microsoft là không xây dựng một tập thƣ viện riêng biệt cho từng
ngôn ngữ lập trình mà sẽ xây dựng một bộ thƣ viện dùng chung. Tập thƣ viện dùng chung
này hình thành nên một bộ khung (Framework). Bộ Khung này thực chất là một tập các
thƣ viện đƣợc xây dựng sẵn, đáp ứng mọi nhu cầu phát triển các ứng dụng Desktop,
Network, Mobile, Web…
Hình 1.1. Mơ hình xây dựng phần mềm bằng ngơn ngữ truyền thống
Các thành phần và chức năng chính trong .NET Framework.
Common Language Runtime (trình thực thi ngơn ngữ chung): Sau khi ứng dụng
đƣợc biên dịch ra file “exe”. Nội dung của file exe này tuân theo một chuẩn/ngôn ngữ
chung, dù là viết bằng C# hay VB.NET. Ngôn ngữ này gọi là ngôn ngữ chung), tiếp
theo để file exe trung gian này có thể chạy đƣợc trên máy hiện hành thì cần phải đƣợc
biên dịch ra mã máy tƣơng ứng. Việc biên dịch và chạy đƣợc là nhờ chƣơng trình thực
thi ngơn ngữ chung – CLR (Common Language Runtime).
Hình 1.2. Kiến trúc của .NET Framework
Base Class Library: Là tập các thƣ viện chứa các lớp cơ bản để sử dụng trong tất
cả các ngơn ngữ .NET. Ví dụ các lớp xử lý xâu, xử lý toán học…
ADO.NET: Là tập các thƣ viện chuyên dành cho thao tác với cơ sở dữ liệu.
ASP.NET: Các thƣ viện dành cho phát triển các ứng dụng Web (Web Form).
Windows Forms: Các thƣ viện dành cho phát triển các ứng dụng Windows
Common Language Specification: Phần này có nhiệm vụ đặc tả ngơn ngữ chung
để các chƣơng trình viết trên các ngơn ngữ lập trình khác nhau phải tn theo. Nói cách
khác, biên dịch các chƣơng trình viết trên các ngơn ngữ lập trình khác nhau về một ngơn
ngữ thống nhất chung (Common Language).
Các ngơn ngữ lập trình.
Hình 1.3. Mơ hình biên dịch và thực thi chƣơng trình ứng dụng .NET
1.1.3. Ƣu điểm chính của .NET Framework
- Tất cả các ngơn ngữ đều thừa hƣởng một thƣ viện thống nhất. Khi sửa chữa hay
nâng cấp thƣ viện này thì chỉ phải thực hiện một lần.
- Cách thức phát triển ứng dụng nhất qn và tƣơng tự nhau giữa các ngơn ngữ lập
trình. Có thể chuyển đổi sang ngơn ngữ lập trình .NET khác nhau một cách dễ dàng.
- Viết các ứng dụng Web Form không khác nhiều so với ứng dụng Win Form.
- Cung cấp một tập thƣ viện truy xuất CSDL thống nhất (ADO.NET) cho mọi ngôn
ngữ .NET.
- Hỗ trợ cơ chế “Write one – Run everywhere” (ciết một lần chạy mọi nơi). Một ứng
dụng viết bằng .NET có thể chạy trên bất cứ hệ điều hành nào mà
không cần phải sửa lại code, miễn là máy đó có cài .NET framework.
- Cung cấp hệ thống kiểu chung (Common Type), do vậy đảm bảo tính thống nhất
về kiểu dữ liệu giữa các ngơn ngữ lập trình.
- Cho phép sử dụng nhiều ngơn ngữ lập trình trong cùng một dự án.
- Kết thừa và sử dụng chéo giữa các ngôn ngữ lập trình dễ dàng nhƣ trên cùng một
ngơn ngữ (có thể viết một class trên C#, sau đó kế thừa trong VB.NET và ngƣợc lại).
- Việc triển khai (Deploy) các ứng dụng dễ dàng. Chỉ cần Copy-and-run (copy là
chạy). Không cần cài đặt và tránh đƣợc “các lỗi DLL” nhƣ trƣớc đây.
1.2. Giới thiệu về ASP.NET
- ASP.NET là công nghệ phát triển các ứng dụng trên nền Web, thế hệ kế tiếp của
ASP (Active Server Page – Trang Web đƣợc xử lý bên phía máy chủ). ASP.NET là
một thành phần nội tại (có sẵn) của .NET Framework. Vì vậy nó tận dụng đƣợc sức
mạnh của .NET Framework. ASP.NET có một số ƣu điểm chính:
- Có thể sử dụng để phát triển các ứng dụng Web đủ mọi kích cỡ, từ ứng dụng nhỏ
nhất cho đến ứng dụng toàn doanh nghiệp (Enterprise).
- Ứng dụng viết bằng ASP.NET dễ dàng tƣơng thích với nhiều loại trình duyệt khác
nhau. Nhà phát triển không cần phải quan tâm nhiều đến trình duyệt nào đƣợc sử dụng để
duyệt Website, điều này sẽ đƣợc framework tự render ra mã tƣơng ứng.
- Khi sử dụng bộ IDE của Visual Studio, cách thức lập trình sẽ giống nhƣ lập trình
Win Form.
- Truy xuất dữ liệu bằng cơng nghệ ADO.NET có sẵn của .NET Framework.
- Chạy ứng dụng cực nhanh bởi cơ chế biên dịch và Cached.
- Có thể tăng tốc ứng dụng bằng cách Cache các điều khiển, các trang.
- Bảo mật vƣợt trội.
- Tốn ít dịng lệnh hơn so với ASP/PHP/Perl khi thực hiện cùng một công việc.
- Dễ dàng bảo trì và dễ đọc hơn bởi Code và Giao diện đƣợc tách biệt. Điều này
cũng giúp cho tính chuyên biệt hóa cao hơn (một ngƣời chỉ lo code phần xử lý nghiệp vụ,
ngƣời khác thì chỉ lo code phần giao diện v.v…).
- ASP.NET sử dụng ngơn ngữ lập trình VB.NET hoặc C# để phát triển ứng dụng.
1.3. Cài đặt Visual Studio.NET
1.3.1. Các phiên bản .NET
Có nhiều phiên bản .NET Framework khác nhau đƣợc phát hành qua từng giai đoạn.
- .NET Framework 1.0 phát hành vào năm 2002
- .NET Framework 1.1 phát hành vào năm 2003
-
.NET Framework 2.0 phát hành vào năm 2005
.NET Framework 3.0 phát hành vào năm 2006
.NET Framework 3.5 phát hành vào năm 2007
.NET Framework 4 phát hành trong năm 2010
.NET Framework 4.5 phát hành vào năm 2012
1.3.2. Cài đặt Visual Studio.NET
Việc cài đặt các phiên bản Visual Studio.Net có nhiều lựa chọn khác nhau về cơ
bản ta tiến hành nhƣ sau:
- Chuẩn bị đĩa chƣơng trình Visual Studio.Net và mã bản quyền sử dụng phần mềm
- Đọc tệp tin yêu cầu phần cứng trƣớc khi cài đặt.
- Chạy tệp tin setup.exe làm theo hƣớng đẫn trên màn hình trong quá trình cài đặt.
1.3.3. Giao diện Visual Studio.NET
Visual Studio sử dụng IDE chung cho tồn bộ ngơn ngữ lập trình (ASP.NET,
VB.NET, C#,…). Điều này đảm bảo tính nhất quán cho các ngơn ngữ trên nền .NET.
Hình 1.4. Giao diện chính của môi trƣờng phát triển
- Tab Design để hiển thị trang Web ở chế độ Design, tức là cho phép sửa chữa nội
dung trang Web trực quan.
Hình 1.5. Mở trang ở chế độ Design
- Tab Source: Mở trang ở chế độ mã nguồn HTML. Tại đây ngƣời dùng có thể soạn
thảo trực tiếp các thẻ HTML.
Hình 1.6. Mở trang ở chế độ Source
- Tab Split: Cho phép xem trang Web đồng thời ở cả hai chế độ.
Hình 1.7. Mở trang ở 2 chế độ Design và Source
Chuyển chế độ Design
Chuyển chế độ Code
Copy website lên server
Hình 1.8. Mở cửa sổ soạn Code
- Ngoài thao tác trực tiếp thông qua hệ thống menu, nút lệnh, ngƣời dùng cịn có
thể sử dụng tổ hợp các phím tắt. Ví dụ: Shift+F7 để xem ở chế độ Design, F7 xem ở chế
độ Code, F4 Focus tới Properties….
Menu bar
Tool bar
Vùng duyện các web
form và code fille
Các điều khiển
Các thuộc
Các
thuộc tính của
điều khiển
Các chế độ xem
Hình 1.9. Giao diện IDE của Visual Studio
1.4. Xây dựng ứng dụng Web
1.4.1. Tạo mới ứng dụng Web
Vào menu File -> New Website hoặc biểu tƣợng
New Website xuất hiện.
trên thanh công cụ cửa sổ
Hình 1.10. Các thành phần để tạo mới ứng dụng web
1.4.2. Lƣu ứng dụng Web
- Nhấn Ctrl-S để lƣu trang hiện tại
- Nhấn Ctrl-Shift-S để lƣu toàn bộ các trang.
1.4.3. Chạy ứng dụng Web
Đối với ASP.NET, toàn bộ ứng dụng Web có thể biên dịch thành file nhị phân để
chạy. Tuy nhiên ASP.NET cũng cho phép ngƣời dùng chạy từng trang riêng biệt.
- Nhấn F5 (Hoặc biểu tƣợng
trên thanh công cụ) để chạy ứng dụng và cho phép
Debug trên trình duyệt.
- Nhấn Ctrl-F5 để chạy ứng dụng nhƣng không cho Debug trên trình duyệt.
- Trong trƣờng hợp muốn chạy chƣơng trình và gỡ rối ở mức dịng lệnh/ thủ tục thì
có thể nhấn F8, Shift-F8.
- Ngƣời dùng có thể chạy (Browse) trang Web bất kỳ bằng cách chọn, sau đó click
chuột phải và chọn mục View In Browser (hoặc nhấn tổ hợp phím Ctrl- Shift-W). Trong
trƣờng hợp có nhiều trình duyệt trong máy thì có thể chọn trình duyệt mặc định khi View
In Browser bằng cách click chuột phải lên trang và chọn Browse With nhƣ hình dƣới.
Hình 1.11. Chọn trình duyệt
1.5. Bài tập
1. Khi .NET ra đời đã đem lại những thuận lợi gì cho ngƣời lập trình ứng dụng?
2. Chỉ ra điểm giống và khác nhau giữa xây dựng phần mềm bằng ngôn ngữ truyền
thống và .NET.
3. Trình bày các thành phần trong kiến trúc của .NET Framework.
4.
5.
6.
7.
8.
Nêu các ƣu điểm chính của .NET Framework.
Kể tên các phiên bản .NET hiện có.
Nêu các bƣớc cài đặt Visual Studio.NET.
Kể tên và nêu ý nghĩa các thành phần trong giao diện Visual Studio.NET.
Nêu các bƣớc xây dựng ứng dụng Web.
CHƢƠNG 2: NGƠN NGỮ LẬP TRÌNH C#
2.1. Giới thiệu về ngơn ngữ lập trình C#
Ngơn ngữ C# là một ngơn ngữ đƣợc dẫn xuất từ C và C++, nhƣng nó đƣợc tạo từ
nền tảng phát triển hơn. Microsoft thêm vào những đặc tính mới để làm cho ngơn ngữ
này dễ sử dụng hơn, nhiều trong số những đặc tính này khá giống với những đặc tính có
trong ngơn ngữ Java. Nó có một số đặc điểm cơ bản sau:
- C# là ngơn ngữ đơn giản
Trong C# khơng có sự phức tạp của những ngôn ngữ nhƣ Java và C++, bao gồm
việc loại bỏ macro, template, đa kế thừa và lớp cơ sở ảo (virtual base class).
Ngôn ngữ C# đơn giản nó dựa trên nền tảng C và C++ bởi C# khá giống về cú
pháp, biểu thức, toán tử và những chức năng khác đƣợc lấy trực tiếp từ ngôn ngữ C và
C++, nhƣng đã đƣợc cải tiến để làm cho ngôn ngữ đơn giản hơn. Một trong các cải tiến là
loại bỏ các dƣ thừa, thêm những cú pháp thay đổi.
- C# là ngơn ngữ hiện đại
Những đặc tính nhƣ xử lý ngoại lệ, thu gom bộ nhớ tự động, những kiểu dữ liệu
mở rộng và bảo mật mã nguồn là những đặc tính đƣợc mong đợi trong một ngơn ngữ
hiện đại. C# chứa tất cả những đặc tính trên.
- C# là ngơn ngữ hƣớng đối tƣợng
Những đặc tính nhƣ xử lý ngoại lệ, thu gom bộ nhớ tự động, những kiểu dữ liệu
mở rộng và bảo mật mã nguồn là những đặc tính đƣợc mong đợi trong một ngơn ngữ
hiện đại. C# chứa tất cả những đặc tính trên.
- C# là ngôn ngữ mạnh mẽ và mềm dẻo
Ngôn ngữ C# đƣợc sử dụng cho nhiều công việc khác nhau nhƣ là tạo ra ứng
dụng xử lý văn bản, ứng dụng đồ họa, hay những trình biên dịch cho các ngơn ngữ khác.
- C# là ngơn ngữ ít từ khóa
C# là ngơn ngữ sử dụng giới hạn những từ khóa. Phần lớn các từ khóa đƣợc sử
dụng để mơ tả thơng tin.
Bảng sau liệt kê các từ khóa của ngơn ngữ C#
abstract
default
foreach
object
sizeof
unsafe
as
delegate
goto
operator
stackalloc
ushort
base
do
if
out
static
using
bool
double
implicit
override
string
virtual
break
else
in
params
struct
volatile
byte
enum
int
private
switch
void
case
event
interface
protected
this
while
catch
explicit
internal
public
throw
char
extern
is
readonly
true
checked
false
lock
ref
try
class
finally
long
return
typeof
const
fixed
namespace
sbyte
uint
continue
float
new
sealed
ulong
decimal
for
null
short
unchecked
- C# là ngơn ngữ hƣớng module
Mã nguồn C# có thể đƣợc viết trong những phần đƣợc gọi là những lớp, những
lớp này chứa các phƣơng thức thành viên của nó. Những lớp và phƣơng thức có thể
đƣợc sử dụng lại trong ứng dụng hay các chƣơng trình khác. Bằng cách truyền các mẫu
thông tin đến những lớp hay phƣơng thức để tạo ra những mã nguồn dùng lại có hiệu quả.
2.2. Cấu trúc một chƣơng trình C#
Cách tạo một project trong C#: New >> Project >> Visual C# >> Windows >>
Console Application >> đặt tên và nơi lƣu; nếu check vào create directory for solution thì
Visual Studio sẽ tạo ra thƣ mục chứa project. Một chƣơng trình C# đơn giản:
using System;
using System.Collections.Generic;
using System.Text;
namespace Hello
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Xin chao");
Console.Read();
}
}
}
2.3. Các kiểu dữ liệu
C# là ngơn ngữ lập trình mạnh về kiểu dữ liệu, một ngôn ngữ mạnh về kiểu dữ liệu
là phải khai báo kiểu của mỗi đối tƣợng khi tạo (kiểu số nguyên, số thực, kiểu chuỗi, kiểu
điều khiển...) và trình biên dịch giúp cho ngƣời lập trình khơng bị lỗi khi chỉ cho phép
một loại kiểu dữ liệu có thể đƣợc gán cho các kiểu dữ liệu khác. Kiểu dữ liệu của một đối
tƣợng là một tín hiệu để trình biên dịch nhận biết kích thƣớc của một đối tƣợng (kiểu int
có kích thƣớc là 4 byte) và khả năng của nó (nhƣ một đối tƣợng button có thể vẽ, phản
ứng khi nhấn,...).
Tƣơng tự nhƣ C++ hay Java, C# chia thành hai tập hợp kiểu dữ liệu chính: Kiểu
xây dựng sẵn (built- in) mà ngơn ngữ cung cấp cho ngƣời lập trình và kiểu đƣợc ngƣời
dùng định nghĩa (user-defined) do ngƣời lập trình tạo ra.
2.3.1. Kiểu dữ liệu xây dựng sẵn
Ngôn ngữ C# đƣa ra các kiểu dữ liệu xây dựng sẵn phù hợp với một ngơn ngữ
lập trình hiện đại, mỗi kiểu dữ liệu đƣợc ánh xạ đến một kiểu dữ liệu đƣợc hỗ trợ bởi hệ
thống xác nhận ngôn ngữ chung (Common Language Specification: CLS) trong MS.NET.
Việc ánh xạ các kiểu dữ liệu nguyên thuỷ của C# đến các kiểu dữ liệu của .NET sẽ đảm
bảo các đối tƣợng đƣợc tạo ra trong C# có thể đƣợc sử dụng đồng thời với các đối tƣợng
đƣợc tạo bởi bất cứ ngôn ngữ khác đƣợc biên dịch bởi .NET, nhƣ VB.NET.
Mỗi kiểu dữ liệu có một sự xác nhận và kích thƣớc khơng thay đổi, khơng giống
nhƣ C++, int trong C# ln có kích thƣớc là 4 byte bởi vì nó đƣợc ánh xạ từ kiểu Int32
trong .NET.
Bảng sau sẽ mô tả một số các kiểu dữ liệu đƣợc xây dựng sẵn
Kiểu C#
Số byte
Kiểu .NET
Mô tả
byte
1
Byte
Số nguyên dƣơng không dấu từ 0-255
char
2
Char
Ký tự Unicode
bool
1
Boolean
Giá trị logic true/ false
sbyte
1
Sbyte
Số nguyên có dấu ( từ -128 đến 127)
short
2
Int16
Số nguyên có dấu giá trị từ -32768 đến 32767.
ushort
2
Uịnt16
Số nguyên khơng dấu 0 – 65.535
int
4
Int32
Số ngun có dấu –2.147.483.647 và
2.147.483.647
uint
4
Uint32
Số nguyên không dấu 0 – 4.294.967.295
float
4
Single
Kiểu dấu chấm động, giá trị xấp xỉ từ 3,4E38 đến 3,4E+38, với 7 chữ số có nghĩa..
double
8
Double
Kiểu dấu chấm động có độ chính xác gấp đơi, giá
trị xấp xỉ từ 1,7E-308 đến 1,7E+308,
với 15,16 chữ số có nghĩa.
decimal
8
Decimal
Có độ chính xác đến 28 con số và giá trị thập
phân, đƣợc dùng trong tính tốn tài chính, kiểu
này địi hỏi phải có hậu tố “m” hay “M”
theo sau giá trị.
long
8
Int64
Kiểu số nguyên có dấu có giá trị trong khoảng :
-9.223.370.036.854.775.808 đến
9.223.372.036.854.775.807
ulong
8
Uint64
Số nguyên không dấu từ 0 đến
0xffffffffffffffff
2.3.2. Chọn kiểu dữ liệu
Thông thƣờng để chọn một kiểu dữ liệu nguyên để sử dụng nhƣ short, int hay long
thƣờng dựa vào độ lớn của giá trị muốn sử dụng. Ví dụ, một biến ushort có thể lƣu giữ giá
trịtừ 0 đến 65.535, trong khi biến ulong có thể lƣu giữ giá trị từ 0 đến 4.294.967.295, do
đó tùy vào miền giá trị của phạm vi sử dụng biến mà chọn các kiểu dữ liệu thích hợp nhất.
Kiểu dữ liệu int thƣờng đƣợc sử dụng nhiều nhất trong lập trình vì với kích thƣớc 4
byte của nó cũng đủ để lƣu các giá trị nguyên cần thiết.
Kiểu float, double và decimal đƣa ra nhiều mức độ khác nhau về kích thƣớc
cũng nhƣ độ chính xác. Với thao tác trên các phân số nhỏ thì kiểu float là thích hợp
nhất. Tuy nhiên lƣu ý rằng trình biên dịch ln ln hiểu bất cứ một số thực nào cũng là
một số kiểu double trừ khi khai báo rõ ràng. Để gán một số kiểu float thì số phải có ký tự f
theo sau.
float soFloat = 24f;
Kiểu dữ liệu ký tự thể hiện các ký tự Unicode, bao gồm các ký tự đơn giản, ký tự
theo mã Unicode và các ký tự thoát khác đƣợc bao trong những dấu nháy đơn. Ví dụ, A
là một ký tự đơn giản trong khi \u0041 là một ký tự Unicode. Ký tự thoát là những ký tự
đặc biệt bao gồm hai ký tự liên tiếp trong đó ký tự đầu tiên là dấu chéo „\‟. Ví dụ, \t là
dấu tab. Bảng sau trình bày các ký tự đặc biệt.
Ký tự
Ý nghĩa
\‟
Dấu nháy đơn „
\”
Dấu nháy kép
\\
Dấu chéo
\0
Ký tự null
\a
Alert
\b
Backspace
\f
Sang trang form feed
\n
Dòng mới
\r
Đầu dòng
\t
Tab ngang
\v
Tab dọc
2.3.3. Chuyển đổi kiểu dữ liệu
Những đối tƣợng của một kiểu dữ liệu này có thể đƣợc chuyển sang những đối
tƣợng của một kiểu dữ liệu khác thông qua cơ chế chuyển đổi tƣờng minh hay ngầm
định. Chuyển đổi ngầm định đƣợc thực hiện một cách tự động, trình biên dịch sẽ thực
hiện cơng việc này. Cịn chuyển đổi tƣờng minh diễn ra khi gán ép một giá trị cho kiểu
dữ liệu khác.
Việc chuyển đổi giá trị ngầm định đƣợc thực hiện một cách tự động và đảm bảo là
không mất thơng tin. Ví dụ, có thể gán ngầm định một số kiểu short (2 byte) vào một
số kiểu int (4 byte) một cách ngầm định. Sau khi gán hoàn tồn khơng mất dữ liệu vì bất
cứ giá trị nào của short cũng thuộc về int:
short x = 10;
int y = x; // chuyển đổi ngầm định
Tuy nhiên, nếu thực hiện chuyển đổi ngƣợc lại, chắc chắn sẽ bị mất thơng tin.
Nếu giá trị của số ngun đó lớn hơn 32.767 thì nó sẽ bị cắt khi chuyển đổi. Trình biên
dịch sẽ không thực hiện việc chuyển đổi ngầm định từ số kiểu int sang số kiểu short:
short x;
int y = 100;
x = y; // Không biên dịch, lỗi
Để không bị lỗi dùng lệnh gán tƣờng minh, đoạn mã trên đƣợc viết lại nhƣ sau:
short x;
int y = 500;
x = (short) y; // Ép kiểu tường minh, trình biên dịch không báo lỗi
2.3.4. Kiểu dữ liệu mảng
Mảng là một tập hợp có thứ tự của những đối tƣợng, tất cả các đối tƣợng này
cùng một kiểu. Mảng trong ngôn ngữ C# có một vài sự khác biệt so với mảng trong
ngôn ngữ C++ và một số ngôn ngữ khác, bởi vì chúng là những đối tƣợng. Điều này sẽ
cung cấp cho mảng sử dụng các phƣơng thức và những thuộc tính.
Ngơn ngữ C# cung cấp cú pháp chuẩn cho việc khai báo những đối tƣợng Array.
Tuy nhiên, cái thật sự đƣợc tạo ra là đối tƣợng của kiểu System.Array. Mảng trong ngôn
ngữ C# kết hợp cú pháp khai báo mảng theo kiểu ngôn ngữ C và kết hợp với định nghĩa
lớp do đó thể hiện của mảng có thể truy cập những phƣơng thức và thuộc tính của
System.Array.
Để khai báo một mảng trong C# sử dụng cú pháp nhƣ sau:
<DataType >[]<ArrayName>
Trong đó:
DataType: kiểu dữ liệu như int, float….
ArrayName: tên mảng
[ ]: cặp dấu ngoặc vng chỉ ra cho trình biên dịch biết đang khai báo một mảng.
Ví dụ: Khai báo mảng số nguyên
int[] x;
Khởi tạo giá trị cho mảng:
Cách 1: Khai báo và chỉ ra số phần tử của mảng
Cú pháp: [DataType] [ ] [ArrayName] = new [DataType] [number of elements];
Trong đó: number of elements: số phần tử của mảng.
Ví dụ: Khai báo một mảng số nguyên lƣu trữ 5 phần tử.
int[] a = new int[5]
Cách 2: Khai báo sau đó mới khởi tạo số phần tử của mảng.
Cú pháp: [DataType] [ ] [ArrayName];
[ArrayName] = new [DataType] [number of elements];
Ví dụ: Khai báo một mảng số nguyên lƣu trữ 5 phần tử.
int[] a;
a = new int[5];
Cách 3: Khai báo, chỉ ra số lƣợng các phần tử mảng và gán các giá trị ban đầu cho các
phần tử mảng.
Cú pháp: [DataType] [ ] [ArrayName]= new [DataType] [number of elements]{value};
Ví dụ khai báo mảng
int[] a = new int[5] {1, -1, 3, 4, 5};
Cách 4: Khai báo, không chỉ ra số lƣợng các phần tử mảng và gán giá trị cho các phần tử
của mảng.
Truy cập các phần tử mảng: Một mảng là một danh sách các phần tử có cùng kiểu
dữ liệu, các phần tử đó đƣợc đánh số thứ tự bắt đầu từ 0 đến n-1 (trong đó n là số phần tử
của mảng). Nhƣ vậy để truy cập đến 1 phần tử của mảng thì ta sử dụng một số nguyên để
chỉ ra số thứ tự của phần tử đó trong mảng, phần tử nguyên này đƣợc gọi là chỉ số
(index). Cú pháp tổng quát để truy cập đến phần tử thứ i của mảng là:
[tên mảng] [i-1];
Ví dụ: Gán giá trị 5 cho phần tử thứ 3 của mảng
a[2] = 5;
Duyệt qua các phần tử mảng: Mảng là một tập hợp hữu hạn phần tử do đó để duyệt
qua các phần tử mảng thƣờng sử dụng vịng lặp for.
Ví dụ: In danh sách các phần tử của mảng a ở trên.
Console.WriteLine("Danh sach cac phan tu trong mang:");
for (int i = 0; i < 5; i++)
Console.Write(a[i] + "\t");
2.3.5. Kiểu dữ liệu xâu
Kiểu dữ liệu xâu lƣu giữ một mảng những ký tự. Để khai báo một xâu ta sử dụng
từ khoá string tƣơng tự nhƣ cách tạo một thể hiện của bất cứ đối tƣợng nào:
string str;
Một hằng xâu đƣợc tạo bằng cách đặt các xâu trong dấu nháy đôi: “Xin chao”
Đây là cách để khởi tạo một xâu ký tự với giá trị hằng: string chuoi = “Xin chao”
2.4. Biến và hằng
Một biến là một vùng lƣu trữ với một kiểu dữ liệu. Biến có thể đƣợc gán giá trị
và cũng có thể thay đổi giá trị khi thực hiện các lệnh trong chƣơng trình.
Để tạo một biến ta phải khai báo kiểu của biến và gán cho biến một tên duy nhất.
Biến có thể đƣợc khởi tạo giá trị ngay khi đƣợc khai báo hoặc có thể đƣợc gán một giá
trị mới vào bất cứ lúc nào trong chƣơng trình.
- Khai báo biến
Cú pháp: <type> <tên biến>;
Hoặc: <type> <tên biến> = <giá trị>;
Ví dụ về khai báo biến
class MinhHoaBien
{
static void Main()
{
int bien1 = 9; Console.WriteLine(“Sau khi khoi tao: bien1 =”, bien1);
bien1 = 15; Console.WriteLine(“Sau khi gan: bien1 =”, bien1);
}
}
-
Khai báo hằng
Hằng là một biến nhƣng giá trị của nó khơng thay đổi.
Cú pháp: <const> <type> <tên hằng> = <giá trị>;
Ví dụ khai báo hằng
const int x = 100;
2.5. Biểu thức và toán tử
Những câu lệnh mà thực hiện việc đánh giá một giá trị gọi là biểu thức. Một phép
gán một giá trị cho một biến cũng là một biểu thức: var1 = 24;
Tốn tử đƣợc kí hiệu bằng một biểu tƣợng dùng để thực hiện một hành động. Các
kiểu dữ liệu cơ bản của C# nhƣ kiểu nguyên hỗ trợ rất nhiều các toán tử nhƣ toán tử gán,
toán tử toán học, logic....
Toán tử gán: Toán tử gán hay phép gán làm cho toán hạng bên trái thay đổi giá trị
bằng với giá trị của toán hạng bên phải.
Tốn tử tốn học: Ngơn ngữ C# cung cấp năm toán tử toán học, bao gồm bốn toán
tử đầu các phép toán cơ bản (+,-,*,/) và phép toán chia lấy dƣ (%)
Toán tử tăng và giảm
Toán tử
Ý nghĩa
x+=y
Cộng thêm giá trị toán hạng bên phải
vào giá trị toán hạng bên trái
-=
Toán hạng bên trái đƣợc trừ bớt đi một lƣợng bằng giá trị
của toán hạng bên phải
*=
Toán hạng bên trái đƣợc nhân với một lƣợng bằng giá trị
của toán hạng bên phải.
/=
Toán hạng bên trái đƣợc chia với một lƣợng bằng giá trị của
toán hạng bên phải.
%=
Toán hạng bên trái đƣợc chia lấy dƣ với một lƣợng bằng giá
trị của tốn hạng bên phải.
Tốn tử quan hệ
Tên tốn tử
Kí hiệu
Biểu thức so sánh
Kết quả so sánh
So sánh bằng
==
value1 == 100
value1 == 50
true
false
Không bằng
!=
value2 != 100
value2 != 90
false
true
Lớn hơn
>
Lớn hơn hay bằng
value1 > value2
true
value2 > value1
false
value2 >= 50
true
<
value1 < value2
value2 < value1
false
true
<=
value1 <= value2
false
>=
Nhỏ hơn
Nhỏ hơn hay bằng
Toán tử logic
Biểu thức logic
Giá trị
Tên toán
Ký
Logic
tử
and
hiệu
&&
(x == 3) && (y ==7) false
Cả hai điều kiện phải đúng
or
||
(x == 3) || (y == 7)
true
Chỉ cần một điều kiện đúng
not
!
! (x == 3 )
true
Biểu thức trong ngoặc phải sai.
2.6. Các lệnh điều khiển
2.6.1. Các câu lệnh rẽ nhánh
a) Câu lệnh if...else
Cú pháp:
if (biểu thức điều kiện)
<Khối lệnh thực hiện khi điều kiện đúng>
else
<Khối lệnh thực hiện khi điều kiện sai>
Câu lệnh rẽ nhánh if...else dựa trên một điều kiện. Điều kiện là một biểu thức sẽ
đƣợc kiểm tra giá trị ngay khi bắt đầu gặp câu lệnh đó. Nếu điều kiện đƣợc kiểm tra đúng,
thì câu lệnh hay một khối các câu lệnh bên trong thân của câu lệnh if đƣợc thực hiện.
Trong câu lệnh rẽ nhánh if...else thì else là phần tùy chọn. Các câu lệnh bên trong
thân của else chỉ đƣợc thực hiện khi điều kiện của if là sai. Do vậy khi câu lệnh đầy đủ
if...else đƣợc dùng thì chỉ có một trong hai if hoặc else đƣợc thực hiện.
Nếu các câu lệnh trong thân của if hay else mà lớn hơn một lệnh thì các lệnh này
phải đƣợc bao trong một khối lệnh, tức là phải nằm trong dấu khối { }:
if (biểu thức điều kiện)
{
<lệnh 1>
<lệnh 2>
}
else
{
<lệnh 1>
<lệnh 2>
}
Ví dụ: Dùng câu lệnh điều kiện if...else
using System;
class ExIfElse
{
static void Main()
{
int var1 = 10; int var2 = 20;
if ( var1 > var2)
{
Console.WriteLine( “var1: {0} > var2:{1}”, var1, var2);
}
else
{
Console.WriteLine( “var2: {0} > var1:{1}”, var2, var1);
}
var1 = 30;
if ( var1 > var2)
{
var2 = var1++;
Console.WriteLine( “Gan gia tri var1 cho var2”); Console.WriteLine( “Tang
bien var1 len mot ”); Console.WritelLine( “Var1 = {0}, var2 = {1}”, var1,
var2);
}
else
{
var1 = var2;
Console.WriteLine( “Thiet lap gia tri var1 = var2” ); Console.WriteLine(
“var1 = {0}, var2 = {1}”, var1, var2 );
}
}
}
b) Câu lệnh if lồng nhau
Các lệnh điều kiện if có thể lồng nhau để phục vụ cho việc xử lý các câu điều
kiện phức tạp. Việc này cũng thƣờng xuyên gặp khi lập trình. Giả sử cần viết một chƣơng
trình có u cầu xác định tình trạng kết hơn của một công dân dựa vào các thông tin nhƣ
tuổi, giới tính và tình trạng hơn nhân, dựa trên một số thông tin nhƣ sau:
- Nếu công dân là nam thì độ tuổi kết hơn là 20 với điều kiện là chƣa có gia đình.
- Nếu cơng dân là nữ thì độ tuổi kết hơn là 19 cũng với điều kiện là chƣa có gia đình.
- Tất cả các cơng dân có tuổi nhỏ hơn 19 điều khơng đƣợc kết hơn.
Dựa trên các u cầu trên ta có thể dùng các lệnh if lồng nhau để thực hiện.
Ví dụ: Các lệnh if lồng nhau
using System;
class TinhTrangKetHon
{
static void Main(){
int tuoi;
bool coGiaDinh; // 0: chưa có gia đình; 1: đã có gia đình
bool gioiTinh; // 0: giới tính nữ; 1: giới tính nam
tuoi = 24;
coGiaDinh = false; // chưa có gia đình
gioiTinh = true; // nam
if ( tuoi >= 19)
{
if ( coGiaDinh == false){
if ( gioiTinh == false) // nu
Console.WriteLine(“ Nu co the ket hon”);
else // nam
if (tuoi >19) // phải lớn hơn 19 tuoi mới được kết hôn
Console.WriteLine(“ Nam co the ket hon”);
}
else // da co gia dinh
Console.WriteLine(“ Khong the ket hon nua do da ket hon”);
}
else // tuoi < 19
Console.WriteLine(“ Khong du tuoi ket hon” );
}
}
c) Câu lệnh switch
Khi có quá nhiều điều kiện để chọn thực hiện thì dùng câu lệnh if sẽ phức tạp, Các
ngơn ngữ lập trình cấp cao cung cấp một dạng câu lệnh switch liệt kê các giá trị và chỉ
thực hiện các giá trị thích hợp. C# cung cấp câu lệnh nhảy switch có cú pháp nhƣ sau:
switch (biểu thức điều kiện)
{
case <giá trị>:
<Các câu lệnh thực hiện>
<lệnh nhảy>
case <giá trị>:
<Các câu lệnh thực hiện>
<lệnh nhảy>
……..
default: <Các câu lệnh thực hiện mặc định>
}
Cũng tƣơng tự nhƣ câu lệnh if, biểu thức để so sánh đƣợc đặt sau từ khóa switch,
tuy nhiên giá trị so sánh lại đƣợc đặt sau mỗi các từ khóa case. Giá trị sau từ khóa case là
các giá trị hằng số nguyên.
Nếu một câu lệnh case đƣợc thích hợp tức là giá trị sau case bằng với giá trị của
biểu thức sau switch thì các câu lệnh liên quan đến câu lệnh case này sẽ đƣợc thực thi.
Tuy nhiên phải có một câu lệnh nhảy nhƣ break, goto để điều khiển nhảy qua các case
khác. Vì nếu khơng có các lệnh nhảy này thì khi đó chƣơng trình sẽ thực hiện tất cả các
case theo sau. Để dễ hiểu hơn ta sẽ xem xét ví dụ dƣới đây.
Ví dụ: Câu lệnh switch
using System;
class MinhHoaSwitch
{
static void Main()
{
const int mauDo = 0;
const int mauCam = 1;
const int mauVang = 2;
const int mauLuc = 3;
const int mauLam = 4;
const int mauCham = 5;
const int mauTim = 6;
int chonMau = mauLuc;
switch ( chonMau )
{
case mauDo:
Console.WriteLine( “Ban cho mau do” );