Použití atributů

Pomocí následujícího procesu použijte atribut na prvek kódu.

  1. Definujte nový atribut nebo použijte existující atribut .NET.

  2. Použijte atribut na prvek kódu tak, že ho umístíte bezprostředně před prvek.

    Každý jazyk má vlastní syntaxi atributu. V jazyce C++ a C# je atribut ohraničen hranatými závorkami a oddělen od elementu prázdným znakem, který může obsahovat konec řádku. V Visual Basic je atribut obklopen úhlovými závorkami a musí být na stejné logické čáře. Znak pokračování řádku lze použít, pokud je potřeba konec řádku.

  3. Zadejte poziční parametry a pojmenované parametry pro atribut.

    Poziční parametry jsou povinné a musí být před libovolnými pojmenovanými parametry; odpovídají parametrům jednoho z konstruktorů atributu. Pojmenované parametry jsou volitelné a odpovídají vlastnostem atributu pro čtení a zápis. V jazyce C++ a C# zadejte name=value pro každý volitelný parametr, kde name je název vlastnosti. V Visual Basic zadejte name:=value.

Atribut se emituje do metadat při kompilaci kódu a je k dispozici běhovému prostředí CLR (Common Language Runtime) a veškerému vlastnímu nástroji nebo aplikaci prostřednictvím služeb reflexe běhového prostředí.

Podle konvence končí všechny názvy atributů na "Attribute". Několik jazyků, které cílí na modul runtime, například Visual Basic a C#, však nevyžadují, abyste zadali úplný název atributu. Pokud například chcete inicializovat System.ObsoleteAttribute, stačí na ni odkazovat pouze jako zastaralé.

Platné argumenty atributů

Když předáte argumenty atributu, použijte jeden z následujících typů výrazů:

  • Konstantní výrazy (literály, const/Const hodnoty a výčtové hodnoty)
  • Výrazy typu (typeof v jazyce C#, GetType v Visual Basic).
  • Výrazy názvů (nameof v jazyce C#, NameOf v Visual Basic), které vytvářejí řetězcové konstanty v době kompilace.
  • Výrazy pro vytvoření pole typu atributového parametru, které jako hodnoty prvků používají výhradně pouze předchozí výrazy.

Následující typy jsou platné jako typy parametrů atributu:

  • Jednoduché typy (klíčové slovo C# / klíčové slovo Visual Basic / typ modulu runtime .NET):

    jazyk C# Visual Basic typ modulu 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 (v jazyce C#, pokud je hodnota jedním z platných typů argumentů atributu nebo jednorozměrné pole z nich).

  • Type.

  • Typy výčtu, které jsou přístupné v místě použití.

  • Jednorozměrná pole některého z předchozích typů.

Poznámka:

Typy sbyte, , ushort, uint, ulongdecimal, ninta nuint nejsou platné typy parametrů atributu, i když podporují literálové konstanty.

Následující příklady ukazují platné argumenty atributů:

[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

Následující příklady ukazují argumenty, které způsobují chybu kompilátoru:

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

Aplikovat atribut na metodu

Následující příklad kódu ukazuje, jak použít System.ObsoleteAttribute, který označuje kód jako zastaralý. Řetězec "Will be removed in next version" se předá atributu. Tento atribut způsobí upozornění kompilátoru, které zobrazí předaný řetězec, když je volán kód, který atribut popisuje.

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

Použití atributů na úrovni sestavení

Pokud chcete použít atribut na úrovni sestavení, použijte klíčové slovo assembly (Assembly v Visual Basic). Následující kód ukazuje AssemblyTitleAttribute použité na úrovni sestavení.

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

Při použití tohoto atributu se řetězec "My Assembly" umístí do manifestu sestavení v části souboru metadat. Atribut můžete zobrazit buď pomocí nástroje IL Disassembler (Ildasm.exe), nebo vytvořením vlastního programu pro načtení atributu.

Viz také