ConditionalAttribute クラス
指定したプリプロセス識別子を適用する場合に、メソッドが呼び出し可能になることをコンパイラに示します。
この型のすべてのメンバの一覧については、ConditionalAttribute メンバ を参照してください。
System.Object
System.Attribute
System.Diagnostics.ConditionalAttribute
<AttributeUsage(AttributeTargets.Method)>
<Serializable>
NotInheritable Public Class ConditionalAttribute Inherits Attribute
[C#]
[AttributeUsage(AttributeTargets.Method)]
[Serializable]
public sealed class ConditionalAttribute : Attribute
[C++]
[AttributeUsage(AttributeTargets::Method)]
[Serializable]
public __gc __sealed class ConditionalAttribute : public Attribute
[JScript]
public
AttributeUsage(AttributeTargets.Method)
Serializable
class ConditionalAttribute extends Attribute
スレッドセーフ
この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。
解説
ConditionalAttribute は、 Trace クラスおよび Debug クラスで定義される条件付きメソッドをサポートします。
ConditionalAttribute 属性を持つメソッドは常に Microsoft Intermediate Language (MSIL) にコンパイルされますが、これらのメソッドの呼び出しを実行時に行うことはできません。メソッドが引数を持つ場合、実行時に引数の型チェックは行われますが、その評価は行われません。
メモ Visual Studio .NET の既定では、リリース ビルドは定義済みの条件付きコンパイル定数 TRACE を使ってコンパイルされ、デバッグ ビルドは定義済みの DEBUG 定数と TRACE 定数の両方を使ってコンパイルされます。コマンドラインからビルドを実行する場合は、すべての条件付きコンパイル定数を指定する必要があります。
メモ ConditionString が関連付けられている ConditionalAttribute をメソッドの定義に結びつけ、条件付きメソッドを作成できます。その後、そのメソッドの呼び出しを認識しても、コンパイラはその呼び出しを無視できます。ただし、その呼び出し側でコンパイル変数が定義されていて、その値が ConditionalAttribute に渡された ConditionString と、大文字と小文字も含めて一致しない値であることが条件です。
コンパイラでは、そのようなコンパイル変数を定義するために、次に示す複数の手段が用意されています。
- コンパイラのコマンド ライン スイッチ (/define:DEBUG など)。
- オペレーティング システムのシェルの環境変数 (SET DEBUG=1 など)。
- ソース コードのプラグマ (コンパイル変数を定義する #define DEBUG や、同変数を未定義状態にする #undef DEBUG など)。
CLS 準拠のコンパイラでは、 ConditionalAttribute を無視できます。
属性の使用方法については、「 属性を使用したメタデータの拡張 」を参照してください。
使用例
[Visual Basic, C#, C++] この属性の使用をサポートしている特定のコンパイラで ConditionalAttribute を使用する方法を次のコンソール アプリケーションの例で示します。
Imports System
Imports System.Diagnostics
Imports Microsoft.VisualBasic
Public Class Module1
Public Shared Sub Main()
Console.WriteLine("Console.WriteLine is always displayed.")
Dim myWriter As New TextWriterTraceListener(System.Console.Out)
Debug.Listeners.Add(myWriter)
Dim A As New Module1()
A.Sub1()
End Sub 'Main
<Conditional("CONDITION1"), Conditional("CONDITION2")> _
Public Sub Sub1()
Sub2()
Sub3()
End Sub
<Conditional("CONDITION1")> _
Public Sub Sub2()
Debug.WriteLine("CONDITION1 and DEBUG are defined")
End Sub
<Conditional("CONDITION2")> _
Public Sub Sub3()
Debug.WriteLine("CONDITION2 and DEBUG are defined")
Trace.WriteLine("CONDITION2 and TRACE are defined")
End Sub
End Class
' This console application produces the following output when compiled as shown.
'
'C:\samples\ConditionalAttributeSample\CASVB>vbc /out:CASVB.exe /d:CONDITION1=1 /r:System.dll /target:exe CAS.vb
'Microsoft (R) Visual Basic .NET Compiler version 7.00.9429
'for Microsoft (R) .NET Framework version 1.00.3529
'Copyright (C) Microsoft Corporation 1987-2001. All rights reserved.
'C:\samples\ConditionalAttributeSample\CASVB>CASVB
'
'Console.WriteLine is always displayed.
'C:\samples\ConditionalAttributeSample\CASVB>vbc /out:CASVB.exe /d:CONDITION1=1,DEBUG=1 /r:System.dll /target:exe CAS.vb
'Microsoft (R) Visual Basic .NET Compiler version 7.00.9429
'for Microsoft (R) .NET Framework version 1.00.3529
'Copyright (C) Microsoft Corporation 1987-2001. All rights reserved.
'C:\samples\ConditionalAttributeSample\CASVB>CASVB
'
'Console.WriteLine is always displayed.
'CONDITION1 and DEBUG are defined
'C:\samples\ConditionalAttributeSample\CASVB>vbc /out:CASVB.exe /d:CONDITION1=1,CONDITION2=1,DEBUG=1 /r:System.dll /target:exe CAS.vb
'Microsoft (R) Visual Basic .NET Compiler version 7.00.9429
'for Microsoft (R) .NET Framework version 1.00.3529
'Copyright (C) Microsoft Corporation 1987-2001. All rights reserved.
'C:\samples\ConditionalAttributeSample\CASVB>CASVB
'
'Console.WriteLine is always displayed.
'CONDITION1 and DEBUG are defined
'CONDITION2 and DEBUG are defined
[C#]
using System;
using System.Diagnostics;
class Class1
{
[STAThread]
static void Main(string[] args)
{
TextWriterTraceListener myWriter =
new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(myWriter);
Console.WriteLine("Console.WriteLine is always displayed");
Method1();
Method2();
}
[Conditional("CONDITION1")]
public static void Method1()
{
Debug.Write("Method1 - DEBUG and CONDITION1 are specified\n");
Trace.Write("Method1 - TRACE and CONDITION1 are specified\n");
}
[Conditional("CONDITION1"), Conditional("CONDITION2")]
public static void Method2()
{
Debug.Write("Method2 - DEBUG, CONDITION1 or CONDITION2 are specified\n");
}
}
/*
This console application produces the following output when compiled as shown.
C:\samples\ConditionalAttributeSample\CASCS>csc /target:exe /d:CONDITION1,DEBUG,TRACE /out:CASCS.exe CAS.cs
Microsoft (R) Visual C# .NET Compiler version 7.00.9429
for Microsoft (R) .NET Framework version 1.0.3529
Copyright (C) Microsoft Corporation 2001. All rights reserved.
C:\PP\samples\ConditionalAttributeSample\CASCS>CASCS
Console.WriteLine is always displayed
Method1 - DEBUG and CONDITION1 are specified
Method1 - TRACE and CONDITION1 are specified
Method2 - DEBUG, CONDITION1 or CONDITION2 are specified
C:\samples\ConditionalAttributeSample\CASCS>csc /target:exe /d:CONDITION2,DEBUG,TRACE /out:CASCS.exe CAS.cs
Microsoft (R) Visual C# .NET Compiler version 7.00.9429
for Microsoft (R) .NET Framework version 1.0.3529
Copyright (C) Microsoft Corporation 2001. All rights reserved.
C:\samples\ConditionalAttributeSample\CASCS>CASCS
Console.WriteLine is always displayed
Method2 - DEBUG, CONDITION1 or CONDITION2 are specified
C:\samples\ConditionalAttributeSample\CASCS>csc /target:exe /d:CONDITION1,TRACE /out:CASCS.exe CAS.cs
Microsoft (R) Visual C# .NET Compiler version 7.00.9429
for Microsoft (R) .NET Framework version 1.0.3529
Copyright (C) Microsoft Corporation 2001. All rights reserved.
C:\samples\ConditionalAttributeSample\CASCS>CASCS
Console.WriteLine is always displayed
Method1 - TRACE and CONDITION1 are specified
*/
[C++]
/*
C++ with Managed Extensions uses the C++ standard preprocessor. Use the
preprocessor directives rather than this attribute.
*/
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
名前空間: System.Diagnostics
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET
アセンブリ: Mscorlib (Mscorlib.dll 内)