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 |