42
Chương 1: Phát triển ứng dụng
6.
6.
Ch n biên d ch m t kh i mã vào file th c thi
ọ
ị
ộ
ố
ự
Ch n biên d ch m t kh i mã vào file th c thi
ọ
ị
ộ
ố
ự
Bạn cần chọn một số phần mã nguồn sẽ được biên dịch trong file thực thi.
Sử dụng các chỉ thị tiền xử lý
#if
,
#elif
,
#else
, và
#endif
để chỉ định khối mã
nào sẽ được biên dịch trong file thực thi. Sử dụng đặc tính
System.Diagnostics.
ConditionalAttribute
để chỉ định các phương thức mà sẽ chỉ được gọi tùy theo
điều kiện. Điều khiển việc chọn các khối mã bằng các chỉ thị
#define
và
#undef
trong mã nguồn, hoặc sử dụng đối số
/define
khi chạy trình biên dịch C#.
Nếu muốn ứng dụng của bạn hoạt động khác nhau tùy vào các yếu tố như nền hoặc môi
trường mà ứng dụng chạy, bạn có thể kiểm tra điều kiện khi chạy bên trong mã nguồn và kích
hoạt các hoạt động cần thiết. Tuy nhiên, cách này làm mã nguồn lớn lên và ảnh hưởng đến
hiệu năng. Một cách tiếp cận khác là xây dựng nhiều phiên bản của ứng dụng để hỗ trợ các
nền và môi trường khác nhau. Mặc dù cách này khắc phục được các vấn đề về độ lớn của mã
nguồn và việc giảm hiệu năng, nhưng nó không phải là giải pháp tốt khi phải giữ mã nguồn
khác nhau cho mỗi phiên bản. Vì vậy, C# cung cấp các tính năng cho phép bạn xây dựng các
phiên bản tùy biến của ứng dụng chỉ từ một mã nguồn.
Các chỉ thị tiền xử lý cho phép bạn chỉ định các khối mã sẽ được biên dịch vào file thực thi
chỉ nếu các ký hiệu cụ thể được định nghĩa lúc biên dịch. Các ký hiệu hoạt động như các
“công tắc” on/off, chúng không có giá trị mà chỉ là “đã được định nghĩa” hay “chưa được định
nghĩa”. Để định nghĩa một ký hiệu, bạn có thể sử dụng chỉ thị
#define
trong mã nguồn hoặc
sử dụng đối số trình biên dịch
/define
. Ký hiệu được định nghĩa bằng
#define
có tác dụng
đến cuối file định nghĩa nó. Ký hiệu được định nghĩa bằng
/define
có tác dụng trong tất cả
các file đang được biên dịch. Để bỏ một ký hiệu đã định nghĩa bằng
/define
, C# cung cấp chỉ
thị
#undef
, hữu ích khi bạn muốn bảo đảm một ký hiệu không được định nghĩa trong các file
nguồn cụ thể. Các chỉ thị
#define
và
#undef
phải nằm ngay đầu file mã nguồn, trên cả các chỉ
thị
using
. Các ký hiệu có phân biệt chữ hoa-thường.
Trong ví dụ sau, biến
platformName
được gán giá trị tùy vào các ký hiệu
winXP
,
win2000
,
winNT
, hoặc
win98
có được định nghĩa hay không. Phần đầu của mã nguồn định nghĩa các ký
hiệu
win2000
và
released
(không được sử dụng trong ví dụ này), và bỏ ký hiệu
win98
trong
trường hợp nó được định nghĩa trên dòng lệnh trình biên dịch.
#define win2000
#define release
#undef win98
using System;
public class ConditionalExample {
public static void Main() {