Sdílet prostřednictvím


Atributy (F#)

Atributy umožňují použití metadat pro programovací konstruktor.

Syntaxe

[<target:attribute-name(arguments)>]

Poznámky

V předchozí syntaxi je cíl volitelný a pokud existuje, určuje druh entity programu, na kterou se atribut vztahuje. Platné hodnoty pro cíl se zobrazí v tabulce, která se zobrazí později v tomto dokumentu.

Název atributu odkazuje na název (pravděpodobně kvalifikovaný s obory názvů) platného typu atributu s příponouAttribute, která se obvykle používá v názvech typů atributů. Typ ObsoleteAttribute lze například zkrátit na pouze 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 DllImportAttributeatribut 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 u let vazeb 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 za běhu dotazovat pomocí 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í Obsolete atribut, atributy pro aspekty zabezpečení, atributy pro podporu 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

Pro cíle assembly atributu a modulepoužijete atributy na vazbu nejvyšší úrovně do v sestavení. Slovo nebo ``module`` deklaraci atributu assembly můžete zahrnout 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 do vazbu, 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 tento atribut. System.AttributeUsageAttribute Pokud označuje, že atribut podporuje funkce jako cíle, atribut se použije na hlavní vstupní bod programu. System.AttributeUsageAttribute Pokud označuje, ž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
sestavení
[<assembly: AssemblyVersion("1.0.0.0")>]
modul
[<``module``: MyCustomAttributeThatWorksOnModules>]
return
let function1 x : [<return: MyCustomAttributeThatWorksOnReturns>] int = x + 1
pole
[<DefaultValue>] val mutable x: int
vlastnost
[<Obsolete>] this.MyProperty = x
Param
member this.MyMethod([<Out>] x : ref<int>) = x := 10
type
[<type: StructLayout(LayoutKind.Sequential)>]
type MyStruct =
  struct
    val x : byte
    val y : int
  end

Viz také