Attribútumok alkalmazása

Az alábbi eljárással attribútumot alkalmazhat a kód egy elemére.

  1. Adjon meg egy új attribútumot, vagy használjon meglévő .NET attribútumot.

  2. Alkalmazza az attribútumot a kódelemre úgy, hogy közvetlenül az elem elé helyezi.

    Minden nyelvnek saját attribútumszintaxisa van. C++ és C# esetén az attribútum szögletes zárójelekkel van körülvéve, és fehér szóközzel elválasztva az elemtől, amely sortörést is tartalmazhat. A Visual Basic az attribútumot szögletes zárójelek veszik körül, és ugyanazon a logikai vonalon kell lenniük; a vonal folytatása karakter használható, ha sortörést szeretne.

  3. Adja meg az attribútum pozícióparamétereit és elnevezett paramétereit.

    A pozícióparaméterek megadása kötelező, és a névvel ellátott paraméterek elé kell tartozniuk; ezek megfelelnek az attribútum egyik konstruktorának paramétereinek. Az elnevezett paraméterek nem kötelezőek, és megfelelnek az attribútum olvasási/írási tulajdonságainak. A C++ és C# esetében adja meg a name=value értéket az egyes választható paraméterekhez, ahol name a tulajdonság neve. Visual Basicben határozza meg name:=value.

Az attribútum a kód lefordításakor metaadatokba kerül, és a közös nyelvi futtatókörnyezet és bármely egyéni eszköz vagy alkalmazás számára elérhető a futtatókörnyezeti tükrözési szolgáltatásokon keresztül.

Konvenció szerint az összes attribútumnév "Attribútum" végződésű. A futtatókörnyezetet megcélzott nyelvek közül azonban számos nyelv , például a Visual Basic és a C# nem követeli meg az attribútum teljes nevének megadását. Ha például inicializálni szeretné System.ObsoleteAttribute, csak Obsolete-ként kell hivatkoznia rá.

Érvényes attribútumargumentumok

Amikor argumentumokat ad át egy attribútumnak, használja az alábbi kifejezések egyikét:

  • Állandó kifejezések (literálok, const/Const értékek és számértékek).
  • Írja be a kifejezéseket (typeof a C#-ban, GetType Visual Basic).
  • Névkifejezések (nameof C# nyelvben, NameOf Visual Basic nyelvben), amelyek fordításkor karakterlánc állandókat hoznak létre.
  • Olyan attribútumparaméter típusú tömblétrehozási kifejezések, amelyek csak az előző kifejezéseket használják elemértékként.

Az alábbi típusok attribútumparaméter-típusokként érvényesek:

  • Egyszerű típusok (C# kulcsszó / Visual Basic kulcsszó / .NET futtatókörnyezet típusa):

    C# Visual Basic .NET futtatókörnyezet típusa
    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 (C#-ban, ha az érték az egyik érvényes attribútumargumentumtípus, vagy ezek egydimenziós tömbje).

  • Type.

  • Azok az enum típusok, amelyek hozzáférhetők a használati helyen.

  • Az előző típusok bármelyikének egydimenziós tömbjei.

Megjegyzés:

A típusok sbyte, ushort, uint, ulong, decimal, , nint, , és nuint nem érvényesek attribútumparaméter-típusok, annak ellenére, hogy a konstansokat támogatják.

Az alábbi példák érvényes attribútumargumentumokat mutatnak be:

[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

Az alábbi példák olyan argumentumokat mutatnak be, amelyek fordítóhibát okoznak:

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

Attribútum alkalmazása metódusra

Az alábbi példakód bemutatja a használat System.ObsoleteAttributemódját, amely elavultként jelöli meg a kódot. A sztring "Will be removed in next version" át lesz adva az attribútumnak. Ez az attribútum egy fordítói figyelmeztetést okoz, amely megjeleníti az átadott sztringet, amikor az attribútum által leírt kódot meghívják.

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

Attribútumok alkalmazása a szerelvény szintjén

Ha a szerelvény szintjén szeretne attribútumot alkalmazni, használja a assembly (Assembly Visual Basic) kulcsszót. Az alábbi kód a AssemblyTitleAttribute assembly szinten alkalmazott kódot mutatja.

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

Az attribútum alkalmazásakor a karakterlánc "My Assembly" az összeállításjegyzékbe kerül a fájl metaadat-részében. Az attribútumot az IL-szétszerelés (Ildasm.exe) használatával, vagy egy egyéni program létrehozásával tekintheti meg az attribútum lekéréséhez.

Lásd még