Atributy (C#)

Atributy poskytují výkonnou metodu přidružování metadat nebo deklarativní informace, s kódem (sestavení, typy, metodami, vlastnostmi a tak dále). Po přiřazení atributu k entitě programu lze pomocí metody s názvem reflexezadat dotaz na atribut v době běhu. Další informace naleznete v tématu reflexe (C#).

Atributy mají následující vlastnosti:

  • Atributy přidávají do programu metadata. Metadata jsou informace o typech definovaných v programu. Všechna sestavení .NET obsahují zadanou sadu metadat, které popisují typy a členy typu definované v sestavení. Můžete přidat vlastní atributy a zadat případné další požadované informace. Další informace naleznete v tématu a vytváření vlastních atributů (C#).
  • Jeden nebo více atributů lze použít pro celá sestavení, moduly nebo menší prvky programu, jako jsou třídy a vlastnosti.
  • Atributy mohou přijímat argumenty stejným způsobem jako metody a vlastnosti.
  • Váš program může prošetřit vlastní metadata nebo metadata v jiných programech pomocí reflexe. Další informace naleznete v tématu přístup k atributům pomocí reflexe (C#).

Použití atributů

Atributy lze umístit téměř do jakékoli deklarace, i když konkrétní atribut může omezit typy deklarací, na kterých je platný. V jazyce C# zadáte atribut tak, že umístíte název atributu uzavřený do hranatých závorek ([]) nad deklaraci entity, na kterou se vztahuje.

V tomto příkladu SerializableAttribute je atribut použit k použití konkrétní charakteristiky pro třídu:

[Serializable]
public class SampleClass
{
    // Objects of this type can be serialized.
}

Metoda s atributem DllImportAttribute je deklarována jako v následujícím příkladu:

[System.Runtime.InteropServices.DllImport("user32.dll")]
extern static void SampleMethod();

V deklaraci lze umístit více než jeden atribut, jak ukazuje následující příklad:

using System.Runtime.InteropServices;
void MethodA([In][Out] ref double x) { }
void MethodB([Out][In] ref double x) { }
void MethodC([In, Out] ref double x) { }

Některé atributy lze pro danou entitu zadat více než jednou. Příklad takového atributu Multiuse je ConditionalAttribute :

[Conditional("DEBUG"), Conditional("TEST1")]
void TraceMethod()
{
    // ...
}

Poznámka

Podle konvence názvy všech atributů končí slovem "Attribute", aby je bylo možné odlišit od ostatních položek v knihovnách .NET. Při použití atributů v kódu však není nutné zadávat příponu atributu. Například [DllImport] je ekvivalentní k [DllImportAttribute] , ale DllImportAttribute je skutečným názvem atributu v knihovně tříd .NET.

Parametry atributu

Mnoho atributů má parametry, které mohou být pozice, nepojmenované nebo pojmenované. V určitém pořadí musí být zadány všechny poziční parametry a nelze je vynechat. Pojmenované parametry jsou volitelné a lze je zadat v libovolném pořadí. Poziční parametry jsou uvedeny jako první. Například tyto tři atributy jsou ekvivalentní:

[DllImport("user32.dll")]
[DllImport("user32.dll", SetLastError=false, ExactSpelling=false)]
[DllImport("user32.dll", ExactSpelling=false, SetLastError=false)]

První parametr, název knihovny DLL, je pozice a vždy se nachází jako první; ostatní mají název. V takovém případě mají obě pojmenované parametry výchozí hodnotu false, takže je lze vynechat. Poziční parametry odpovídají parametrům konstruktoru atributu. Pojmenované nebo volitelné parametry odpovídají buď vlastnostem nebo polím atributu. Informace o výchozích hodnotách parametrů naleznete v dokumentaci k jednotlivým atributům.

Další informace o povolených typech parametrů naleznete v části atributyspecifikace jazyka C# .

Cíle atributů

Cíl atributu je entita, na kterou se atribut vztahuje. Atribut může například platit pro třídu, konkrétní metodu nebo celé sestavení. Ve výchozím nastavení se atribut vztahuje na prvek, který následuje. Můžete ale také explicitně určit, zda je atribut použit na metodu, nebo na jeho parametr nebo na jeho návratovou hodnotu.

K explicitní identifikaci cíle atributu použijte následující syntaxi:

[target : attribute-list]

Seznam možných target hodnot je uveden v následující tabulce.

Cílová hodnota Platí pro
assembly Celé sestavení
module Aktuální modul sestavení
field Pole ve třídě nebo struktuře
event Událost
method Přístupové objekty metody nebo getset vlastnosti
param Parametry metody nebo set parametry přístupového objektu vlastnosti
property Vlastnost
return Návratová hodnota metody, indexeru vlastností nebo get přistupujícího objektu vlastnosti
type Struktura, třída, rozhraní, výčet nebo delegát

Zadejte field cílovou hodnotu pro použití atributu pro pole zálohování vytvořené pro field.

Následující příklad ukazuje, jak použít atributy na sestavení a moduly. Další informace najdete v tématu běžné atributy (C#).

using System;
using System.Reflection;
[assembly: AssemblyTitleAttribute("Production assembly 4")]
[module: CLSCompliant(true)]

Následující příklad ukazuje, jak použít atributy na metody, parametry metody a návratové hodnoty metody v jazyce C#.

// default: applies to method
[ValidatedContract]
int Method1() { return 0; }

// applies to method
[method: ValidatedContract]
int Method2() { return 0; }

// applies to parameter
int Method3([ValidatedContract] string contract) { return 0; }

// applies to return value
[return: ValidatedContract]
int Method4() { return 0; }

Poznámka

Bez ohledu na cíle, které ValidatedContract jsou definovány jako platné, je nutné zadat cíl, a to i v return případě ValidatedContract , že byly definovány pro použití pouze pro návratové hodnoty. Jinými slovy, kompilátor nebude používat AttributeUsage informace pro vyřešení dvojznačných cílů atributu. Další informace naleznete v tématu AttributeUsage (C#).

Běžné použití atributů

Následující seznam obsahuje několik běžných použití atributů v kódu:

  • Označení metod pomocí WebMethod atributu ve webových službách k označení toho, že by měla být metoda volat přes protokol SOAP. Další informace naleznete v tématu WebMethodAttribute.
  • Popisuje způsob zařazení parametrů metody při spolupráci s nativním kódem. Další informace naleznete v tématu MarshalAsAttribute.
  • Popisuje vlastnosti modelu COM pro třídy, metody a rozhraní.
  • Volání nespravovaného kódu pomocí DllImportAttribute třídy.
  • Popisuje vaše sestavení s ohledem na název, verzi, popis nebo ochrannou známku.
  • Popisuje, kteří členové třídy mají být serializováni k trvalému serializaci.
  • Popisuje, jak mapovat mezi členy třídy a uzly XML pro serializaci kódu XML.
  • Popisuje požadavky na zabezpečení pro metody.
  • Určení vlastností používaných k vymáhání zabezpečení.
  • Řízení optimalizace pomocí kompilátoru JIT (just-in-time), takže kód zůstane snadno laděn.
  • Získání informací o volajícím metody.

Další informace naleznete v tématu:

Viz také