Tham khảo tài liệu ''giáo trình hướng dẫn phân tích xây dựng một trình tự xử lý các toán tử trong một biểu thức logic p2'', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả
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 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 Nền Tảng Ngôn Ngữ C# 80 Ngơn Ngữ Lập Trình C# Khơng định nghĩa định danh Sử dụng thị tiền xử lý #undef để xác định trạng thái định danh khơng định nghĩa Như biết trình tiền xử lý thực từ xuống dưới, định danh khai báo bên với thị #define có hiệu đến gọi câu lệnh #undef định danh hay đến cuối chương trình: #define DEBUG #if DEBUG // Đoạn code biên dịch #endif #undef DEBUG #if DEBUG // Đoạn code không biên dịch #endif DEBUG định nghĩa, #if thứ hai sai khơng biên dịch DEBUG định nghĩa lại #undef Ngồi cịn có thị #elif #else cung cấp dẫn phức tạp Chỉ dẫn #elif cho phép sử dụng logic “else-if” Ta diễn giải dẫn sau: “Nếu DEBUG làm cơng việc 1, ngược lại TEST làm cơng việc 2, sai tất làm trường hợp 3”: #if #if DEBUG // Đoạn code biên dịch DEBUG định nghĩa #elif TEST //Đoạn code biên dịch DEBUG không định nghĩa // TEST định nghĩa #else //Đoạn code biên dịch DEBUG //TEST không định nghĩa #endif Trong ví dụ thị tiền xử lý #if kiểm tra định danh DEBUG, định danh DEBUG định nghĩa đoạn mã nguồn #if #elif biên dịch, tất phần lại thị #endif không biên dịch Nếu DEBUG khơng định nghĩa #elif kiểm tra định danh TEST, đoạn mã #elif #else 81 Nền Tảng Ngôn Ngữ C# Ngôn Ngữ Lập Trình C# thực thi TEST định nghĩa Cuối hai DEBUG TEST khơng định nghĩa đoạn mã nguồn #else #endif biên dịch Câu hỏi trả lời Câu hỏi 1: Sự khác dựa thành phần (Component-Based) hướng đối tượng (Object- Oriented)? Trả lời 1: Phát triển dựa thành phần xem mở rộng lập trình hướng đối tượng Một thành phần khối mã nguồn riêng thực nhiệm vụ đặc biệt Lập trình dựa thành phần bao gồm việc tạo nhiều thành phần tự hoạt động dùng lại Sau liên kết chúng lại để xây dựng ứng dụng Câu hỏi 2: Những ngôn ngữ khác xem hướng đối tượng? Trả lời 2: Các ngôn ngữ C++, Java, SmallTalk, Visual Basic.NET sử dụng cho lập trình hướng đối tượng Cịn nhiều ngôn ngữ khác không phổ biến Câu hỏi 3: Tại kiểu số khơng nên khai báo kiểu liệu lớn thay dùng kiểu liệu nhỏ hơn? Trả lời 3: Mặc dù điều xem hợp lý, thật không hiệu Chúng ta không nên sử dụng nhiều tài nguyên nhớ mức cần thiết Khi vừa lãng phí nhớ lại vừa hạn chế tốc độ chương trình Câu hỏi 4: Chuyện xảy ta gán giá trị âm vào biến kiểu không dấu? Trả lời 4: Chúng ta nhận lỗi trình biên dịch nói gán giá trị âm cho biến không dấu trường hợp ta gán giá trị âm Còn trường hợp kết âm đựơc tính biểu thức chạy chương trình nhận lỗi liệu Việc kiểm tra xử lý lỗi liệu đựơc trình bày phần sau Câu hỏi 5: Những ngôn ngữ khác hỗ trở Common Type System (CTS) Common Language Runtime (CLR)? Trả lời 5: Microsoft Visual Basic (Version 7), Visual C++.NET hỗ trợ CTS Thêm vào số phiên ngôn ngữ khác chuyển vào CTS Bao gồm Python, COBOL, Perl, Java Chúng ta xem trang web Microsoft để biết thêm chi tiết Câu hỏi 6: Có phải cịn câu lệnh điều khiển khác? Trả lời 6: Đúng, câu lệnh sau: throw, try, catch finally Chúng ta học chương xử lý ngoại lệ Câu hỏi 7: Có thể sử dụng chuỗi với câu lệnh switch? Trả lời 7: Hoàn toàn được, sử dụng biến giá trị chuỗi switch sau dùng giá trị chuỗi câu lệnh case Lưu ý chuỗi ký tự đơn giản nằm hai dấu ngoặc nháy Câu hỏi thêm Câu hỏi 1: Có cách khai báo comment ngôn ngữ C#, cho biết chi tiết? 82 Nền Tảng Ngôn Ngữ C# ... 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. .. // 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ử. .. 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