[PL] Struct

Struktura to typ wartości, w którym możemy zapisać konstruktory, metody, stałe, pola, właściwości, indeksatory, operatory, zdarzenia czy zagnieżdżenia typów. Jej definicję zapisuje się za pomocą słowa kluczowego struct.

struct Punkt
{
int x;
int y;
}
    Należy jednak pamiętać o kilku rzeczach:

  1. Struktura dziedziczy po System.ValueType, który pochodzi od System.Object
  2. Nie można zadeklarować konstruktora domyślnego lub destruktora (konstruktor z paramterami może zostać zadeklarowany)
  3. Nie można dziedziczyć po innych strukturach czy klasach
  4. Struktura nie może być podstawą dla klasy
  5. Struktura może być stosowana jako wartości pustych typów
  6. Do struktury może zostać przypisana wartość zerowa
  7. Struktura może implementować interfejsy
  8. Struktura wspiera typy zagnieżdżone

Więc skoro struktury mają sporo ograniczeń, to czy jest sens ich używać?
Tak, jeżeli zależy nam na wydajności. Należy zwrócić uwagę, że struktura jako Value Type jest alokowana na stosie i dziedziczy bezpośrednio po System.ValueType. Oznacza to, że każda wartość w strukturze podczas przekazania jest kopiowana w całości (w odróżnieniu od klasy, która dziedziczy po System.Object i podczas przekazania kopiowany jest jedynie adres komórki, w którym wartość danej klasy się znajduje)

    W skrócie, struktury warto używać gdy:

  1. instancje typu są małe
  2. jest wbudowany w inny typ
  3. logicznie reprezentują jedną wartość
  4. wartości są niezmienne
  5. rzadko używany jest boxing