Compartilhar via


Atributos (F#)

Atributos permitem que os metadados a serem aplicadas a uma construção de programação.

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

Comentários

Na sintaxe anterior, o target é opcional e, se estiver presente, especifica o tipo de entidade do programa que o atributo se aplica ao. Os valores válidos para target são mostrados na tabela apresentada posteriormente neste documento.

O attribute-name refere-se ao nome do (possivelmente qualificado com espaços para nomes) de um tipo de atributo válido, com ou sem o sufixo Attribute que é geralmente usado em nomes de tipo de atributo. Por exemplo, o tipo de ObsoleteAttribute pode ser reduzido apenas Obsolete neste contexto.

O arguments são os argumentos para o construtor para o tipo de atributo. Se um atributo tem um construtor padrão, a lista de argumentos e parênteses podem ser omitidos. Atributos oferecem suporte a argumentos posicionais e argumentos nomeados. Argumentos posicionais são argumentos usados na ordem em que aparecem. Argumentos nomeados podem ser usados se o atributo tem propriedades públicas. Você pode defini-los usando a sintaxe a seguir na lista de argumentos.

property-name = property-value

Inicializações de propriedade podem estar em qualquer ordem, mas eles devem seguir quaisquer argumentos posicionais. Veja a seguir um exemplo de um atributo que utiliza os argumentos posicionais e inicializações de propriedade.

open System.Runtime.InteropServices

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

Neste exemplo, o atributo é DllImportAttribute, usado aqui na forma abreviada. O primeiro argumento é um parâmetro posicional e o segundo é uma propriedade.

Atributos são um.NET construção de programação que permite que um objeto conhecido como um atributo a ser associado um tipo ou outro elemento de programa. O elemento de programa ao qual um atributo é aplicado é conhecido como o atributo de destino. O atributo geralmente contém metadados sobre seu destino. Nesse contexto, os metadados poderiam ser quaisquer dados sobre o tipo diferente de seus campos e membros.

Atributos na F# podem ser aplicados para as seguintes construções de programação: funções, métodos, assemblies, módulos, tipos (classes, registros, estruturas, interfaces, delegados, enumerações, uniões e assim por diante), construtores, propriedades, campos, parâmetros, parâmetros de tipo e valores de retorno. Atributos não são permitidos em let ligações dentro de classes, expressões ou fluxo de trabalho.

Normalmente, a declaração de atributo será exibida diretamente antes da declaração de atributo de destino. Várias declarações de atributo podem ser usadas em conjunto, da seguinte forma.

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

Você pode consultar os atributos em tempo de execução usando.NET reflexão.

Você pode declarar vários atributos individualmente, como no exemplo de código anterior, ou você pode declará-los em um conjunto de colchetes se você usar um ponto e vírgula para separar os atributos individuais e construtores, conforme mostrado aqui.

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

Atributos encontrados normalmente incluem o Obsolete atributos de atributo, atributos para considerações de segurança, COM suporte, atributos relacionados à propriedade de código e atributos que indica se um tipo pode ser serializado. O exemplo a seguir demonstra o uso da Obsolete atributo.

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

Para os destinos de atributo assembly e module, aplicar os atributos para um nível superior do de ligação no seu assembly. Você pode incluir a palavra assembly ou module na declaração de atributo, como a seguir.

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

Se você omite o atributo de destino para um atributo aplicado a uma do de vinculação, o compilador F# tenta determinar o destino de atributo que faça sentido para o atributo. Muitas classes de atributo tem um atributo do tipo AttributeUsageAttribute que inclui informações sobre os possíveis alvos com suporte para esse atributo. Se a AttributeUsageAttribute indica que o atributo oferece suporte a funções como destinos, o atributo é levado para aplicar até o ponto de entrada principal do programa. Se a AttributeUsageAttribute indica que o atributo oferece suporte a conjuntos de módulos como destinos, o compilador usa o atributo a ser aplicado ao assembly. A maioria dos atributos não se aplicam às funções e de módulos (assemblies), mas em casos em que eles fazem, o atributo é levado para aplicar a função principal do programa. Se o atributo de destino for especificado explicitamente, o atributo é aplicado ao destino especificado.

Embora não seja necessário normalmente especificar o atributo explicitamente, direcione os valores válidos para target em um atributo são mostrados na tabela a seguir, junto com exemplos de uso.

Atributo de destino

Exemplo

Assembly

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

Retornar

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

campo

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

propriedade

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

param

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

tipo

[<type: StructLayout(Sequential)>]

type MyStruct =

struct

x : byte

y : int

end

Consulte também

Outros recursos

Referência da linguagem F#