Attribútumok (F#)
Az attribútumok lehetővé teszik a metaadatok programozási szerkezetre való alkalmazását.
Syntax
[<target:attribute-name(arguments)>]
Megjegyzések
Az előző szintaxisban a cél megadása nem kötelező, és ha van ilyen, meghatározza az attribútum által érintett programentitást. A célértékek érvényes értékei a dokumentum későbbi részében megjelenő táblázatban jelennek meg.
Az attribútumnév egy érvényes attribútumtípus nevének (esetleg névterekkel minősített) nevére hivatkozik, az attribútumtípusnevekben általában használt utótaggal Attribute
vagy anélkül. A típus ObsoleteAttribute
például ebben Obsolete
a kontextusban lerövidíthető.
Az 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. A pozícióargumentumok olyan argumentumok, amelyek abban a sorrendben vannak használva, amelyben 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 rövidített DllImportAttribute
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 objektum típushoz vagy más programelemhez legyen társítva. Az attribútumot alkalmazó programelemet attribútumcélnak nevezzük. 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 az osztályokon, kifejezéseken let
vagy munkafolyamat-kifejezéseken belüli kötéseken.
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 az attribútum, a Obsolete
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 az attribútum használatát Obsolete
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 attribútumcélok assembly
module
esetében az attribútumokat egy legfelső szintű do
kötésre alkalmazza a szerelvényben. A szót assembly
vagy ``module``
az attribútumdeklarációt az alábbiak szerint foglalhatja be:
open System.Reflection
[<assembly:AssemblyVersionAttribute("1.0.0.0")>]
[<``module``:MyCustomModuleAttribute>]
do
printfn "Executing..."
Ha kihagyja a kötésre do
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 típusú System.AttributeUsageAttribute
attribútummal, amely információkat tartalmaz az attribútum által támogatott lehetséges célokról. Ha az System.AttributeUsageAttribute
attribútum 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 az System.AttributeUsageAttribute
attribútum azt jelzi, hogy az attribútum célként támogatja a szerelvényeket, a fordító az attribútumot alkalmazza a szerelvényre. 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 lévő célértékek és a használati példák az alábbi táblázatban láthatók:
Attribútumcél | Példa |
---|---|
szerelvény |
|
modul |
|
vissza |
|
mező |
|
tulajdonság |
|
Param |
|
típus |
|