Struktury (F#)
A struktury je typ kompaktního objektu, který může být efektivnější než třídy pro typy, které mají malé množství dat a jednoduchý.
[ 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 hodnoty typů, což znamená, že jsou uloženy přímo v zásobníku nebo, pokud jsou používány jako pole nebo prvky pole, vložené v nadřazeném zadejte.Na rozdíl od tříd a záznamy mají struktur sémantiku průchodu podle hodnoty.To znamená, že jsou užitečné především pro malé agregace dat, které jsou přístupné a často zkopírovány.
V předchozích syntaxe jsou zobrazeny dvě formy.První není lehký syntaxi, ale přesto často se používá, protože při použití struct a end klíčových slov, 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í syntaxe představuje deklarace člena a definice.Struktury může mít konstruktory a proměnlivých a neměnná a prohlašují členové a implementace rozhraní.Další informace naleznete v tématu Členy (F#).
Struktury nemohou účastnit dědičnosti, nemůže obsahovat let nebo do vazby, a nelze rekurzivně obsahovat pole vlastní typ (ačkoli mohou obsahovat odkaz na buňky, které vlastní typ odkazu).
Protože struktury neumožňují let vazby, pole ve strukturách musí deklarovat pomocí val klíčové slovo.val Klíčové slovo definuje pole a jeho typ, ale neumožňuje inicializace.Místo toho val prohlášení jsou inicializována nula nebo null.Z tohoto důvodu struktur, které mají implicitní konstruktor (, parametry, které jsou bezprostředně za názvem struktury v prohlášení uvedena) vyžadují, aby val prohlášení uvedena poznámka s DefaultValue atributu.Struktury, které bude mít konstruktor definovaný stále podporují inicializaci nula.Proto DefaultValue atribut je prohlášení, že takové nulová hodnota je platná pro pole.Implicitní konstruktory struktur neprovádějte žádné akce, protože let a do vazby jsou povoleny na typ, ale jsou k dispozici jako soukromé pole hodnoty parametru implicitní konstruktor předán.
Explicitní konstruktory zahrnuje inicializační hodnoty pole.Máte strukturu, která má explicitní konstruktoru, stále podporuje nula inicializace; však nelze použít DefaultValue na atribut val prohlášení protože koliduje s explicitní konstruktor.Další informace o val prohlášení, viz Explicitní pole: Val klíčové slovo (F#).
Atributy Modifikátory dostupnosti jsou povoleny na struktur 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í kód příklady 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