1. Trang chủ
  2. » Giáo án - Bài giảng

Giáo trình c phạm văn việt, trương lập vĩ

78 10 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

NGƠN NGỮ LẬP TRÌNH C# Ngơn Ngữ Lập Trình C# Mục Lục Microsoft NET 10 Tình hình trước MS.NET đời 10 Nguồn gốc NET 12 Microsoft NET 12 Tổng quan 12 Kiến trúc NET Framework 13 Common Language Runtime 15 Thư viện NET Framework 16 Phát triển ứng dụng client 16 Biên dịch MSIL 17 Ngôn ngữ C# 18 Ngôn ngữ C# 20 Tại phải sử dụng ngôn ngữ C# 20 C# ngôn ngữ đơn giản 20 C# ngôn ngữ đại 21 C# ngôn ngữ hướng đối tượng 21 C# ngôn ngữ mạnh mẽ 22 C# ngơn ngữ từ khóa .22 C# ngơn ngữ module hóa 22 C# ngôn ngữ phổ biến 22 Ngôn ngữ C# với ngôn ngữ khác 23 Các bước chuẩn bị cho chương trình 24 Chương trình C# đơn giản 25 Phát triển chương trình minh họa 31 Câu hỏi & tập 35 Nền tảng ngôn ngữ C# 39 Kiểu liệu 40 Kiểu liệu xây dựng sẵn 41 Chọn kiểu liệu 42 Chuyển đổi kiểu liệu 43 Biến 44 Gán giá trị xác định cho biến 45 Hằng .46 Kiểu liệt kê .47 Ngơn Ngữ Lập Trình C# Kiểu chuỗi ký tự .50 Định danh .50 Biểu thức 50 Khoảng trắng 51 Câu lệnh 51 Phân nhánh khơng có điều kiện 52 Phân nhánh có điều kiện 53 Câu lệnh lặp 60 Toán tử 68 Namespace 76 Các dẫn biên dịch .80 Câu hỏi & tập 82 Xây dựng lớp - Đối tượng 87 Định nghĩa lớp 88 Thuộc tính truy cập 91 Tham số phương thức 92 Tạo đối tượng 93 Bộ khởi dựng 93 Khởi tạo biến thành viên 96 Bộ khởi dựng chép 98 Từ khóa this 99 Sử dụng thành viên static 100 Gọi phương thức static 101 Sử dụng khởi dựng static 101 Sử dụng khởi dựng private 102 Sử dụng thuộc tính static 102 Hủy đối tượng 104 Truyền tham số .107 Nạp chồng phương thức 112 Đóng gói liệu với thuộc tính 116 Thuộc tính đọc 119 Câu hỏi & tập 121 Kế thừa – Đa hình 125 Đặc biệt hóa tổng quát hóa 126 Sự kế thừa 129 Thực thi kế thừa 129 Gọi phương thức khởi dựng lớp sở .131 Gọi phương thức lớp sở 132 Ngơn Ngữ Lập Trình C# Điều khiển truy xuất .132 Đa hình 133 Kiểu đa hình 133 Phương thức đa hình 133 Từ khóa new override 137 Lớp trừu tượng .139 Gốc tất lớp- lớp Object 142 Boxing Unboxing liệu 144 Boxing liệu ngầm định 144 Unboxing phải thực tường minh 145 Các lớp lồng 147 Câu hỏi & tập 149 Nạp chồng toán tử 153 Sử dụng từ khóa operator .153 Hỗ trợ ngôn ngữ NET khác 154 Sử dụng toán tử 154 Toán tử so sánh 156 Toán tử chuyển đổi 157 Câu hỏi & tập 163 Cấu trúc 165 Định nghĩa cấu trúc 165 Tạo cấu trúc 168 Cấu trúc kiểu giá trị 168 Gọi khởi dựng mặc định 169 Tạo cấu trúc không gọi new 170 Câu hỏi & tập 172 Thực thi giao diện 176 Thực thi giao diện 177 Thực thi nhiều giao diện 180 Mở rộng giao diện 181 Kết hợp giao diện .181 Truy cập phương thức giao diện 187 Gán đối tượng cho giao diện 187 Toán tử is 188 Toán tử as .190 Giao diện đối lập với trừu tượng 192 Thực thi phủ giao diện 193 Thực thi giao diện tường minh .197 Ngôn Ngữ Lập Trình C# Lựa chọn thể phương thức giao diện 200 Ẩn thành viên 200 Câu hỏi & tập 207 Mảng, mục, tập hợp 211 Mảng 212 Khai báo mảng 213 Giá trị mặc định 214 Truy cập thành phần mảng 214 Khởi tạo thành phần mảng 216 Sử dụng từ khóa params 216 Câu lệnh foreach 218 Mảng đa chiều 220 Mảng đa chiều kích thước 220 Mảng đa chiều có kích thước khác 224 Chuyển đổi mảng 227 Bộ mục 232 Bộ mục phép gán 236 Sử dụng kiểu số khác 237 Giao diện tập hợp 241 Giao diện IEnumerable 242 Giao diện ICollection .246 Danh sách mảng .247 Thực thi IComparable 251 Thực thi IComparer 254 Hàng đợi 259 Ngăn xếp 262 Kiểu từ điển 265 Hastables 266 Giao diện IDictionary .267 Tập khóa tập giá trị 269 Giao diện IDictionaryEnumerator 270 Câu hỏi & tập 271 10 Xử lý chuỗi 275 Lớp đối tượng string 276 Tạo chuỗi 276 Tạo chuỗi dùng phương thức ToString 277 chuỗi 278 285 Thao Tìm tác chuỗi Ngơn Ngữ Lập Trình C# Chia chuỗi 286 Thao tác chuỗi dùng StringBuilder 288 Các biểu thức quy tắc .290 Sử dụng biểu thức quy tắc qua lớp Regex 291 Sử dụng Regex để tìm tập hợp .294 Sử dụng Regex để gom nhóm 295 Sử dụng CaptureCollection 298 Câu hỏi & tập 301 11 Cơ chế ủy quyền kiện 303 Ủy quyền 304 Sử dụng ủy quyền xác nhận phương thức lúc thực thi 304 Ủy quyền tĩnh 314 Dùng ủy quyền thuộc tính .315 Thiết lập thứ tự thi hành với mảng ủy quyền 316 Multicasting 320 Sự kiện 324 Cơ chế publishingsubscribing 324 Sự kiện ủy quyền .325 Câu hỏi & tập 333 12 Các lớp sở NET 335 Lớp đối tượng NET Framework 335 Lớp Timer 337 Lớp thư mục hệ thống 340 Lớp Math 342 Lớp thao tác tập tin 345 Làm việc với tập tin liệu 351 Câu hỏi & tập 362 13 Xử lý ngoại lệ .364 Phát sinh bắt giữ ngoại lệ 365 Câu lệnh throw .365 Câu lệnh catch 367 Câu lệnh finally 373 Những đối tượng ngoại lệ 375 Tạo riêng ngoại lệ 378 Phát sinh lại ngoại lệ 381 Câu hỏi & tập 385 Ngơn Ngữ Lập Trình C# Tham Khảo Giáo trình “Ngơn ngữ Lập trình C#” biên dịch tổng hợp từ: ✰Programming C#, Jesse Liberty, O’Reilly ✰C# in 21 Days, Bradley L.Jones, SAMS ✰Windows Forms Programming with C#, Erik Brown, Manning ✰MSDN Library – April 2002 Quy ước Giáo trình sử dụng số quy ước sau: 🟔 Các thuật ngữ giới thiệu lần in nghiêng 🟔 Mã nguồn chương trình minh họa dùng font Verdana -10 🟔 Các từ khóa C# dùng font Verdana-10, đậm Verdana-10, bình thường 🟔 Tên namspace, lớp, đối tượng, phương thức, thuộc tính, kiện dùng font Verdana 10 🟔 Kết chương trình xuất hình console dùng font Courier New-10 Ngơn Ngữ Lập Trình C# Chương MICROSOFT NET ∙ Tình hình trước MS.NET đời ∙ Nguồn gốc NET ∙ Microsoft NET ∙ Tổng quan ∙ Kiến trúc NET Framework ∙ Common Language Runtime (CLR) ∙ Thư viện NET Framework ∙ Phát triển ứng dụng client ∙ Biên dịch MSIL ∙ Ngơn ngữ C# Tình hình trước MS.NET đời Trong lĩnh vực công nghệ thông tin giới ngày nay, với phát triển liên tục đa dạng phần mềm, hệ điều hành, môi trường phát triển, ứng dụng liên tục đời Tuy nhiên, việc phát triển không đồng lợi ích khác công ty phần mềm lớn làm ảnh hưởng đến người xây dựng phần mềm Cách vài năm Java Sun viết ra, có sức mạnh đáng kể, hướng tới việc chạy nhiều hệ điều hành khác nhau, độc lập với xử lý (Intel, Risc,…) Đặc biệt Java thích hợp cho việc viết ứng dụng Internet Tuy nhiên, Java lại có hạn chế mặt tốc độ thực tế chưa thịnh hành Mặc dù Sun Corporation IBM có đẩy mạnh Java, Microsoft dùng ASP để làm giảm khả ảnh hưởng Java Để lập trình Web, lâu người ta dùng CGI-Perl gần PHP, ngôn ngữ giống Perl tốc độ chạy nhanh Ta triển khai Perl Unix/Linux hay MS Windows Tuy nhiên có nhiều người khơng thích dùng thân ngôn ngữ hay qui ước khác thường Perl không phát triển thống nhất, công cụ xây dựng cho Perl mạnh nhiều nhóm phát triển người ta khơng đảm bảo tương lai ngày tốt đẹp Microsoft NET Ngơn Ngữ Lập Trình C# Trong giới phát triển ứng dụng Windows ta viết ứng dụng Visual C++, Delphi hay Visual Basic, số công cụ phổ biến mạnh Trong Visual C++ ngơn ngữ mạnh khó sử dụng Visual Basic đơn giản dễ học, dễ dùng nên thông dụng Lý Visual Basic giúp viết chương trình Windows dễ dàng mà khơng cần thiết phải biết nhiều cách thức MS Windows hoạt động, ta cần biết số kiến thức tối thiểu MS Windows lập trình Do theo quan điểm Visual Basic nên liên kết với Windows điều tự nhiên dễ hiểu, hạn chế Visual Basic ngôn ngữ hướng đối tượng (Object Oriented) Delphi hậu duệ Turbo Pascal Borland Nó giống tương đối dễ dùng Visual Basic Delphi ngôn ngữ hướng đối tượng Các điều khiển dùng Form Delphi tự động khởi tạo mã nguồn Tuy nhiên, chức khởi động mã nguồn Delphi gặp rắc rối có can thiệp người dùng vào Sau công ty Borland bị bán chuyên gia xây dựng nên Delphi chạy qua bên Microsoft, Delphi khơng cịn phát triển tốt nữa, người ta không dám đầu tư triển khai phần mềm vào Delphi Cơng ty sau phát triển dịng sản phẩm Jbuilder (dùng Java) khơng cịn quan tâm đến Delphi Tuy Visual Basic bền không cần phải khởi tạo mã nguồn Form thiết kế Visual Basic có nhiều khuyết điểm : Khơng hỗ trợ thiết kế hướng đối tượng, khả thừa kế (inheritance) ❑ Giới hạn việc chạy nhiều tiểu trình ứng dụng, ví dụ ta khơng thể dùng Visual Basic để viết Service kiểu NT ❑ Khả xử lý lỗi yếu, khơng thích hợp mơi trường Multi- tier ❑ Khó dùng chung với ngơn ngữ khác C++ ❑ Khơng có User Interface thích hợp cho Internet Do Visual Basic khơng thích hợp cho viết ứng Web Server nên Microsoft tạo ASP (Active Server Page) Các trang ASP vừa có tag HTML vừa chứa đoạn script (VBScript, JavaScript) nằm lẫn lộn Khi xử lý trang ASP, tag HTML gởi thẳng qua Browser, cịn script chuyển thành dịng HTML gởi đi, ngoại trừ function hay sub ASP vị trí script khác quan trọng ❑ Khi số chức viết tốt người ta dịch thành ActiveX đưa vào Web Server Tuy nhiên lý bảo mật nên ISP (Internet Service Provider) làm máy chủ cho Web site thường dè đặt cài ActiveX lạ máy họ Ngoài việc tháo gỡ phiên ActiveX cơng việc khó, thường xuyên làm cho Administrator nhức đầu Những người quản lý version DLL Windows điều than phiền phải đăng ký DLL đăng ký phiên DLL mà Và từ “DLL Hell” xuất tức địa ngục DLL… Microsoft NET Ngôn Ngữ Lập Trình C# Sau để giúp cho việc lập trình ASP nhanh cơng cụ Visual InterDev, IDE (Integrated Development Environment) đời Visual InterDev tạo Design Time Controls cho việc thiết kế điều khiển web,… Tiếc thay Visual InterDev không bền vững nên sau thời gian nhà phát triển rời bỏ Tóm lại thân ASP số khuyết điểm quan trọng, chạy Internet Information Server với Windows NT 4, ASP khơng đáng tin cậy Tóm lại giới lập trình theo Microsoft việc lập trình desktop lập trình hệ phân tán hay web không nhịp nhàng cho Để chuyển từ lập trình client hay desktop đến lập trình web chặng đường dài Nguồn gốc NET Đầu năm 1998, sau hoàn tất phiên Version Internet Information Server (IIS), đội ngũ lập trình Microsoft nhận thấy họ nhiều sáng kiến để kiện toàn IIS Họ bắt đầu xây dựng kiến trúc tảng ý tưởng đặt tên Next Generation Windows Services (NGWS) Sau Visual Basic trình làng vào cuối 1998, dự án mang tên Visual Studio xác nhập vào NGWS Đội ngũ COM+/MTS góp vào universal runtime cho tất ngơn ngữ lập trình chung Visual Studio, tham vọng họ cung cấp cho ngôn ngữ lập trình cơng ty khác dùng chung ln Cơng việc xúc tiến cách hồn tồn bí mật hội nghị Professional Developers’ Conference Orlado vào tháng 7/2000 Đến tháng 11/2000 Microsoft phát hành Beta NET gồm đĩa CD Tính đến lúc Microsoft làm việc với NET gần năm rồi, Beta tương đối vững .NET mang dáng dấp sáng kiến áp dụng trước p-code UCSD Pascal Java Virtual Machine Có điều Microsoft góp nhặt sáng kiến người khác, kết hợp với sáng kiến để làm nên sản phẩm hồn chỉnh từ bên lẫn bên Hiện Microsoft công bố phiên release NET Thật Microsoft đặt cược vào NET theo thơng tin công ty, tập trung 80% sức mạnh Microsoft để nghiên cứu triển khai NET (bao gồm nhân lực tài ?), tất sản phẩm Microsoft chuyển qua NET Microsoft NET Tổng quan Microsoft NET gồm phần : Framework Integrated Development Environment (IDE) Framework cung cấp cần thiết bản, chữ Framework có nghĩa khung hay khung cảnh ta dùng hạ tầng sở theo qui ước định để công việc trơi chảy IDE cung cấp mơi trường giúp triển khai dễ dàng, nhanh chóng ứng dụng dựa tảng NET Nếu khơng có IDE 10 Microsoft NET Ngơn Ngữ Lập Trình C# dùng trình soạn thảo ví Notepad hay trình soạn thảo văn sử dụng command line để biên dịch thực thi, nhiên việc nhiều thời gian Tốt dùng IDE phát triển ứng dụng, cách dễ sử dụng Thành phần Framework quan trọng NET cốt lõi tinh hoa mơi trường, cịn IDE công cụ để phát triển dựa tảng thơi Trong NET tồn ngơn ngữ C#, Visual C++ hay Visual Basic.NET dùng IDE Tóm lại Microsoft NET tảng cho việc xây dựng thực thi ứng dụng phân tán hệ Bao gồm ứng dụng từ client đến server dịch vụ khác Một số tính Microsoft NET cho phép nhà phát triển sử dụng sau: ❑ Một mơ hình lập trình cho phép nhà phát triển xây dựng ứng dụng dịch vụ web ứng dụng client với Extensible Markup Language (XML) ❑ Tập hợp dịch vụ XML Web, Microsoft NET My Services cho phép nhà phát triển đơn giản tích hợp người dùng kinh nghiệm ❑ Cung cấp server phục vụ bao gồm: Windows 2000, SQL Server, BizTalk Server, tất điều tích hợp, hoạt động, quản lý dịch vụ XML Web ứng dụng Các phần mềm client Windows XP Windows CE giúp người phát triển phân phối sâu thuyết phục người dùng kinh nghiệm thông qua dịng thiết bị ❑ Nhiều cơng cụ hỗ trợ Visual Studio NET, để phát triển dịch vụ Web XML, ứng dụng Windows hay web cách dể dàng hiệu ❑ Kiến trúc NET Framework NET Framework platform làm đơn giản việc phát triển ứng dụng môi trường phân tán Internet .NET Framework thiết kế đầy đủ để đáp ứng theo quan điểm sau: ❑ Để cung cấp mơi trường lập trình hướng đối tượng vững chắc, mã nguồn đối tượng lưu trữ thực thi cách cục Thực thi cục phân tán Internet, thực thi từ xa ❑ Để cung cấp môi trường thực thi mã nguồn mà tối thiểu việc đóng gói phần mềm tranh chấp phiên ❑ Để cung cấp môi trường thực thi mã nguồn mà đảm bảo việc thực thi an toàn mã nguồn, bao gồm việc mã nguồn tạo hãng thứ ba hay hãng mà tuân thủ theo kiến trúc NET ❑ Để cung cấp môi trường thực thi mã nguồn mà loại bỏ lỗi thực script hay môi trường thông dịch ❑ Để làm cho người phát triển có kinh nghiệm vững nắm vững nhiều kiểu ứng dụng khác Như từ ứng dụng Windows đến ứng dụng dựa web ❑ Câu lệnh nhảy break continue Khi thực lệnh vịng lặp, có u cầu sau: khơng thực lệnh cịn lại mà khỏi vịng lặp, hay khơng thực cơng việc lại vòng lặp mà nhảy qua vòng lặp Để đáp ứng yêu cầu C# cung cấp hai lệnh nhảy break continue để khỏi vịng lặp sử dụng đưa chương trình khỏi vịng lặp tiếp tục thực lệnh tiếp sau vòng lặp Break ngừng thực cơng việc cịn lại vịng lặp thời quay đầu vòng lặp để thực bước lặp Continue Hai lệnh break continue tạo nhiều điểm thoát làm cho chương trình khó hiểu khó trì Do phải cẩn trọng sử dụng lệnh nhảy Ví dụ 3.16 trình bày bên minh họa cách sử dụng lệnh continue break Đoạn chương trình mơ hệ thống xử lý tín hiệu giao thơng đơn giản Tín hiệu mơ ký tự chữ hoa hay số nhập vào từ bàn phím, sử dụng hàm ReadLine lớp Console để đọc chuỗi ký tự từ bàn phím Thuật tốn chương trình đơn giản: Khi nhận tín hiệu ‘0’ có nghĩa việc bình thường, khơng cần phải làm cơng việc cả, kể việc ghi lại kiện Trong chương trình đơn giản nên tín hiệu nhập từ bàn phím, cịn ứng dụng thật tín hiệu phát sinh theo mẫu tin thời gian sở liệu Khi nhận tín hiệu (mơ ký tự ‘ T’) ghi lại tình trạng kết thúc xử lý Cuối cùng, tín hiệu khác phát thơng báo, thơng báo đến nhân viên cảnh sát chẳng hạn Trường hợp tín hiệu ‘X’ phát thơng báo sau vịng lặp xử lý kết thúc  Ví dụ 3.16: Sử dụng break continue using System; public class TrafficSignal { public static int Main() { string signal = “0”; // Khởi tạo tín hiệu // bắt đầu chu trình xử lý tín hiệu while ( signal != “X”) 66 Nền Tảng Ngơn Ngữ C# Ngơn Ngữ Lập Trình C# { //nhập tín hiệu Console.Write(“Nhap vao mot tin hieu: ”); signal = Console.ReadLine(); // xuất tín hiệu thời Console.WriteLine(“Tin hieu nhan duoc: {0}”, signal); // phần xử lý tín hiệu if (signal == “T”) { // Tín hiệu gởi // lưu lại kiện thoát Console.WriteLine(“Ngung xu ly! Thoat\n”); break; } if ( signal == “0”) { // Tín hiệu nhận bình thường // Lưu lại kiện tiếp tục Console.WriteLine(“Tat ca dieu tot!\n”); continue; } // Thực số hành động // tiếp tục Console.WriteLine(“ -bip bip bip\n”); } return 0; } } - 🟔 Kết quả: sau nhập tín hiệu : “0”, “B”, “T” Nhap vao mot tin hieu: Tin hieu nhan duoc: Tat ca dieu tot! Nhap vao mot tin hieu: B Tin hieu nhan duoc: B -bip bip bip 67 Nền Tảng Ngơn Ngữ C# Ngơn Ngữ Lập Trình C# Nhap vao mot tin hieu: T Tin hieu nhan duoc: T Ngung xu ly! Thoat Điểm yếu đoạn chương trình nhập vào tín hiệu “ T” sau thực số hành động cần thiết chương trình khỏi vịng lặp khơng xuất câu thông báo bip bip bip Ngược lại nhận tín hiệu sau xuất thơng báo chương trình quay đầu vịng lặp để thực tiếp tục không xuất câu thơng báo bip bip bip Tốn tử Tốn tử kí hiệu biểu tượng dùng để thực hành động Các kiểu liệu C# kiểu nguyên hỗ trợ nhiều toán tử toán tử gán, toán tử toán học, logic Toán tử gán Đến lúc toán tử gán quen thuộc với chúng ta, hầu hết chương trình minh họa từ đầu sách sử dụng phép 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ị với giá trị toán hạng bên phải Toán tử gán tốn tử hai ngơi Đây tốn tử đơn giản thông dụng dễ sử dụng 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 phép toán Toán tử cuối toán tử chia nguyên lấy phần dư Chúng ta tìm hiểu chi tiết phép tốn phần tiếp sau Các phép toán số học (+,-,*,/) Các phép tốn khơng thể thiếu ngơn ngữ lập trình nào, C# khơng ngoại lệ, phép toán số học đơn giản cần thiết bao gồm: phép cộng (+), phép trừ (-), phép nhân (*), phép chia (/) nguyên không nguyên ❑ Khi chia hai số nguyên, C# bỏ phần phân số, hay bỏ phần dư, tức ta chia 8/3 kết bỏ phần dư 2, để lấy phần dư C# cung cấp thêm tốn tử lấy dư trình bày phần Tuy nhiên, chia cho số thực có kiểu float, double, hay decimal kết chia trả số thực Phép toán chia lấy dư Để tìm phần dư phép chia nguyên, sử dụng tốn tử chia lấy dư (%) Ví dụ, câu lệnh sau 8%3 kết trả (đây phần dư lại phép chia nguyên) Thật phép toán chia lấy dư hữu dụng cho người lập trình Khi thực phép chia dư n cho số khác, số bội số n kết phép chia dư Ví dụ 20 % = 20 bội số Điều cho phép ứng dụng ❑ 68 Nền Tảng Ngôn Ngữ C# Ngôn Ngữ Lập Trình C# vịng lặp, muốn thực cơng việc cách khoảng n lần, ta cần kiểm tra phép chia dư n, kết thực cơng việc Cách sử dụng áp dụng ví dụ minh họa sử dụng vịng lặp for bên Ví dụ 3.17 sau minh họa sử dụng phép toán chia số nguyên, thực  Ví dụ 3.17: Phép chia phép chia lấy dư - using System; class Tester { public static void Main() { int i1, i2; float f1, f2; double d1, d2; decimal dec1, dec2; i1 = 17; i2 = 4; f1 = 17f; f2 = 4f; d1 = 17; d2 = 4; dec1 = 17; dec2 = 4; Console.WriteLine(“Integer: \t{0}”, i1/i2); Console.WriteLine(“Float: \t{0}”, f1/f2); Console.WriteLine(“Double: \t{0}”, d1/d2); Console.WriteLine(“Decimal: \t{0}”, dec1/dec2); Console.WriteLine(“\nModulus: : \t{0}”, i1%i2); } } - 🟔 Kết quả: Integer: float: 4.25 double: 4.25 decimal: 4.25 69 Nền Tảng Ngơn Ngữ C# Ngơn Ngữ Lập Trình C# Modulus: - Toán tử tăng giảm Khi sử dụng biến số ta thường có thao tác cộng giá trị vào biến, trừ giá trị từ biến đó, hay thực tính tốn thay đổi giá trị biến sau gán giá trị vừa tính tốn cho biến ❑ Tính tốn gán trở lại Giả sử có biến tên Luong lưu giá trị lương người, biến Luong có giá trị thời 1.500.000, sau để tăng thêm 200.000 ta viết sau: Luong = Luong + 200.000; Trong câu lệnh phép cộng thực trước, kết vế phải 1.700.000 kết gán lại cho biến Luong, cuối Luong có giá trị 1.700.000 Chúng ta thực việc thay đổi giá trị gán lại cho biến với phép toán số học nào: Luong = Luong * 2; Luong = Luong – 100.000; Do việc tăng hay giảm giá trị biến thường xảy tính tốn nên C# cung cấp phép toán tự gán (self- assignment) Bảng sau liệt kê phép toán tự gán Toán tử Ý nghĩa += 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 trừ bớt lượng giá trị toán hạng bên phải *= Toán hạng bên trái nhân với lượng giá trị toán hạng bên phải /= Toán hạng bên trái chia với lượng giá trị toán hạng bên phải %= Toán hạng bên trái chia lấy dư với lượng giá trị tốn hạng bên phải Bảng 3.4: Mơ tả phép toán tự gán Dựa phép toán tự gán bảng ta thay lệnh tăng giảm lương sau: 70 Nền Tảng Ngôn Ngữ C# Ngơn Ngữ Lập Trình C# Luong += 200.000; Luong *= 2; Luong -= 100.000; Kết lệnh thứ giá trị Luong tăng thêm 200.000, lệnh thứ hai làm cho giá trị Luong nhân đôi tức tăng gấp lần, lệnh cuối trừ bớt 100.000 Luong Do việc tăng hay giảm phổ biến lập trình nên C# cung cấp hai toán tử đặc biệt tăng (++) hay giảm ( ) Khi muốn tăng giá trị biến đếm vòng lặp ta viết sau: bienDem++; Tốn tử tăng giảm tiền tố tăng giảm hậu tố Giả sử muốn kết hợp phép toán gia tăng giá trị biến gán giá trị biến cho biến thứ hai, ta viết sau: ❑ var1 = var2++; Câu hỏi đặt gán giá trị trước cộng hay gán giá trị sau cộng Hay nói cách khác giá trị ban đầu biến var2 10, sau thực ta muốn giá trị var1 10, var2 11, hay var1 11, var2 11? Để giải yêu cầu C# cung cấp thứ tự thực phép toán tăng/giảm với phép toán gán, thứ tự gọi tiền tố (prefix) hay hậu tố (postfix) Do ta viết: var1 = var2++; // Hậu tố Khi lệnh thực phép gán thực trước tiên, sau đến phép toán tăng Kết var1 = 10 var2 = 11 Còn trường hợp tiền tố: var1 = + +var2; Khi phép tăng thực trước tức giá trị biến var2 11 cuối phép gán thực Kết hai biến var1 var2 điều có giá trị 11 Để hiểu rõ hai phép tốn xem ví dụ minh họa 3.18 sau  Ví dụ 3.18: Minh hoạ sử dụng toán tử tăng trước tăng sau gán using System; class Tester { static int Main() { int valueOne = 10; int valueTwo; valueTwo = valueOne++; Console.WriteLine(“Thuc hien tang sau: {0}, {1}”, valueOne, valueTwo); valueOne = 20; 71 Nền Tảng Ngơn Ngữ C# Ngơn Ngữ Lập Trình C# valueTwo = ++valueOne; Console.WriteLine(“Thuc hien tang truoc: {0}, {1}”, valueOne, valueTwo); return 0; } } - 🟔 Kết quả: Thuc hien tang sau: 11, 10 Thuc hien tang truoc: 21, 21 - Toán tử quan hệ Những toán tử quan hệ dùng để so sánh hai giá trị, sau trả kết giá trị logic kiểu bool (true hay false) Ví dụ tốn tử so sánh lớn (>) trả giá trị true giá trị bên trái toán tử lớn giá trị bên phải toán tử Do > trả giá trị true, > trả giá trị false Các toán tử quan hệ ngơn ngữ C# trình bày bảng 3.4 bên Các toán tử bảng minh họa với hai biến value1 value2, value1 có giá trị 100 value2 có giá trị 50 Tên toán tử So sánh Không Lớn Lớn hay Nhỏ Nhỏ hay Kí hiệu == != > >= < value2 true value2 > value1 false value2 >= 50 true value1 < value2 false value2 < value1 true value1 Trái Quan hệ < > = is Trái 74 Nền Tảng Ngôn Ngữ C# Ngơn Ngữ Lập Trình C# So sánh == != Phải Phép toán logic AND & Trái Phép toán logic XOR ^ Trái 10 Phép toán logic OR | Trái 11 Điều kiện AND && Trái 12 Điều kiện OR || Trái 13 Điều kiện ?: Phải 14 Phép gán = *= /= %= += -= = &= ^= | Phải = Bảng 3.6: Thứ tự ưu tiên toán tử Các phép toán liệt kê loại có thứ tự theo mục thứ thự bảng: thứ tự trái tức độ ưu tiên phép toán từ bên trái sang, thứ tự phải phép tốn có độ ưu tiên từ bên phải qua trái Các toán tử khác loại có độ ưu tiên từ xuống dưới, tốn tử loại có độ ưu tiên cao phép tốn gán có độ ưu tiên thấp toán tử Toán tử ba ngơi Hầu hết tốn tử địi hỏi có tốn hạng tốn tử (++, ) hay hai toán hạng (+,-,*,/, ) Tuy nhiên, C# cịn cung cấp thêm tốn tử có ba tốn hạng (?:) Tốn tử có cú pháp sử dụng sau: ? : Toán tử xác định giá trị biểu thức điều kiện, biểu thức điều kiện phải trả giá trị kiểu bool Khi điều kiện thực hiện, ngược lại điều kiện sai < biểu thức thứ 2> thực Có thể diễn giải theo ngơn ngữ tự nhiên tốn tử có ý nghĩa : “Nếu điều kiện làm cơng việc thứ nhất, cịn ngược lại điều kiện sai làm cơng việc thứ hai” Cách sử dụng tốn tử ba ngơi minh họa ví dụ 3.19 sau  Ví dụ 3.19: Sử dụng tốn tử bao ngơi using System; class Tester { public static int Main() { int value1; 75 Nền Tảng Ngơn Ngữ C# Ngơn Ngữ Lập Trình C# int value2; int maxValue; value1 = 10; value2 = 20; maxValue = value1 > value2 ? value1 : value2; Console.WriteLine(“Gia tri thu nhat {0}, gia tri thu hai {1}, gia tri lon nhat {2}”, value1, value2, maxValue); return 0; } } - 🟔 Kết quả: Gia tri thu nhat 10, gia tri thu hai 20, gia tri lon nhat 20 - Trong ví dụ minh họa tốn tử ba ngơi sử dụng để kiểm tra xem giá trị value1 có lớn giá trị value2, trả giá trị value1, tức gán giá trị value1 cho biến maxValue, cịn ngược lại gán giá trị value2 cho biến maxValue Namespace Chương thảo luận việc sử dụng đặc tính namespace ngơn ngữ C#, nhằm tránh xung đột việc sử dụng thư viện khác từ nhà cung cấp Ngoài ra, namespace xem tập hợp lớp đối tượng, cung cấp định danh cho kiểu liệu đặt cấu trúc phân cấp Việc sử dụng namespace lập trình thói quen tốt, cơng việc cách lưu mã nguồn để sử dụng sau Ngoài thư viện namespace MS.NET hãng thứ ba cung cấp, ta tạo riêng cho namespace C# đưa từ khóa using đề khai báo sử dụng namespace chương trình: using < Tên namespace > Để tạo namespace dùng cú pháp sau: namespace { < Định nghĩa lớp A> < Định nghĩa lớp B > } Đoạn ví dụ 3.20 minh họa việc tạo namespace  Ví dụ 3.20: Tạo namespace 76 Nền Tảng Ngôn Ngữ C# Ngơn Ngữ Lập Trình C# namespace MyLib { using System; public class Tester { public static int Main() { for (int i =0; i < 10; i++) { Console.WriteLine( “i: {0}”, i); } return 0; } } } Ví dụ tạo namespace có tên MyLib, bên namespace chứa lớp có tên Tester C# cho phép namespace tạo namespace khác lồng bên không giới hạn mức độ phân cấp này, việc phân cấp minh họa ví dụ 3.21  Ví dụ 3.21: Tạo namespace lồng namespace MyLib { namespace Demo { using System; public class Tester { public static int Main() { for (int i =0; i < 10; i++) { Console.WriteLine( “i: {0}”, i); } return 0; } } 77 Nền Tảng Ngơn Ngữ C# Ngơn Ngữ Lập Trình C# } } Lớp Tester ví dụ 3.21 đặt namespace Demo tạo lớp Tester khác bên ngồi namespace Demo hay bên ngồi namespace MyLib mà khơng có tranh cấp hay xung đột Để truy cập lớp Tester dùng cú pháp sau: MyLib.Demo.Tester Trong namespace lớp gọi lớp khác thuộc cấp namespace khác nhau, ví dụ tiếp sau minh họa việc gọi hàm thuộc lớp namespace khác  Ví dụ 3.22: Gọi namespace thành viên using System; namespace MyLib { namespace Demo1 { class Example1 { public static void Show1() { Console.WriteLine(“Lop Example1”); } } } namespace Demo2 { public class Tester { public static int Main() { Demo1.Example1.Show1(); Demo1.Example2.Show2(); return 0; } } } } // Lớp Example2 có namespace MyLib.Demo1 với 78 Nền Tảng Ngơn Ngữ C# Ngơn Ngữ Lập Trình C# //lớp Example1 hai khai báo không khối namespace MyLib.Demo1 { class Example2 { public static void Show2() { Console.WriteLine(“Lop Example2”); } } } - 🟔 Kết quả: Lop Exemple1 Lop Exemple2 Ví dụ 3.22 có hai điểm cần lưu ý cách gọi namespace thành viên cách khai báo namspace Như thấy namespace MyLib có hai namespace cấp Demo1 Demo2, hàm Main Demo2 chương trình thực hiện, hàm Main có gọi hai hàm thành viên tĩnh hai lớp Example1 Example2 namespace Demo1 Ví dụ đưa cách khai báo khác lớp namespace Hai lớp Example1 Example2 điều thuộc namespace MyLib.Demo1, nhiên Example2 khai báo khối riêng lẻ cách sử dụng khai báo: namespace MyLib.Demo1 { class Example2 { } } Việc khai báo riêng lẻ cho phép nhiều tập tin nguồn khác nhau, đảm bảo khai báo tên namspace chúng thuộc namespace Các dẫn biên dịch Đối với ví dụ minh họa phần trước, biên dịch tồn chương trình biên dịch Tuy nhiên, có yêu cầu thực tế muốn phần 79 Nền Tảng Ngôn Ngữ C# Ngơn Ngữ Lập Trình C# chương trình biên dịch độc lập, ví dụ debug chương trình xây dựng ứng dụng Trước mã nguồn biên dịch, chương trình khác gọi chương trình tiền xử lý thực trước chuẩn bị đoạn mã nguồn để biên dịch Chương trình tiền xử lý tìm mã nguồn kí hiệu dẫn biên dịch đặc biệt, tất dẫn biên dịch bắt đầu với dấu rào (#) Các dẫn cho phép định nghĩa định danh kiểm tra tồn định danh Định nghĩa định danh Câu lệnh tiền xử lý sau: #define DEBUG Lệnh định nghĩa định danh tiền xử lý có tên DEBUG Mặc dù thị tiền xử lý khác đặt đâu chương trình, với thị định nghĩa định danh phải đặt trước tất lệnh khác, bao gồm câu lệnh using Để kiểm tra định danh định nghĩa ta dùng cú pháp #if Do ta viết sau: #define DEBUG // Các đoạn mã nguồn bình thường, khơng bị tác động trình tiền xử lý #if DEBUG // Các đoạn mã nguồn khối if debug biên dịch #else // Các đoạn mã nguồn không định nghĩa debug không biên dịch #endif // Các đoạn mã nguồn bình thường, khơng bị tác động trình tiền xử lý Khi chương trình tiền xử lý thực hiện, chúng tìm thấy câu lệnh #define DEBUG lưu lại định danh DEBUG Tiếp theo trình tiền xử lý bỏ qua tất đoạn mã bình thường khác C# tìm khối #if, #else, #endif Câu lệnh #if kiểm tra định danh DEBUG, định danh định nghĩa, nên đoạn mã nguồn khối #if đến #else biên dịch vào chương trình Cịn đoạn mã nguồn #else #endif không biên dịch Tức đoạn mã nguồn không thực hay xuất bên mã hợp ngữ chương trình Trường hợp câu lệnh #if sai tức khơng có định nghĩa định danh DEBUG chương trình, đoạn mã nguồn khối #if #else khơng đưa vào chương trình để biên dịch mà ngược lại đoạn mã nguồn khối #else #endif biên dịch 🟔 Lưu ý: Tất đoạn mã nguồn bên #if #endif khơng bị tác động trình tiền xử lý tất mã đưa vào để biên dịch 80 Nền Tảng Ngôn Ngữ C# ... subnamespace Ví dụ namespace System c? ? chứa số subnamesapce Configuration, Collections, Data, nhiều nữa, namespace Collection chia thành nhiều namesapce Namespace giúp tổ ch? ?c ngăn c? ?ch kiểu Khi viết chương... lớp? C? ?u hỏi 11: Một mã nguồn C# c? ? phải chứa lớp tồn bên ngồi lớp C/ C++? C? ?u hỏi 12: So sánh kh? ?c C# C/ C++, C# với Java, hay ngôn ngữ c? ??p cao mà bạn biết? C? ?u hỏi 13: Con trỏ c? ? c? ??n sử dụng C# ... th? ?c thi chương trình để xem kết Chương trình C# đơn giản Để bắt đầu cho vi? ?c tìm hiểu ngơn ngữ C# tạo tiền đề cho chương sau, chương trình bày chương trình C# đơn giản Ví dụ 2.1 : Chương trình

Ngày đăng: 08/11/2022, 15:51

Xem thêm:

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

TÀI LIỆU LIÊN QUAN

w