Tôi muốn làm như dưới đây nhưng bằng C # thay vì C ++
#ifdef _DEBUG
bool bypassCheck=TRUE_OR_FALSE;//i will decide depending on what i am debugging
#else
bool bypassCheck = false; //NEVER bypass it
#endif
Tôi muốn làm như dưới đây nhưng bằng C # thay vì C ++
#ifdef _DEBUG
bool bypassCheck=TRUE_OR_FALSE;//i will decide depending on what i am debugging
#else
bool bypassCheck = false; //NEVER bypass it
#endif
Câu trả lời:
Tôi muốn giới thiệu bạn sử dụng Thuộc tính có điều kiện !
Cập nhật: 3,5 năm sau
Bạn có thể sử dụng #if
như thế này ( ví dụ được sao chép từ MSDN ):
// preprocessor_if.cs
#define DEBUG
#define VC_V7
using System;
public class MyClass
{
static void Main()
{
#if (DEBUG && !VC_V7)
Console.WriteLine("DEBUG is defined");
#elif (!DEBUG && VC_V7)
Console.WriteLine("VC_V7 is defined");
#elif (DEBUG && VC_V7)
Console.WriteLine("DEBUG and VC_V7 are defined");
#else
Console.WriteLine("DEBUG and VC_V7 are not defined");
#endif
}
}
Chỉ hữu ích cho việc loại trừ các phần của phương pháp.
Nếu bạn sử dụng #if
để loại trừ một số phương thức khỏi quá trình biên dịch thì bạn sẽ phải loại trừ khỏi việc biên dịch tất cả các đoạn mã gọi phương thức đó (đôi khi bạn có thể tải một số lớp trong thời gian chạy và bạn không thể tìm thấy trình gọi bằng "Tìm tất cả các tham chiếu"). Nếu không sẽ có sai sót.
Mặt khác, nếu bạn sử dụng biên dịch có điều kiện, bạn vẫn có thể để lại tất cả các đoạn mã gọi phương thức. Tất cả các tham số sẽ vẫn được xác nhận bởi trình biên dịch. Phương thức sẽ không được gọi trong thời gian chạy . Tôi nghĩ rằng cách tốt hơn là chỉ ẩn phương thức một lần và không phải xóa tất cả mã gọi nó. Bạn không được phép sử dụng thuộc tính điều kiện trên các phương thức trả về giá trị - chỉ trên các phương thức void. Nhưng tôi không nghĩ rằng đây là một hạn chế lớn vì nếu bạn sử dụng #if
với một phương thức trả về một giá trị, bạn phải ẩn tất cả các đoạn mã gọi nó.
Đây là một ví dụ:
// gọi Class1.ConditionalMethod () sẽ bị bỏ qua trong thời gian chạy // trừ khi hằng số DEBUG được xác định sử dụng System.Diagnostics; lớp Class1 { [Có điều kiện ("GỠ LỖI")] public static void ConditionalMethod () { Console.WriteLine ("Thực thi Class1.ConditionalMethod"); } }
Tóm lược:
Tôi sẽ sử dụng #ifdef
trong C ++ nhưng với C # / VB, tôi sẽ sử dụng thuộc tính Điều kiện. Bằng cách này, bạn ẩn định nghĩa phương thức mà không cần phải ẩn các đoạn mã gọi nó. Mã gọi vẫn được biên dịch và xác thực bởi trình biên dịch, mặc dù vậy, phương thức không được gọi trong thời gian chạy. Bạn có thể muốn sử dụng #if
để tránh phụ thuộc vì với thuộc tính Điều kiện, mã của bạn vẫn được biên dịch.
C # không có một bộ xử lý trước. Nó hoạt động hơi khác so với C ++ và C.
Đây là một liên kết MSDN - phần trên tất cả các chỉ thị tiền xử lý .