Klasy w C#

1. Wprowadzenie

Klasa w C# jest typem referencyjnym (reference type), który pozwala tworzyć własne obiekty zawierające dane i zachowania. Klasa to szablon dla obiektów, a obiekty (instancje klasy) przechowują dane zgodnie z tym szablonem.

Klasy pozwalają na:

  • grupowanie danych (pól) i funkcji (metod) w jednym miejscu,
  • kontrolę dostępu do danych,
  • organizację kodu w logiczne jednostki.

2. Definicja klasy

Składnia definicji klasy:


3. Elementy klasy

3.1 Pola (Fields)

Pola przechowują dane obiektu. Przykłady:

  • private – dostępne tylko w obrębie klasy,
  • public – dostępne z poziomu obiektu klasy.

3.2 Właściwości (Properties)

Właściwości umożliwiają kontrolowany dostęp do pól, np. walidację danych.

Od C# 6 można używać automatycznych właściwości:


3.3 Metody

Metody definiują zachowanie obiektu.


3.4 Konstruktor

Konstruktor to specjalna metoda wywoływana podczas tworzenia obiektu. Służy do inicjalizacji pól klasy.

Każda klasa ma domyślny konstruktor bez parametrów, jeśli nie zdefiniowano własnego.


3.5 Destruktor

Destruktor (~NazwaKlasy) jest wywoływany podczas zwalniania zasobów przez Garbage Collector. W praktyce używa się go rzadko, głównie przy pracy z zasobami zewnętrznymi.


3.6 Modyfikatory dostępu

Określają, kto może korzystać z członków klasy:

Modyfikator Zakres dostępu
public Dostępny wszędzie
private Dostępny tylko w obrębie klasy
internal Dostępny w obrębie tego samego assembly
protected internal Dostępny w klasie i assembly

3.7 Statyczne pola i metody

Statyczne członki należą do klasy, a nie do instancji obiektu. Można je używać bez tworzenia obiektu.


4. Tworzenie i używanie obiektów

Obiekty klas są typami referencyjnymi – kopiowanie zmiennej powoduje kopiowanie referencji, a nie wartości.


5. Różnice między klasą a strukturą (bez dziedziczenia)

Cecha Klasa (class) Struktura (struct)
Typ Referencyjny (reference type) Wartościowy (value type)
Przechowywanie Sterta (heap) Stos lub inline
Kopiowanie Kopiowana referencja Kopia wartości
Konstruktor domyślny Tak, bezparametrowy Tak, bezparametrowy