ConditionalAttribute 类

向编译器指示,如果将指定预处理标识符应用到一个方法,则该方法是可调用的。

**命名空间:**System.Diagnostics
**程序集:**mscorlib(在 mscorlib.dll 中)

语法

声明
<SerializableAttribute> _
<AttributeUsageAttribute(AttributeTargets.Class Or AttributeTargets.Method, AllowMultiple:=True)> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class ConditionalAttribute
    Inherits Attribute
用法
Dim instance As ConditionalAttribute
[SerializableAttribute] 
[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Method, AllowMultiple=true)] 
[ComVisibleAttribute(true)] 
public sealed class ConditionalAttribute : Attribute
[SerializableAttribute] 
[AttributeUsageAttribute(AttributeTargets::Class|AttributeTargets::Method, AllowMultiple=true)] 
[ComVisibleAttribute(true)] 
public ref class ConditionalAttribute sealed : public Attribute
/** @attribute SerializableAttribute() */ 
/** @attribute AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Method, AllowMultiple=true) */ 
/** @attribute ComVisibleAttribute(true) */ 
public final class ConditionalAttribute extends Attribute
SerializableAttribute 
AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Method, AllowMultiple=true) 
ComVisibleAttribute(true) 
public final class ConditionalAttribute extends Attribute

备注

ConditionalAttribute 支持 TraceDebug 类中定义的条件方法。

ConditionalAttribute 属性修饰的方法总是被编译成 Microsoft 中间语言 (MSIL),但在运行时不能对这些方法执行调用。如果这些方法包含参数,则在运行时会进行类型检查,但并不进行计算。

提示

默认情况下,在 Visual Studio 2005 编译发布版本时,TRACE 条件编译常数应当已定义;在编译调试版本时,DEBUG 和 TRACE 两个常数均应当已定义。对于命令行编译,必须指定所有的条件编译常数。

提示

可以将一个拥有关联的 ConditionStringConditionalAttribute 附加给方法的定义,从而创建条件方法。此后,编译器遇到对该方法的调用时,就可以选择忽略该调用,除非在调用的地点定义一个编译变量,并且该变量的值以区分大小写的方式与提供给 ConditionalAttributeConditionString 匹配。

编译器可能提供多种技术以定义此类编译变量,如:

  • 编译器命令行开关(例如,/define:DEBUG)

  • 操作系统外壳程序中的环境变量(例如,SET DEBUG=1)。

  • 源代码中的杂注(例如,#define DEBUG 用于定义编译变量,或者 #undef DEBUG 用于取消定义编译变量)。

允许符合 CLS 的编译器忽略 ConditionalAttribute

有关使用属性的更多信息,请参见 利用属性扩展元数据

示例

下面的控制台应用程序示例演示了如何与支持使用 ConditionalAttribute 的特定编译器一起使用此属性。

Imports System
Imports System.Diagnostics
Imports Microsoft.VisualBasic

Class Module1

    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.
'
'Console.WriteLine is always displayed.

'
'Console.WriteLine is always displayed.
'CONDITION1 and DEBUG are defined

'
'Console.WriteLine is always displayed.
'CONDITION1 and DEBUG are defined
'CONDITION2 and DEBUG are defined
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.

Console.WriteLine is always displayed
Method1 - DEBUG and CONDITION1 are specified
Method1 - TRACE and CONDITION1 are specified
Method2 - DEBUG, CONDITION1 or CONDITION2 are specified

Console.WriteLine is always displayed
Method2 - DEBUG, CONDITION1 or CONDITION2 are specified

Console.WriteLine is always displayed
Method1 - TRACE and CONDITION1 are specified

*/
/*
C++ with Managed Extensions uses the C++ standard preprocessor.  Use the 
preprocessor directives rather than this attribute.
*/

继承层次结构

System.Object
   System.Attribute
    System.Diagnostics.ConditionalAttribute

线程安全

此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。

平台

Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

.NET Compact Framework

受以下版本支持:2.0、1.0

请参见

参考

ConditionalAttribute 成员
System.Diagnostics 命名空间