以下を実行したいのですが、C ++ではなく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 ++ではなく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
回答:
条件付き属性を使用することをお勧めします!
アップデート:3.5年後
次の#ifように使用できます(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
}
}
メソッドの一部を除外する場合にのみ役立ちます。
を使用#ifして一部のメソッドをコンパイルから除外する場合は、そのメソッドを呼び出すすべてのコードをコンパイルから除外する必要があります(実行時に一部のクラスをロードし、「すべての参照を検索」で呼び出し元を見つけることができない場合があります)。そうしないと、エラーが発生します。
一方、条件付きコンパイルを使用する場合は、メソッドを呼び出すすべてのコードを残すことができます。すべてのパラメーターは、コンパイラーによって引き続き検証されます。このメソッドは実行時に呼び出されません。メソッドを1回だけ非表示にして、それを呼び出すすべてのコードを削除する必要がない方が良いと思います。値を返すメソッドで条件付き属性を使用することはできません-voidメソッドでのみ。しかし、これが大きな制限であるとは思いません。#if値を返すメソッドで使用する場合、それを呼び出すコードのすべての部分も非表示にする必要があるためです。
次に例を示します。
// Class1.ConditionalMethod()の呼び出しは実行時に無視されます
// DEBUG定数が定義されていない場合
System.Diagnosticsを使用します。
クラスClass1
{
[条件付き( "デバッグ")]
public static void ConditionalMethod(){
Console.WriteLine( "Executed Class1.ConditionalMethod");
}
}
概要:
私は#ifdefC ++で使用しますが、C#/ VBでは条件付き属性を使用します。これにより、メソッドを呼び出すコードを非表示にすることなく、メソッド定義を非表示にすることができます。呼び出しコードは引き続きコンパイラーによってコンパイルおよび検証されますが、メソッドは実行時に呼び出されません。#if条件付き属性を使用してもコードがコンパイルされるため、依存関係を回避するために使用したい場合があります。
C#にはプリプロセッサがあります。C ++やCとは少し異なる動作をします。
これがMSDNリンクです。すべてのプリプロセッサディレクティブに関するセクションです。