Estruturas (F#)
A estrutura é um tipo de objeto compacto que pode ser mais eficiente do que uma classe para tipos que possuem uma pequena quantidade de dados e o comportamento simples.
[ attributes ]
type [accessibility-modifier] type-name =
struct
type-definition-elements
end
// or
[ attributes ]
[<StructAttribute>]
type [accessibility-modifier] type-name =
type-definition-elements
Comentários
Estruturas são tipos de valor, que significa que eles são armazenados diretamente na pilha ou, quando eles são usados como campos ou digite de elementos de matriz, embutido no pai.Ao contrário de registros e classes, estruturas tem semântica passar-por-valor.Isso significa que eles são úteis principalmente para pequenas agregações de dados que são acessados e copiadas com freqüência.
Na sintaxe anterior, as duas formas são mostradas.A primeira não é a sintaxe leve, mas Todavia freqüentemente é usado porque, quando você usa o struct e end palavras-chave, você pode omitir a StructAttribute atributo, que é exibido no segundo formulário.Você pode abreviar StructAttribute apenas Struct.
O type-definition-elements na sintaxe anterior representa as definições e declarações de membro.Estruturas podem ter construtores e campos mutáveis e imutáveis, e eles podem declarar membros e implementações de interface.Para obter mais informações, consulte Membros (F#).
Estruturas não podem participar de herança, não pode conter let ou do ligações, e não é possível recursivamente contêm campos de seu próprio tipo (embora eles podem conter fazer referência a células que fazem referência a seu próprio tipo).
Estruturas permitem let ligações, você deve declarar os campos nas estruturas usando a val palavra-chave.O val palavra-chave define um campo e seu tipo, mas não permite a inicialização.Em vez disso, val declarações são inicializados para zero ou nulo.Por esse motivo, estruturas que tem um construtor implícito (ou seja, parâmetros que são dadas imediatamente após o nome da estrutura na declaração) requerem que val declarações ser anotada com o DefaultValue atributo.Estruturas que tem um construtor definido ainda oferece suporte a inicialização do zero.Portanto, o DefaultValue atributo é uma declaração de que tal um valor zero é válido para o campo.Construtores implícitas para estruturas não executar quaisquer ações porque let e do as ligações são permitidas no tipo, mas os valores de parâmetro de construtor implícito passados estão disponíveis como campos particulares.
Construtores explícitos podem envolver a inicialização de valores de campo.Quando você tem uma estrutura que possui um construtor explícito, ele ainda suporta a inicialização do zero; No entanto, você não usar o DefaultValue de atributo na val declarações porque é conflitante com o construtor explícito.Para obter mais informações sobre val declarações, consulte Campos explícitos: Val A palavra-chave (F#).
Atributos e modificadores de acessibilidade são permitidas em estruturas e siga as mesmas regras que as de outros tipos.Para obter mais informações, consulte Atributos (F#) e Controle de acesso (F#).
Os exemplos de código a seguir ilustram as definições de estruturas.
// In Point3D, three immutable values are defined.
// x, y, and z will be initialized to 0.0.
type Point3D =
struct
val x: float
val y: float
val z: float
end
// In Point2D, two immutable values are defined.
// Point2D has an explicit constructor.
// You can create zero-initialized instances of Point2D, or you can
// pass in arguments to initialize the values.
type Point2D =
struct
val X: float
val Y: float
new(x: float, y: float) = { X = x; Y = y }
end