Struktury (F#)
Objekt struktury je typ compact objektu, který může být efektivnější než třída pro typy, které mají malé množství dat a jednoduché chování.
[ attributes ] type [accessibility-modifier] type-name = struct type-definition-elements end // or [ attributes ] [<StructAttribute>] type [accessibility-modifier] type-name = type-definition-elements
Poznámky
Struktury jsou hodnota typy, což znamená, že jsou uloženy přímo v zásobníku nebo, pokud jsou používány jako pole nebo zadejte prvků pole, vložených do nadřazeného objektu.Na rozdíl od třídy a záznamů mají struktury sémantiku průchodu podle hodnot.To znamená, že jsou užitečné především pro malé agregace dat, která jsou přístupná a zkopírovaných často.
V předchozím syntaxi jsou uvedeny dvě formulářů.První není odlehčený syntaxe, ale je však často použít, protože při použití struct a end klíčová slova, můžete vynechat StructAttribute atribut, který se zobrazí v druhém formuláři.Můžete zkrátit StructAttribute těsně Struct.
type-definition-elements v předchozí syntaxi představuje člen deklarace a definice.Struktury mohou mít konstruktory a měnitelný a nezměnitelné polí a jejich lze deklarovat členy a implementace rozhraní.Další informace naleznete v tématu Členy (F#).
Struktury nemůže být součástí dědičnosti, nemůže obsahovat let nebo do vazby, a nemohou rekurzivně obsahovat pole vlastní typ (Přestože mohou obsahovat odkaz na buňky odkazující na své vlastní typ).
Vzhledem k tomu, že není dovoleno struktury let vazby, musí deklarovat pole ve strukturách pomocí val klíčové slovo.val Klíčové slovo definuje pole a jeho typ, ale neumožňuje inicializace.Namísto toho val prohlášení jsou inicializovaného na nulu nebo hodnota null.Z tohoto důvodu struktury, které mají implicitní konstruktor (to znamená, parametry, které jsou uvedeny bezprostředně za názvem struktury v deklaraci) vyžaduje, aby val být označena deklarace DefaultValue atributu.Struktury, které mají definován konstruktor stále podporují inicializace nula.Proto DefaultValue atribut je prohlášení, že takové nulová hodnota je platná pro pole.Implicitní konstruktory pro struktury neprovádějte žádné akce, protože let a do na typu nejsou povoleny vazby, ale hodnoty parametru implicitní konstruktor předané jsou k dispozici jako soukromé pole.
Explicitní konstruktory může zahrnovat inicializace hodnot polí.Až budete mít strukturu, která má explicitní konstruktoru, i nadále podporuje nula inicializace; Nicméně je velmi riskantní používat DefaultValue atribut na val prohlášení vzhledem k tomu, že je v konfliktu s explicitní konstruktoru.Další informace o val naleznete v prohlášení, Explicitní pole: Klíčové slovo val (F#).
Atributy a modifikátory dostupnosti jsou povoleny pro struktury a postupujte podle stejných pravidel jako u jiných typů.Další informace naleznete v tématu Atributy (F#) a Řízení přístupu (F#).
Následující příklady kódu ilustrují definice struktury.
// 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