Atributy (F#)
Atributy umožňují použití metadat pro programovací konstruktor.
Syntax
[<target:attribute-name(arguments)>]
Poznámky
V předchozí syntaxi je cílová entita nepovinná a, je-li přítomna, určuje druh programové entity, na kterou se atribut vztahuje. Platné hodnoty pro cílového jsou popsány v tabulce, která se zobrazí dále v tomto dokumentu.
Atribut odkazuje na název platného typu atributu (případně kvalifikovaný s obory názvů), s příponou Attribute
či bez ní, která se obvykle používá v názvech typů atributů. Typ ObsoleteAttribute
lze například zkrátit na Obsolete
v tomto kontextu.
Argumenty jsou argumenty konstruktoru pro typ atributu. Pokud má atribut konstruktor bez parametrů, je možné vynechat seznam argumentů a závorky. Atributy podporují jak poziční argumenty, tak pojmenované argumenty. poziční argumenty jsou argumenty, které se používají v pořadí, ve kterém se zobrazují. Pojmenované argumenty lze použít, pokud má atribut veřejné vlastnosti. Můžete je nastavit pomocí následující syntaxe v seznamu argumentů.
property-name = property-value
Tyto inicializace vlastností mohou být v libovolném pořadí, ale musí následovat za libovolnými pozičními argumenty. Následuje příklad atributu, který používá poziční argumenty a inicializace vlastností:
open System.Runtime.InteropServices
[<DllImport("kernel32", SetLastError=true)>]
extern bool CloseHandle(nativeint handle)
V tomto příkladu je atribut DllImportAttribute
, zde použit ve zkráceném formátu. První argument je poziční parametr a druhý je vlastnost.
Atributy jsou programovací konstruktor .NET, který umožňuje objekt známý jako atribut být přidružen k typu nebo jinému prvku programu. Prvek programu, na který je atribut použit, se označuje jako cíl atributu . Atribut obvykle obsahuje metadata o svém cíli. V tomto kontextu mohou metadata být jakákoli data o jiném typu než jeho pole a členy.
Atributy v jazyce F# lze použít u následujících programovacích konstruktorů: funkce, metody, sestavení, moduly, typy (třídy, záznamy, struktury, rozhraní, delegáty, výčty, sjednocení atd.), konstruktory, vlastnosti, pole, parametry, parametry typu a návratové hodnoty. Atributy nejsou povoleny pro vazby let
uvnitř tříd, výrazů nebo výrazů pracovního postupu.
Obvykle se deklarace atributu zobrazí přímo před deklarací cíle atributu. Deklarace více atributů lze použít společně, a to následujícím způsobem:
[<Owner("Jason Carlson")>]
[<Company("Microsoft")>]
type SomeType1 =
Atributy můžete dotazovat během běhu programu pomocí technologie reflexe .NET.
Můžete deklarovat více atributů jednotlivě, jako v předchozím příkladu kódu, nebo je můžete deklarovat v jedné sadě závorek, pokud použijete středník k oddělení jednotlivých atributů a konstruktorů následujícím způsobem:
[<Owner("Darren Parker"); Company("Microsoft")>]
type SomeType2 =
Obvykle zjištěné atributy zahrnují atribut Obsolete
, atributy pro aspekty zabezpečení, atributy podpory modelu COM, atributy, které souvisejí s vlastnictvím kódu a atributy označující, zda lze typ serializovat. Následující příklad ukazuje použití atributu Obsolete
.
open System
[<Obsolete("Do not use. Use newFunction instead.")>]
let obsoleteFunction x y =
x + y
let newFunction x y =
x + 2 * y
// The use of the obsolete function produces a warning.
let result1 = obsoleteFunction 10 100
let result2 = newFunction 10 100
V sestavení použijete atributy u cílů atributu assembly
a module
ke svázání nejvyšší úrovně do
. Do deklarace atributu můžete zahrnout slovo assembly
nebo ``module``
následujícím způsobem:
open System.Reflection
[<assembly:AssemblyVersionAttribute("1.0.0.0")>]
[<``module``:MyCustomModuleAttribute>]
do
printfn "Executing..."
Pokud vynecháte cíl atributu pro atribut použitý na vazbu do
, kompilátor jazyka F# se pokusí určit cíl atributu, který dává smysl pro tento atribut. Mnoho tříd atributů má atribut typu System.AttributeUsageAttribute
, který obsahuje informace o možných cílech podporovaných pro daný atribut. Pokud System.AttributeUsageAttribute
indikuje, že atribut podporuje funkce jako cíle, atribut se použije pro hlavní vstupní bod programu. Pokud System.AttributeUsageAttribute
indikuje, že atribut podporuje sestavení jako cíle, kompilátor převezme atribut, který se použije na sestavení. Většina atributů se nevztahuje na funkce i sestavení, ale v případech, kde ano, atribut se použije pro hlavní funkci programu. Pokud je cíl atributu zadán explicitně, atribut se použije na zadaný cíl.
I když obvykle nepotřebujete explicitně zadat cíl atributu, platné hodnoty pro cíl v atributu spolu s příklady použití jsou uvedeny v následující tabulce:
Cíl atributu | Příklad |
---|---|
montáž |
|
modul |
|
metoda |
|
třída |
|
Struct |
|
rozhraní |
|
výčet |
|
konstruktor |
|
vrátit |
|
pole |
|
vlastnost |
|
Parametr |
|
typ |
|