Attribútumok (F#)
Az attribútumok lehetővé teszik a metaadatok programozási szerkezetre való alkalmazását.
Szintaxis
[<target:attribute-name(arguments)>]
Megjegyzések
Az előző szintaxisban a cél megadása nem kötelező, és ha van ilyen, meghatározza, hogy az attribútum milyen típusú programentitásra vonatkozik. A cél érvényes értékei megjelennek a dokumentum későbbi részében megjelenő táblázatban.
Az attribútumnév egy érvényes attribútumtípus nevére hivatkozik (esetleg névtérrel van minősítve), az attribútumtípusnevekben általában használt Attribute
utótaggal vagy anélkül. A ObsoleteAttribute
típus például lerövidíthető úgy, hogy az csak Obsolete
legyen ebben a környezetben.
A argumentumok az attribútumtípus konstruktorának argumentumai. Ha egy attribútum paraméter nélküli konstruktorsal rendelkezik, az argumentumlista és a zárójel kihagyható. Az attribútumok a pozícióargumentumokat és az elnevezett argumentumokat egyaránt támogatják. pozícióargumentumok olyan argumentumok, amelyek abban a sorrendben vannak használva, amelyben azok megjelennek. Az elnevezett argumentumok akkor használhatók, ha az attribútum nyilvános tulajdonságokkal rendelkezik. Ezeket az alábbi szintaxissal állíthatja be az argumentumlistában.
property-name = property-value
Az ilyen tulajdonság inicializálásai bármilyen sorrendben lehetnek, de minden pozícióargumentumot követniük kell. Az alábbi példa egy pozícióargumentumokat és tulajdonság inicializációkat használó attribútumra mutat be:
open System.Runtime.InteropServices
[<DllImport("kernel32", SetLastError=true)>]
extern bool CloseHandle(nativeint handle)
Ebben a példában az attribútum DllImportAttribute
, itt rövidített formában használatos. Az első argumentum egy pozícióparaméter, a második pedig egy tulajdonság.
Az attribútumok .NET-programozási szerkezetek, amelyek lehetővé teszik, hogy egy attribútumként ismert objektumot társítani egy típushoz vagy más programelemhez. Az a programelem, amelyre egy attribútum vonatkozik, az ismert mint az attribútum célpontja. Az attribútum általában metaadatokat tartalmaz a célról. Ebben az összefüggésben a metaadatok a mezőkön és a tagokon kívül más típusú adatok is lehetnek.
Az F# attribútumai a következő programozási szerkezetekre alkalmazhatók: függvények, metódusok, szerelvények, modulok, típusok (osztályok, rekordok, struktúrák, interfészek, meghatalmazottak, enumerálások, egyesítések stb.), konstruktorok, tulajdonságok, mezők, paraméterek, típusparaméterek és visszatérési értékek. Az attribútumok nem engedélyezettek a let
kötéseknél osztályokon belül, kifejezéseknél vagy munkafolyamat-kifejezéseknél.
Az attribútumdeklaráció általában közvetlenül az attribútumcél deklarációja előtt jelenik meg. Több attribútumdeklaráció is használható együtt, az alábbiak szerint:
[<Owner("Jason Carlson")>]
[<Company("Microsoft")>]
type SomeType1 =
Az attribútumokat futásidőben a .NET-tükröződés használatával kérdezheti le.
Az előző kód példához hasonlóan több attribútumot is deklarálhat egyenként, deklarálhatja őket egy zárójelben, ha pontosvesszővel választja el az egyes attribútumokat és konstruktorokat az alábbiak szerint:
[<Owner("Darren Parker"); Company("Microsoft")>]
type SomeType2 =
Az általában előforduló attribútumok közé tartozik a Obsolete
attribútum, a biztonsági szempontok attribútumai, a COM-támogatás attribútumai, a kód tulajdonjogához kapcsolódó attribútumok és az attribútumok, amelyek jelzik, hogy egy típus szerializálható-e. Az alábbi példa a Obsolete
attribútum használatát mutatja be.
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
Az assembly
és module
attribútumok esetében a legfelső szintű do
kötést alkalmazza az összeállításában. Az attribútumdeklarációban a assembly
vagy ``module``
szót az alábbiak szerint lehet megadni:
open System.Reflection
[<assembly:AssemblyVersionAttribute("1.0.0.0")>]
[<``module``:MyCustomModuleAttribute>]
do
printfn "Executing..."
Ha kihagyja egy do
kötésre alkalmazott attribútum célhelyét, az F#-fordító megkísérli meghatározni az attribútumnak megfelelő attribútumcélt. Számos attribútumosztály rendelkezik olyan System.AttributeUsageAttribute
típusú attribútummal, amely az attribútum által támogatott lehetséges célokra vonatkozó információkat tartalmazza. Ha a System.AttributeUsageAttribute
azt jelzi, hogy az attribútum célként támogatja a függvényeket, az attribútum a program fő belépési pontjára lesz alkalmazva. Ha a System.AttributeUsageAttribute
azt jelzi, hogy az attribútum támogatja a szerelvények célként való megjelölését, a fordító úgy veszi, hogy az attribútum a szerelvényre alkalmazandó. A legtöbb attribútum nem vonatkozik mind a függvényekre, mind a szerelvényekre, de azokban az esetekben, amikor igen, az attribútum a program fő függvényére vonatkozik. Ha az attribútumcél explicit módon van megadva, az attribútum a megadott célra lesz alkalmazva.
Bár általában nem kell explicit módon megadnia az attribútumcélt, az attribútumban cél érvényes értékei, valamint a használati példák az alábbi táblázatban láthatók:
Attribútumcél | Példa |
---|---|
összeszerelés |
|
modul |
|
módszer |
|
osztály |
|
Struktúra |
|
interfész |
|
enum |
|
Konstruktor |
|
visszatérés |
|
mező |
|
ingatlan |
|
paraméter |
|
típus |
|