次の方法で共有


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 内)

参照

ConditionalAttribute メンバ | System.Diagnostics 名前空間