ConditionalAttribute Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Signalizuje kompilátorům, že mají volání metody nebo atribut ignorovat, pokud není definovaný zadaný symbol podmíněné kompilace.
public ref class ConditionalAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true)]
public sealed class ConditionalAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Method, AllowMultiple=true)]
[System.Serializable]
public sealed class ConditionalAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true)]
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ConditionalAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true)>]
type ConditionalAttribute = class
inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Method, AllowMultiple=true)>]
[<System.Serializable>]
type ConditionalAttribute = class
inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true)>]
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ConditionalAttribute = class
inherit Attribute
Public NotInheritable Class ConditionalAttribute
Inherits Attribute
- Dědičnost
- Atributy
Příklady
Následující příklad ukazuje použití .ConditionalAttribute V příkladu se předpokládá, že podmínka je definována pomocí možnosti kompilátoru /define . Změnou možnosti kompilátoru můžete získat různé výsledky. Podmínky můžete volitelně definovat pomocí direktiv ve vzorovém kódu místo jejich identifikace jako možností kompilátoru.
#define CONDITION1
#define CONDITION2
using System;
using System.Diagnostics;
class Test
{
static void Main()
{
Console.WriteLine("Calling Method1");
Method1(3);
Console.WriteLine("Calling Method2");
Method2();
Console.WriteLine("Using the Debug class");
Debug.Listeners.Add(new ConsoleTraceListener());
Debug.WriteLine("DEBUG is defined");
}
[Conditional("CONDITION1")]
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
CONDITION1 or CONDITION2 is defined
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")
Method1(3)
Console.WriteLine("Calling Method2")
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
Poznámky
Atribut můžete použít ConditionalAttribute na metody a třídy. Jeho použití ve třídách je však platné pouze pro typy, které jsou odvozeny z Attribute. ConditionalAttribute buď bude ignorován, nebo vygeneruje upozornění kompilátoru nebo chybovou zprávu, pokud ho použijete u jakéhokoli jiného typu.
Použití ConditionalAttribute na metodu indikuje kompilátorům, že volání metody by nemělo být zkompilováno do jazyka MSIL (Microsoft Intermediate Language), pokud není definován symbol podmíněné kompilace, který je přidružen ConditionalAttribute k. Pokud použijete tento atribut na metodu, která nevrací void, zobrazí se v sadě Visual Studio chyba kompilace. ConditionalAttribute Použití na atribut znamená, že atribut by neměl být vysílán do metadat, pokud není definován symbol podmíněné kompilace. Všechny argumenty předané metodě nebo atributu jsou stále kontrolovány typem kompilátoru.
K definování symbolů podmíněné kompilace můžete použít následující techniky:
Použít možnosti příkazového řádku kompilátoru; například /define:DEBUG.
Použití proměnných prostředí v prostředí operačního systému; například nastavte DEBUG=1.
Použití direktiv ve zdrojovém kódu; Například definujte proměnnou kompilace následujícím způsobem:
#define DEBUG
#Const DEBUG=True
Pokud chcete proměnnou nedefinovat, použijte následující:
#undef DEBUG
#Const DEBUG=False
Kompilátorům, které vyhovují specifikaci CLS (Common Language Specification), je povoleno ignorovat ConditionalAttribute. Kompilátory jazyka C#, F#, Visual Basic a C++ podporují ConditionalAttribute; kompilátor jazyka JScript nepodporuje atribut .
Poznámka
V jazyce Visual Basic AddressOf
není operátor ovlivněn tímto atributem. Například Call CType(AddressOf delegate, Action)
vždy vyvolá delegate
, i když Call delegate()
nemusí.
ConditionalAttribute se použije na metody, které jsou definovány ve třídách Debug a Trace .
Další informace o používání atributů najdete v tématu Atributy.
Konstruktory
ConditionalAttribute(String) |
Inicializuje novou instanci ConditionalAttribute třídy . |
Vlastnosti
ConditionString |
Získá symbol podmíněné kompilace, který je přidružen k atributu ConditionalAttribute . |
TypeId |
Při implementaci v odvozené třídě získá jedinečný identifikátor pro tuto Attributetřídu . (Zděděno od Attribute) |
Metody
Equals(Object) |
Vrací hodnotu, která určuje, zda je tato instance rovna zadanému objektu. (Zděděno od Attribute) |
GetHashCode() |
Vrátí hodnotu hash pro tuto instanci. (Zděděno od Attribute) |
GetType() |
Type Získá z aktuální instance. (Zděděno od Object) |
IsDefaultAttribute() |
Při přepsání v odvozené třídě označuje, zda je hodnota této instance výchozí hodnotou pro odvozenou třídu. (Zděděno od Attribute) |
Match(Object) |
Při přepsání v odvozené třídě vrátí hodnotu, která označuje, zda se tato instance rovná zadanému objektu. (Zděděno od Attribute) |
MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Objectsouboru . (Zděděno od Object) |
ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |
Explicitní implementace rozhraní
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Mapuje sadu názvů na odpovídající sadu identifikátorů pro rozesílání. (Zděděno od Attribute) |
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Načte informace o typu objektu, které lze použít k získání informací o typu pro rozhraní. (Zděděno od Attribute) |
_Attribute.GetTypeInfoCount(UInt32) |
Získá počet rozhraní typu informací, které objekt poskytuje (0 nebo 1). (Zděděno od Attribute) |
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Poskytuje přístup k vlastnostem a metodám vystaveným objektem. (Zděděno od Attribute) |