Udostępnij za pośrednictwem


Struktury (F#)

Element struktury jest typem compact obiektu, który może być bardziej efektywne niż klasę dla typów, które mają z niewielkiej ilości danych i zachowania proste.

[ 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ą wartość typów, co oznacza, że są one zapisywane bezpośrednio na stosie, lub gdy są one używane jako pola lub typ elementów w tablicy, tekście w obiekcie nadrzędnym.W odróżnieniu od klasy i rekordów struktur ma semantyki przebiegu według wartości.Oznacza to, że są one używane głównie przy małych wartości zagregowanych danych, które są dostępne i skopiować często.

W poprzednim składni dwie formy są wyświetlane.Pierwszy nie jest niewielka składni, ale mimo to często jest używana, ponieważ przy użyciu struct i end słowa kluczowe, można pominąć StructAttribute atrybut, który pojawia się w drugim formularzu.Można skrócić StructAttribute do po prostu Struct.

type-definition-elements w poprzedniej składni reprezentuje deklaracji elementu członkowskiego i definicje.Struktury mogą mieć konstruktorów i modyfikowalny i niezmienialny pola, a ich można zadeklarować implementacji interfejsu i elementy członkowskie.Aby uzyskać więcej informacji, zobacz Członkowie (F#).

Struktury nie może uczestniczyć w dziedziczeniu, nie może zawierać let lub do powiązania, i nie można rekursywnie zawiera pola własne typu z (chociaż mogą zawierać odwołanie do komórki, odwołujące się do ich własnych typu).

Ponieważ nie pozwalają struktur let powiązań pól w strukturach muszą deklarować za pomocą val słowo kluczowe.val Słowo kluczowe definiuje pole i jego typu, ale nie zezwala na inicjowania.Zamiast tego val deklaracje są zainicjowana na zero lub wartość null.Z tego powodu struktur, które ma konstruktora niejawne (to znaczy, parametry, które znajdują się bezpośrednio po nazwie struktury w deklaracji) wymagają, aby val deklaracje można dodawać adnotacje z DefaultValue atrybutu.Struktur, które mają zdefiniowane konstruktora nadal obsługuje inicjowania zero.W związku z tym DefaultValue atrybut jest deklarację, że takie wartość zero jest prawidłowy dla pola.Niejawne konstruktory klas struktur nie wykonuj wszystkie akcje, ponieważ let i do powiązania nie są dozwolone w typie, ale wartości parametru niejawne konstruktora przekazane są dostępne jako pola prywatnego.

Jawne konstruktorów może obejmować inicjowania wartości pól.Jeśli masz strukturę, która ma konstruktora jawnego nadal obsługuje inicjowania zero; jednak nie jest używana DefaultValue atrybutu na val deklaracje, ponieważ wchodzi w konflikt z jawnego konstruktora.Aby uzyskać więcej informacji na temat val deklaracje, zobacz Pola jawne: val — Słowo kluczowe (F#).

Atrybuty modyfikatorów ułatwień dostępu są dozwolone w strukturach i wykonaj te same zasady, jak w przypadku innych typów.Aby uzyskać więcej informacji, zobacz Atrybuty (F#) i Kontrola dostępu (F#).

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

Materiały referencyjne dotyczące języka F#

Członkowie (F#)