CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 44

44
Chương 1: Phát triển ứng dụng

||

#if winXP || release

Phép OR luận lý. Đúng nếu

winXP

hoặc

release

được định nghĩa.

()

#if (winXP ||

win2000) && release

Dấu ngoặc đơn cho phép nhóm các biểu thức. Đúng
nếu

winXP

hoặc

win2000

được định nghĩa, đồng thời

release

cũng được định nghĩa.

Bạn không nên lạm dụng các chỉ thị biên dịch có điều kiện và không nên viết các
biểu thức điều kiện quá phức tạp; nếu không, mã nguồn của bạn sẽ trở nên dễ
nhầm lẫn và khó quản lý—đặc biệt khi dự án của bạn càng lớn.

Một cách khác không linh hoạt nhưng hay hơn chỉ thị tiền xử lý

#if

là sử dụng đặc tính

System.Diagnostics.ConditionalAttribute

. Nếu bạn áp dụng

ConditionalAttribute

cho

một phương thức, trình biên dịch sẽ bỏ qua mọi lời gọi phương thức đó nếu ký hiệu do

ConditionalAttribute

chỉ định không được định nghĩa tại điểm gọi. Trong đoạn mã sau,

ConditionalAttribute

xác định rằng phương thức

DumpState

chỉ được biên dịch vào file thực

thi nếu ký hiệu

DEBUG

được định nghĩa khi biên dịch.

[System.Diagnostics.Conditional("DEBUG")]

public static void DumpState() {//...}

Việc sử dụng

ConditionalAttribute

giúp đặt các điều kiện gọi một phương thức tại nơi khai

báo nó mà không cần các chỉ thị

#if

. Tuy nhiên, bởi vì trình biên dịch thật sự bỏ qua các lời

gọi phương thức, nên mã của bạn không thể phụ thuộc vào các giá trị trả về từ phương thức.
Điều này có nghĩa là bạn có thể áp dụng

ConditionalAttribute

chỉ với các phương thức trả

về

void

.

Bạn có thể áp dụng nhiều thể hiện

ConditionalAttribute

cho một phương thức, tương đương

với phép OR luận lý. Các lời gọi phương thức

DumpState

dưới đây chỉ được biên dịch nếu

DEBUG

hoặc

TEST

được định nghĩa.

[System.Diagnostics.Conditional("DEBUG")]

[System.Diagnostics.Conditional("TEST")]

public static void DumpState() {//...}

Việc thực hiện phép AND luận lý cần sử dụng phương thức điều kiện trung gian, khiến cho
mã trở nên quá phức tạp, khó hiểu và khó bảo trì. Ví dụ dưới đây cần phương thức trung gian

DumpState2

để định nghĩa cả hai ký hiệu

DEBUG

TEST

.

[System.Diagnostics.Conditional("DEBUG")]

public static void DumpState() {

DumpState2();

}

[System.Diagnostics.Conditional("TEST")]

public static void DumpState2() {//...}

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.