ConditionalAttribute Kelas

Definisi

Menunjukkan kepada pengompilasi bahwa panggilan metode atau atribut harus diabaikan kecuali jika simbol kompilasi bersyarat tertentu ditentukan.

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
Warisan
ConditionalAttribute
Atribut

Contoh

Contoh berikut menunjukkan penggunaan ConditionalAttribute. Contoh mengasumsikan bahwa kondisi ditentukan dengan opsi /define compiler. Anda dapat memperoleh hasil yang berbeda dengan mengubah opsi pengkompilasi. Anda dapat secara opsional menentukan kondisi dengan menggunakan pragma dalam kode sampel alih-alih mengidentifikasinya sebagai opsi pengkompilasi.

#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

Keterangan

Anda dapat menerapkan atribut ke ConditionalAttribute metode dan kelas. Namun, penggunaannya pada kelas hanya berlaku untuk jenis yang berasal dari Attribute. ConditionalAttribute baik akan diabaikan atau akan menghasilkan peringatan kompilator atau pesan kesalahan jika Anda menerapkannya ke jenis lain.

Menerapkan ConditionalAttribute ke metode menunjukkan kepada pengkompilasi bahwa panggilan ke metode tidak boleh dikompilasi ke dalam bahasa perantara (MSIL) Microsoft kecuali simbol kompilasi bersyarkat yang terkait dengan ConditionalAttribute ditentukan. Anda akan mendapatkan kesalahan kompilasi di Visual Studio jika Anda menerapkan atribut ini ke metode yang tidak mengembalikan kekosongan. Menerapkan ConditionalAttribute ke atribut menunjukkan bahwa atribut tidak boleh dipancarkan ke metadata kecuali simbol kompilasi bersyarkat didefinisikan. Argumen apa pun yang diteruskan ke metode atau atribut masih diperiksa jenisnya oleh pengkompilasi.

Anda dapat menggunakan teknik berikut untuk menentukan simbol kompilasi bersyarah:

  • Gunakan opsi baris perintah pengkompilasi; misalnya, /define:DEBUG.

  • Gunakan variabel lingkungan dalam shell sistem operasi; misalnya, atur DEBUG=1.

  • Gunakan pragma dalam kode sumber; misalnya, tentukan variabel kompilasi sebagai berikut:

    #define DEBUG
    
    #Const DEBUG=True
    

    Untuk tidak menentukan variabel, gunakan yang berikut ini:

    #undef DEBUG
    
    #Const DEBUG=False
    

Pengkompilasi yang mematuhi Spesifikasi Bahasa Umum (CLS) diizinkan untuk mengabaikan ConditionalAttribute. Pengkompilasi C#, F#, Visual Basic, dan C++ mendukung ConditionalAttribute; pengkompilasi JScript tidak mendukung atribut .

Note

Dalam Visual Basic, operator AddressOf tidak terpengaruh oleh atribut ini. Misalnya, Call CType(AddressOf delegate, Action) selalu memanggil delegate, meskipun Call delegate() mungkin tidak.

ConditionalAttribute diterapkan ke metode yang ditentukan dalam Debug kelas dan Trace .

Untuk informasi selengkapnya tentang cara menggunakan atribut, lihat Atribut.

Konstruktor

Nama Deskripsi
ConditionalAttribute(String)

Menginisialisasi instans baru dari kelas ConditionalAttribute.

Properti

Nama Deskripsi
ConditionString

Mendapatkan simbol kompilasi bersyarkat yang terkait dengan ConditionalAttribute atribut .

TypeId

Ketika diimplementasikan dalam kelas turunan, mendapatkan pengidentifikasi unik untuk Attributeini.

(Diperoleh dari Attribute)

Metode

Nama Deskripsi
Equals(Object)

Mengembalikan nilai yang menunjukkan apakah instans ini sama dengan objek tertentu.

(Diperoleh dari Attribute)
GetHashCode()

Mengembalikan kode hash untuk instans ini.

(Diperoleh dari Attribute)
GetType()

Mendapatkan Type instans saat ini.

(Diperoleh dari Object)
IsDefaultAttribute()

Ketika ditimpa dalam kelas turunan, menunjukkan apakah nilai instans ini adalah nilai default untuk kelas turunan.

(Diperoleh dari Attribute)
Match(Object)

Saat ditimpa dalam kelas turunan, mengembalikan nilai yang menunjukkan apakah instans ini sama dengan objek tertentu.

(Diperoleh dari Attribute)
MemberwiseClone()

Membuat salinan dangkal dari Objectsaat ini.

(Diperoleh dari Object)
ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Implementasi Antarmuka Eksplisit

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

Memetakan sekumpulan nama ke sekumpulan pengidentifikasi pengiriman yang sesuai.

(Diperoleh dari Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Mengambil informasi jenis untuk objek, yang dapat digunakan untuk mendapatkan informasi jenis untuk antarmuka.

(Diperoleh dari Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Mengambil jumlah antarmuka informasi jenis yang disediakan objek (baik 0 atau 1).

(Diperoleh dari Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Menyediakan akses ke properti dan metode yang diekspos oleh objek.

(Diperoleh dari Attribute)

Berlaku untuk