W tej lekcji zajmiemy się konstruktorami klas. Konstruktor tak najprościej tłumacząc, to coś takiego jak metoda nie zwracająca żadnej wartości, ale mogąca pobierać parametry, która jest wykonywana podczas tworzenia obiektu klasy poprzez operator new. Oczywiście konstruktor to nie metoda! I należy to sobie zapamiętać. To co zostało powiedziana wcześniej, zostało po to napisane abyś sobie uświadomił co to tak mniej więcej ten konstruktor. Zaczniemy tradycyjnie jak wygląda ogólna deklaracja konstruktora:
specyfikator_dostępu nazwa_klasy(typ_parametru1 nazwa_parametru1,…)
{
….
}
Raczej tłumaczyć w powyższym zapisie to nie ma czego za bardzo, więc idziemy dalej. Do czego nam może się przydać ten konstruktor w naszej klasie? Jak pamiętasz w poprzednim programie po utworzeniu obiektu za każdym razem poprzez operator ‘.’ uzyskiwaliśmy odstęp do zmiennych składowych klasy (każdy obiekt posiada kopie zmiennych składowych klasy), powtarzaliśmy przez to zapis np. :
maluch.liczba_pasazerow = 5 ;
maluch.pojemnosc = 25 ;
maluch.spalanie = 3.5 ;
Wyobraź sobie tera sytuację jak mamy tak z 15 do wypełnienia takich pól, przy czym mamy tak z 30 obiektów do zadeklarowania, samo deklarowanie tego wszystkiego by cię wykończyło, z pomocą przychodzi nam konstruktor który usprawnia ten proces. A więc wykorzystajmy ten konstruktor w naszej klasie. Oto nasza klasa po zmianach:
Początek kodu:
using System;
class Pojazd
{
public int liczba_pasazerow ;
public int pojemnosc ;
public double spalanie ;
public Pojazd(int pasazerowie, int poj, double spalanko)
{
liczba_pasazerow = pasazerowie ;
pojemnosc = poj ;
spalanie = spalanko ;
}
public double Zasieg()
{
double wartosc = pojemnosc * 100 / spalanie ;
return wartosc ;
}
public void Czy_zmiesci(int pasazerowie)
{
if( liczba_pasazerow >= pasazerowie)
{
Console.WriteLine(„Tak zmieści się liczba ” + pasazerowie +” pasażerów”);
}
else
{
Console.WriteLine(„Za mało miejsca dla ” + pasazerowie + ” psażerów”);
}
}
}
class Pokaz
{
public static void Main()
{
Pojazd maluch = new Pojazd(5,25,3.5) ;
Pojazd polonez = new Pojazd(5,47,9.7);
Console.WriteLine(„Maluch pomieści ” + maluch.liczba_pasazerow + ” pasażerów”);
Console.WriteLine(„Zasięg: ” + maluch.Zasieg() );
Console.WriteLine(„\n\n”);
Console.WriteLine(„Polonez pomieści ” + polonez.liczba_pasazerow + ” pasażerów”);
Console.WriteLine(„Zasięg: ” + polonez.Zasieg() );
Console.WriteLine(„\n\n”);
maluch.Czy_zmiesci(12);
maluch.Czy_zmiesci(2);
}
}
Koniec kodu:
A więc spójrzmy na to co napisaliśmy:
public Pojazd(int pasazerowie, int poj, double spalanko)
{
liczba_pasazerow = pasazerowie ;
pojemnosc = poj ;
spalanie = spalanko ;
}
int pasażerowie – tutaj pobieramy parametr którego wartość przypisujemy do zmiennej składowej liczba_pasazerow. Dalej kontujemy pobieranie i przypisywanie zmiennym wartości. Co nam tutaj dał dodatkowo konstruktor, otóż mamy pewność że każdej zmiennej składowej w tym wypadku zostanie nadana wartość podczas tworzenia obiektu. Teraz nie możesz sobie zadeklarować obiektu w taki sposób Pojazd matiz = new Pojazd() ; Ponieważ konstruktor klasy pobiera parametry. Nie możesz też przy tworzeniu obiektu pominąć jakiegoś z parametrów, np. nie możesz sobie napisać Pojazd opel = new Pojazd(12,3); bo nasz konstruktor pobiera, aż 3 parametry i tyle musisz podać. Teraz mamy coś takiego jak bezpieczna klasa, z tego powodu, że nie możesz przez przypadek pominąć jakiegoś parametru. No bo jak byś my policzyli zasięg jak byś nie podał spalania? To chyba analogiczne. W następnej lekcji dowiesz się jak przeładować konstruktory.