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 pragmas 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 pengkompilasi atau pesan kesalahan jika Anda menerapkannya ke jenis lain.

ConditionalAttribute Menerapkan ke metode menunjukkan kepada pengkompilasi bahwa panggilan ke metode tidak boleh dikompilasi ke dalam bahasa perantara Microsoft (MSIL) kecuali simbol kompilasi kondisional yang terkait didefinisikanConditionalAttribute. 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 oleh pengkompilasi.

Anda dapat menggunakan teknik berikut untuk menentukan simbol kompilasi bersyar:

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

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

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

    #define DEBUG  
    
    #Const DEBUG=True  
    

    Untuk mendefinisikan variabel, gunakan yang berikut:

    #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 .

Catatan

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

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

Untuk informasi selengkapnya tentang cara menggunakan atribut, lihat Atribut.

Konstruktor

ConditionalAttribute(String)

Menginisialisasi instans baru kelas ConditionalAttribute.

Properti

ConditionString

Mendapatkan simbol kompilasi bersyar yang terkait dengan ConditionalAttribute atribut .

TypeId

Ketika diimplementasikan di kelas turunan, mendapatkan pengidentifikasi unik untuk ini Attribute.

(Diperoleh dari Attribute)

Metode

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 dari instans Type saat ini.

(Diperoleh dari Object)
IsDefaultAttribute()

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

(Diperoleh dari Attribute)
Match(Object)

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

(Diperoleh dari Attribute)
MemberwiseClone()

Membuat salinan dangkal dari saat ini Object.

(Diperoleh dari Object)
ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Implementasi Antarmuka Eksplisit

_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