ConditionalAttribute クラス


指定した条件付きコンパイル シンボルが定義されていない場合、メソッド呼び出しまたは属性を無視するようコンパイラに指示します。Indicates to compilers that a method call or attribute should be ignored unless a specified conditional compilation symbol is defined.

public ref class ConditionalAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true)]
[System.AttributeUsage(System.AttributeTargets.Method, AllowMultiple=true)]
public sealed class ConditionalAttribute : Attribute
type ConditionalAttribute = class
    inherit Attribute
Public NotInheritable Class ConditionalAttribute
Inherits Attribute

次の例は、ConditionalAttribute の使い方を示しています。The following example demonstrates the use of ConditionalAttribute. この例では、 /defineコンパイラオプションを使用して条件が定義されていることを前提としています。The example assumes that the condition is defined with the /define compiler option. コンパイラオプションを変更することで、異なる結果を得ることができます。You can obtain different results by changing the compiler option. 必要に応じて、コンパイラオプションとして識別するのではなく、サンプルコードでプラグマを使用して条件を定義できます。You can optionally define the conditions by using pragmas in the sample code instead of identifying them as compiler options.

#define CONDITION1
#define CONDITION2
using System;
using System.Diagnostics;

class Test
    static void Main()
        Console.WriteLine("Calling Method1");
        Console.WriteLine("Calling Method2");
        Console.WriteLine("Using the Debug class");
        Debug.Listeners.Add(new ConsoleTraceListener());
        Debug.WriteLine("DEBUG is defined");
    public static void Method1(int x)
        Console.WriteLine("CONDITION1 is defined");
    [Conditional("CONDITION1"), Conditional("CONDITION2")]  
    public static void Method2()
        Console.WriteLine("CONDITION1 or CONDITION2 is defined");

When compiled as shown, the application (named ConsoleApp) 
produces the following output.

Calling Method1
CONDITION1 is defined
Calling Method2
Using the Debug class
DEBUG is defined
#Const CONDITION1 = True
#Const CONDITION2 = True
Imports System.Diagnostics

Class Test

    Shared Sub Main()
        Console.WriteLine("Calling Method1")
        Console.WriteLine("Calling Method2")
        Console.WriteLine("Using the Debug class")
        Debug.Listeners.Add(New ConsoleTraceListener())
        Debug.WriteLine("DEBUG is defined")
    End Sub
    <ConditionalAttribute("CONDITION1")> _
    Shared Sub Method1(x As Integer)
        Console.WriteLine("CONDITION1 is defined")
    End Sub
    <ConditionalAttribute("CONDITION1"), ConditionalAttribute("CONDITION2")> _
    Shared Sub Method2()
        Console.WriteLine("CONDITION1 or CONDITIOIN2 is defined")
    End Sub
End Class

' When compiled as shown, the application (named ConsoleApp) 
' produces the following output.

'Calling Method1
'CONDITION1 is defined
'Calling Method2
'CONDITION1 or CONDITION2 is defined
'Using the Debug class
'DEBUG is defined


ConditionalAttribute 属性を、メソッドおよびクラスに適用することができます。You can apply the ConditionalAttribute attribute to methods and classes. ただし、クラスでの使用は Attribute から派生した型に対してのみ有効です。However, its use on classes is valid only for types that are derived from Attribute. その他の種類に適用する場合、 ConditionalAttribute は無視されるか、コンパイラの警告またはエラー メッセージが生成されます。ConditionalAttribute either will be ignored or will produce a compiler warning or error message if you apply it to any other type.

ConditionalAttribute をメソッドに適用することは、ConditionalAttribute と関連付けられる条件付きコンパイル シンボルを定義しない限り、メソッドの呼び出しを Microsoft intermediate language (MSIL) にコンパイルしないことを、コンパイラに指示することを示します。Applying ConditionalAttribute to a method indicates to compilers that a call to the method should not be compiled into Microsoft intermediate language (MSIL) unless the conditional compilation symbol that is associated with ConditionalAttribute is defined. void ではないものを返すメソッドにこの属性を定義する場合、Visual Studio でコンパイル エラーが表示されます。You will get a compilation error in Visual Studio if you apply this attribute to a method that does not return void. ConditionalAttribute を属性に適用することは、条件付きコンパイル シンボルが定義されていない場合は、メタデータに属性を出力しないことを示します。Applying ConditionalAttribute to an attribute indicates that the attribute should not be emitted to metadata unless the conditional compilation symbol is defined. メソッドあるいは属性に渡されるどんな引数でも、コンパイラによって型チェックが行われます。Any arguments passed to the method or attribute are still type-checked by the compiler.

条件付きコンパイルシンボルを定義するには、次の方法を使用できます。You can use the following techniques to define conditional compilation symbols:

  • /define:DEBUG のように、コンパイラのコマンド ライン オプションを使用します。Use compiler command-line options; for example, /define:DEBUG.

  • set DEBUG=1 のように、オペレーティング システムのシェルで環境変数を使用します。Use environment variables in the operating system shell; for example, set DEBUG=1.

  • ソース コードでのプラグマを使用します。たとえば、次の例のようにコンパイル変数を定義します。Use pragmas in the source code; for example, define the compilation variable as follows:

    #define DEBUG  
    #Const DEBUG=True  

    変数を未定義にするには、次のようにします。To undefine the variable, use the following:

    #undef DEBUG  
    #Const DEBUG=False  

共通言語仕様 (CLS) に準拠するコンパイラは、ConditionalAttribute を無視することを許可されています。Compilers that comply with the Common Language Specification (CLS) are permitted to ignore ConditionalAttribute. C#、Visual Basic、および C++ のコンパイラは、ConditionalAttribute をサポートしています。 JScript コンパイラは、属性をサポートしていません。The C#, Visual Basic, and C++ compilers support ConditionalAttribute; the JScript compiler does not support the attribute.


Visual Basic で、AddressOf演算子はこの属性の影響を受けません。In Visual Basic, the AddressOf operator is not affected by this attribute. たとえば、Call CType(AddressOf delegate, Action) は常に delegate を呼び出しますが、Call delegate() はそうしません。For example, Call CType(AddressOf delegate, Action) always invokes delegate, although Call delegate() might not.

ConditionalAttribute は、DebugTrace クラスで定義されているメソッドに適用されます。ConditionalAttribute is applied to the methods that are defined in the Debug and Trace classes.

属性を使用する方法の詳細については、属性を参照してください。For more information about how to use attributes, see Attributes.



ConditionalAttribute クラスの新しいインスタンスを初期化します。Initializes a new instance of the ConditionalAttribute class.



ConditionalAttribute 属性に関連付けられた条件付きコンパイル シンボルを取得します。Gets the conditional compilation symbol that is associated with the ConditionalAttribute attribute.


派生クラスで実装されると、この Attribute の一意の識別子を取得します。When implemented in a derived class, gets a unique identifier for this Attribute.

(継承元 Attribute)



このインスタンスが、指定されたオブジェクトと等価であるかどうかを示す値を返します。Returns a value that indicates whether this instance is equal to a specified object.

(継承元 Attribute)

このインスタンスのハッシュ コードを返します。Returns the hash code for this instance.

(継承元 Attribute)

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(継承元 Object)

派生クラスでオーバーライドされるとき、このインスタンスの値が派生クラスの既定値であるかどうかを示します。When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(継承元 Attribute)

派生クラス内でオーバーライドされたときに、指定したオブジェクトとこのインスタンスが等しいかどうかを示す値を返します。When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(継承元 Attribute)

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(継承元 Object)

現在のオブジェクトを表す string を返します。Returns a string that represents the current object.

(継承元 Object)


_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

一連の名前を対応する一連のディスパッチ識別子に割り当てます。Maps a set of names to a corresponding set of dispatch identifiers.

(継承元 Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

オブジェクトの型情報を取得します。この情報はインターフェイスの型情報の取得に使用できます。Retrieves the type information for an object, which can be used to get the type information for an interface.

(継承元 Attribute)

オブジェクトが提供する型情報インターフェイスの数 (0 または 1) を取得します。Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(継承元 Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

オブジェクトによって公開されたプロパティおよびメソッドへのアクセスを提供します。Provides access to properties and methods exposed by an object.

(継承元 Attribute)