Pola klasy

Pola klasy to zmienne zdefiniowane wewnątrz klasy, które przechowują dane dotyczące obiektów tej klasy. Każdy obiekt klasy posiada własną kopię pól, chyba że są to pola statyczne (wspólne dla wszystkich obiektów). Pola są częścią stanu obiektu i mogą być używane do przechowywania informacji, takich jak liczby, ciągi znaków, wartości logiczne i inne dane.

Pola są zazwyczaj dostępne dla metod klasy, ale ich widoczność można kontrolować za pomocą modyfikatorów dostępu.

Przykład prostych pól klasy:

public class Samochod
{
    public string Marka;
    public string Model;
    public int RokProdukcji;
}

Samochod auto = new Samochod();
auto.Marka = "Toyota";
auto.Model = "Corolla";
auto.RokProdukcji = 2020;

Klasa Samochod ma trzy pola: Marka, Model i RokProdukcji.

Każdy obiekt klasy Samochod będzie miał własną kopię tych pól.

Pola statyczne (static)

Pola oznaczone jako static są współdzielone przez wszystkie instancje klasy. Oznacza to, że istnieje tylko jedna kopia tego pola, niezależnie od liczby obiektów danej klasy.

Przykład pola static:

public class Kalkulator
{
    public static double Pi = 3.14159;

    public static double ObliczPoleKola(double promien)
    {
        return Pi * promien * promien;
    }
}

Console.WriteLine("Pi: " + Kalkulator.Pi);  // Wypisze: Pi: 3.14159
double pole = Kalkulator.ObliczPoleKola(5);
Console.WriteLine("Pole koła: " + pole);  // Wypisze: Pole koła: 78.53975
  • Pole static Pi jest współdzielone przez wszystkie obiekty klasy Kalkulator. Aby uzyskać dostęp do tego pola, nie musimy tworzyć instancji klasy – można je odczytać i modyfikować za pomocą nazwy klasy.

Możliwości:

  • Pola statyczne są przydatne, gdy potrzebujemy wartości, która jest wspólna dla wszystkich obiektów danej klasy, np. stałe matematyczne, liczniki obiektów itp.

Pola tylko do odczytu (readonly)

Pola oznaczone jako readonly mogą być inicjalizowane tylko raz – podczas deklaracji lub w konstruktorze. Po przypisaniu wartości nie można jej zmienić.

Przykład pola readonly:

public class Samochod
{
    public readonly string Marka;

    public Samochod(string marka)
    {
        Marka = marka;  // Można przypisać w konstruktorze
    }
}

Samochod auto = new Samochod("Toyota");
// auto.Marka = "Honda";  // Błąd - pole readonly nie może być zmienione

Pola readonly pozwalają na zabezpieczenie wartości przed przypadkową modyfikacją po ich inicjalizacji. Są często używane do definiowania stałych dla obiektów, które mogą być zainicjalizowane w konstruktorze.

Pola stałe (const)

Pola oznaczone jako conststałymi. Oznacza to, że ich wartość jest przypisywana na etapie kompilacji i nie można jej zmienić. Pola stałe muszą być zainicjalizowane podczas deklaracji.

Przykład pola const:

public class Kalkulator
{
    public const double Pi = 3.14159;
}

Console.WriteLine("Pi: " + Kalkulator.Pi);  // Wypisze: Pi: 3.14159

Możliwości:

  • Pola const są używane do przechowywania wartości, które nigdy się nie zmieniają. Ponieważ są przypisywane na etapie kompilacji, są bardziej efektywne niż pola readonly.

Konwencje nazewnicze dla pól

W C# istnieją pewne konwencje nazewnicze, które pomagają uczynić kod bardziej czytelnym i spójnym. Oto kilka ogólnych zasad dotyczących nazw pól:

a) Używanie małych liter z podkreśleniem dla pól prywatnych:

Dla pól prywatnych często stosuje się konwencję, że nazwy zaczynają się od znaku podkreślenia (_), a sama nazwa jest zapisana małymi literami.

Przykład:

public class Samochod
{
    private string _marka;
    private string _model;
}

b) Używanie PascalCase dla pól publicznych i właściwości:

Dla pól publicznych i właściwości często stosuje się PascalCase, czyli nazwy zaczynające się od wielkich liter, np. Marka, Model.

Przykład:

public class Samochod
{
    public string Marka { get; set; }
    public string Model { get; set; }
}

c) Unikanie skrótów i zwięzłych nazw:

Nazwy pól powinny być opisowe, aby jasno wskazywały, jakie dane przechowują. Zamiast skrótów takich jak nr, lepiej używać pełnych nazw, np. numerRejestracyjny.