Atrybuty (F#)

Atrybuty włączyć metadanych, które mają być stosowane do konstrukcji programowania.

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

Uwagi

W poprzednich składni target jest opcjonalny i, jeśli jest obecny, określa rodzaj ten atrybut stosuje się do jednostki programu.Prawidłowymi wartościami dla target są pokazane w tabeli, która pojawia się w dalszej części tego dokumentu.

attribute-name Odnosi się do nazwy (ewentualnie kwalifikacje z przestrzeni nazw) typu prawidłowym atrybutem, z lub bez przyrostka Attribute stosowany zazwyczaj w nazwach typu atrybutu.Na przykład, typ ObsoleteAttribute może zostać skrócony nieco Obsolete w tym kontekście.

arguments Są argumenty konstruktora dla typu atrybutu.Jeśli atrybut ma domyślnego konstruktora, lista argumentów i nawiasy można pominąć.Atrybuty obsługują pozycyjne argumentów i argumentów nazwanych.Serwomechanizm argumenty są argumenty, które są używane w kolejności, w jakiej są wyświetlane.Atrybut ma właściwości publicznej mogą korzystać nazwanych argumentów.Można ustawić te przy użyciu następującej składni w liście argumentów.

property-name = property-value

Takie inicjowania właściwości może być w dowolnej kolejności, ale muszą się stosować żadnych argumentów pozycyjne.Oto przykładowy atrybut, który używa pozycyjne argumenty i właściwości inicjowania.

open System.Runtime.InteropServices

[<DllImport("kernel32", SetLastError=true)>]
extern bool CloseHandle(nativeint handle)

W tym przykładzie atrybut jest DllImportAttribute, w tym miejscu są używane w formie skróconej.Pierwszy argument jest parametr pozycyjne, a drugą właściwość.

Atrybuty.NET konstrukcji programowania, umożliwiający obiektu znanego jako atrybutu ma być skojarzony z określonego typu lub innego elementu programu.Element programu, do którego stosuje się ten atrybut jest znany jako docelowego atrybutu.Atrybut zazwyczaj zawiera metadane dotyczące jej wartością docelową.W tym kontekście metadanych może być żadnych danych o typie innym niż jego pola i elementy członkowskie.

Atrybuty F# można stosować do następujących narzędzi programistycznych: funkcje, metody, zestawów, modułów, typów (klas, rekordy, struktury, interfejsy, delegatów, wyliczeń, związki i tak dalej), konstruktory, właściwości, pól, parametrów, parametrów typu i wartości zwracane.Atrybuty nie są dozwolone w let wiązania wewnątrz klasy, wyrażenia lub wyrażeń przepływu pracy.

Zazwyczaj deklaracji atrybutu pojawia się bezpośrednio przed deklaracji atrybutu obiektu docelowego.Wiele deklaracji atrybutu można w następujący sposób.

[<Owner("Jason Carlson")>]
[<Company("Microsoft")>]
type SomeType1 =

Atrybuty mogą kwerendy w czasie wykonywania przy użyciu.NET odbicia.

Wiele atrybutów można zadeklarować indywidualnie, jak w poprzednim przykładzie kodu lub można zadeklarować je w jeden zestaw nawiasów Jeśli Użyj średnika do oddzielenia poszczególnych atrybutów i konstruktorzy, jak pokazano poniżej.

[<Owner("Darren Parker"); Company("Microsoft")>]
type SomeType2 =

Atrybuty najczęściej spotykanym obejmują Obsolete atrybut, atrybuty, które ze względów bezpieczeństwa atrybuty dla wsparcia, atrybuty, które odnoszą się do własności kodu i atrybuty wskazujące, czy można szeregować typu COM.Poniższy przykład ilustruje użycie Obsolete atrybut.

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

Dla celów atrybutu assembly i module, zastosować atrybuty do najwyższego poziomu do wiązania w zestawie użytkownika.Można dołączyć słowo assembly lub module w deklaracji atrybutu w następujący sposób.

open System.Reflection
[<assembly:AssemblyVersionAttribute("1.0.0.0")>]
do
   printfn "Executing..."

Jeśli pominięto docelowego atrybutu dla atrybutu stosowane do do wiążące, kompilator F# próbuje określić docelowego atrybutu, który ma sens dla tego atrybutu.Wiele klas atrybutu ma atrybut typu AttributeUsageAttribute , zawiera informacje o możliwych celów obsługiwane dla tego atrybutu.Jeśli AttributeUsageAttribute wskazuje, że atrybut obsługuje funkcje jako obiekty docelowe, atrybut jest podjętych w celu zastosowania się do punktu wejścia głównego programu.Jeśli AttributeUsageAttribute wskazuje, że atrybut obsługuje zestawów jako cele, kompilator ma atrybut, który ma zastosowanie do zestawu.Większość atrybutów nie dotyczą zarówno funkcje, jak i zestawy, ale w przypadkach gdy czy atrybut jest podjętych w celu zastosowania do głównych funkcji programu.Jeżeli docelowego atrybutu jest wyraźnie określony, atrybut jest stosowany do określonego miejsca docelowego.

Chociaż zazwyczaj trzeba określić atrybut jawnie, docelowe prawidłowymi wartościami dla target w atrybucie są pokazane w poniższej tabeli, wraz z przykładami użycia.

Atrybut docelowy

Przykład

Montaż

[<assembly: AssemblyVersionAttribute("1.0.0.0")>]

zwrot

let function1 x : [<return: Obsolete>] int = x + 1

pole

[<field: DefaultValue>] val mutable x: int

Właściwość

[<property: Obsolete>] this.MyProperty = x

param

member this.MyMethod([<param: Out>] x : ref<int>) = x := 10

Typ

[<type: StructLayout(Sequential)>]

type MyStruct =

struct

x : byte

y : int

end

Zobacz też

Inne zasoby

Materiały referencyjne dotyczące języka F#