Bagikan melalui


Terapkan atribut

Gunakan proses berikut untuk menerapkan atribut ke elemen kode Anda.

  1. Tentukan atribut baru atau gunakan atribut .NET yang ada.

  2. Terapkan atribut ke elemen kode dengan menempatkannya segera sebelum elemen.

    Setiap bahasa memiliki sintaks atributnya sendiri. Dalam C++ dan C#, atribut dikelilingi oleh tanda kurung siku dan dipisahkan dari elemen dengan spasi putih, yang dapat mencakup pemisah baris. Dalam Visual Basic, atribut dikelilingi oleh tanda kurung sudut dan harus berada di garis logis yang sama; karakter kelanjutan garis dapat digunakan jika garis putus diinginkan.

  3. Tentukan parameter posisi dan parameter bernama untuk atribut .

    Parameter posisi diperlukan dan harus datang sebelum parameter bernama; mereka sesuai dengan parameter salah satu konstruktor atribut. Parameter bernama bersifat opsional dan sesuai dengan sifat baca/tulis dari atribut. Di C++, dan C#, tentukan name=value untuk setiap parameter opsional, di mana name adalah nama properti . Di Visual Basic, tentukan name:=value.

Atribut dipancarkan ke dalam metadata saat Anda mengkompilasi kode Anda dan tersedia untuk Common Language Runtime (CLR) dan alat atau aplikasi kustom apa pun melalui layanan refleksi pada runtime.

Menurut konvensi, semua nama atribut diakhir dengan "Atribut". Namun, beberapa bahasa yang menargetkan runtime, seperti Visual Basic dan C#, tidak mengharuskan Anda menentukan nama lengkap atribut. Misalnya, jika Anda ingin menginisialisasi System.ObsoleteAttribute, Anda hanya perlu mereferensikannya sebagai Usang.

Argumen atribut yang valid

Saat Anda meneruskan argumen ke atribut, gunakan salah satu jenis ekspresi berikut:

  • Ekspresi konstan (literal, nilai const/Const, dan nilai enum).
  • Ketik ekspresi (typeof di C#, GetType di Visual Basic).
  • Ekspresi nama (nameof di C#, NameOf di Visual Basic), yang menghasilkan konstanta string pada waktu kompilasi.
  • Ekspresi pembuatan array dari jenis parameter atribut yang hanya menggunakan ekspresi sebelumnya sebagai nilai elemen.

Jenis berikut valid sebagai jenis parameter atribut:

  • Jenis sederhana (kata kunci C# / kata kunci Visual Basic / tipe runtime .NET)

    C# Visual Basic jenis runtime .NET
    bool Boolean Boolean
    byte Byte Byte
    char Char Char
    double Double Double
    float Single Single
    int Integer Int32
    long Long Int64
    short Short Int16
    string String String
  • object (dalam C#, saat nilai adalah salah satu jenis argumen atribut yang valid atau larik satu dimensi darinya).

  • Type.

  • Jenis enum yang dapat diakses di situs penggunaan.

  • Array dimensi tunggal dari salah satu jenis sebelumnya.

Nota

Jenis sbyte, , ushortuint, ulong, decimal, nint, dan nuint bukan jenis parameter atribut yang valid, meskipun mereka mendukung konstanta harfiah.

Contoh berikut menunjukkan argumen atribut yang valid:

[MyAttr(true)]                            // bool literal
[MyAttr(42)]                              // int literal
[MyAttr("hello")]                         // string literal
[MyAttr(MyEnum.Value)]                    // enum value
[MyAttr(typeof(string))]                  // typeof expression
[MyAttr(nameof(MyClass))]                 // nameof expression (string constant)
[MyAttr(new int[] { 1, 2, 3 })]          // array of constants
[MyAttr(new string[] { "a", "b" })]      // array of strings
<MyAttr(True)>                            ' Boolean literal
<MyAttr(42)>                              ' Integer literal
<MyAttr("hello")>                         ' String literal
<MyAttr(MyEnum.Value)>                    ' Enum value
<MyAttr(GetType(String))>                 ' GetType expression
<MyAttr(NameOf(MyClass))>                 ' NameOf expression (string constant)
<MyAttr(New Integer() {1, 2, 3})>         ' Array of constants

Contoh berikut menunjukkan argumen yang menyebabkan kesalahan pengkompilasi:

string value = "test";
[MyAttr(value)]        // Error CS0182: not a constant expression
[MyAttr(GetValue())]   // Error CS0182: method calls aren't allowed

Menerapkan atribut ke metode

Contoh kode berikut menunjukkan cara menggunakan System.ObsoleteAttribute, yang menandai kode sebagai usang. String "Will be removed in next version" diteruskan ke atribut . Atribut ini mengakibatkan peringatan kompilator yang menunjukkan string yang diberikan saat kode yang dijelaskan oleh atribut tersebut dipanggil.

public class Example
{
    // Specify attributes between square brackets in C#.
    // This attribute is applied only to the Add method.
    [Obsolete("Will be removed in next version.")]
    public static int Add(int a, int b)
    {
        return (a + b);
    }
}

class Test
{
    public static void Main()
    {
        // This generates a compile-time warning.
        int i = Example.Add(2, 2);
    }
}
Public Class Example
    ' Specify attributes between square brackets in C#.
    ' This attribute is applied only to the Add method.
    <Obsolete("Will be removed in next version.")>
    Public Shared Function Add(a As Integer, b As Integer) As Integer
        Return a + b
    End Function
End Class

Class Test
    Public Shared Sub Main()
        ' This generates a compile-time warning.
        Dim i As Integer = Example.Add(2, 2)
    End Sub
End Class

Menerapkan atribut di tingkat perakitan

Jika Anda ingin menerapkan atribut di tingkat perakitan, gunakan kata kunci assembly (Assembly di Visual Basic). Kode berikut menunjukkan kode AssemblyTitleAttribute diterapkan pada tingkat perakitan.

using System.Reflection;
[assembly:AssemblyTitle("My Assembly")]
Imports System.Reflection
<Assembly: AssemblyTitle("My Assembly")>

Ketika atribut ini diterapkan, string "My Assembly" ditempatkan dalam manifes perakitan dalam bagian metadata file. Anda dapat melihat atribut baik dengan menggunakan Il Disassembler (Ildasm.exe) atau dengan membuat program kustom untuk mengambil atribut.

Lihat juga