Udostępnij za pośrednictwem


Budowle (F#)

A struktury jest typem obiektu kompaktowy, który może być bardziej efektywne niż klasa dla typów, które zostały niewielkiej ilości danych i zachowanie prosty.

[ attributes ]
type [accessibility-modifier] type-name =
   struct
      type-definition-elements
   end
// or
[ attributes ]
[<StructAttribute>]
type [accessibility-modifier] type-name =
   type-definition-elements

Uwagi

Struktury są typów wartości, co oznacza, że są one przechowywane bezpośrednio na stosie, lub gdy są one używane jako pola lub wpisz elementów tablicy, wbudowany w obiekcie nadrzędnym.W odróżnieniu od klas i rekordy struktur ma semantykę przebiegu przez wartość.Oznacza to, że są one przydatne głównie dla małych zagregowanych danych, które są dostępne i często kopiowane.

W poprzednich składni wyświetlane są dwie formy.Pierwszym nie jest lekkie składni, ale jest jednak często używane, ponieważ w przypadku korzystania z struct i end słów kluczowych, można pominąć StructAttribute atrybut, który pojawia się w drugim formularzu.Można skrócić StructAttribute nieco Struct.

type-definition-elements w poprzednim składni reprezentuje deklaracje członków i definicje.Struktury mogą mieć konstruktorów i pól mutable i niezmienne i one można zadeklarować członków i implementacji interfejsu.Aby uzyskać więcej informacji, zobacz Członkowie (F#).

Struktury nie mogą uczestniczyć w dziedziczenia, nie mogą zawierać let lub do wiązania, i nie można rekursywnie zawierają pola typu własne (chociaż mogą one zawierać odniesienia komórek, odwołujące się do ich własnych typu).

Ponieważ struktury nie zezwalaj na let wiązania, należy zadeklarować pól w strukturach za pomocą val słowa kluczowego.val Słowa kluczowego definiuje pole i jego typ, ale nie zezwala na inicjowanie.Zamiast tego val deklaracje są inicjowane jako zero lub wartość null.Z tego powodu struktur, które mają niejawne konstruktora (to znaczy parametry, które podane są zaraz po nazwie struktury w deklaracji) wymagają, aby val deklaracji zostać odnotowany z DefaultValue atrybut.Struktury, które zostały zdefiniowane konstruktora nadal obsługuje inicjowania zero.W związku z tym DefaultValue atrybut jest deklaracja, że takie wartość zero jest prawidłowe dla pola.Niejawne konstruktory struktur nie wykonaj czynnooci, ponieważ let i do powiązania typu są niedozwolone, ale wartości parametrów konstruktora niejawne przekazane w są dostępne jako prywatne pola.

Konstruktory jawne współpraca może obejmować Inicjowanie wartości pola.Gdy struktura, który ma być konstruktorem jawne nadal obsługuje inicjowania zero; jednak nie skorzystasz z DefaultValue atrybutu na val deklaracje, ponieważ jest w konflikcie z konstruktora jawne.Aby uzyskać więcej informacji o val deklaracje, zobacz Jawne pola: Val słowa kluczowego (F#).

Atrybuty modyfikatorów ułatwień dostępu są dozwolone na budowle i tym samym regułom, jak w przypadku innych typów.Aby uzyskać więcej informacji, zobacz Atrybuty (F#) i Kontrola dostępu (F#).

Poniższe przykłady kodu ilustrują definicje 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

Zobacz też

Informacje

Klasy (F#)

Rekordy (F#)

Inne zasoby

F# Language Reference

Członkowie (F#)