Void i Static

0

Mógłby mi ktoś prosto wytłumaczyć void i static, bo uczę się klas i po prostu ciężko mi jest zrozumieć niektóre definicje. Z góry dzięki :)

1

void - metoda nie zwraca wyniku.
static - funkcja nie jest wykonywana w ramach obiektu.

Obrazowo o ostatnim:
foo.bar(123) to tak naprawdę bar(foo, 123)
FooClass.bar(123) to po prostu FooClass.bar(123)

Jeszcze inaczej:
w normalnych metodach masz dostęp do this; w statycznych nie

0

Static to cecha funkcji zadeklarowanej w ramach jakiejś klasy, którą to funkcję wzywasz poprzez typ klasy, a nie instancje. (przynajmniej w swift, zakładam, że w MS też)

0

Jezeli chcesz np. stworzyc sobie metode, która dodaje do siebie dwie liczby (sens pisania tego typu metod jest raczej znikomy ale to tylko przyklad) to dobrze byłoby gdyby zwracała ona wynik w postaci sumy tych liczb. np.

int suma(int liczbaA, int liczbaB)
{
return liczbaA + liczbaB;
}

Wtedy mozesz sobie napisac:

int wynik = suma(5, 3); 

W zmiennej wynik znajdzie sie wtedy 8 - to co zwroci funkcja suma zostanie przypisane do zmiennej wynik. Zdarza sie, że metoda nie musi niczego zwracac i wtedy napiszesz sobie void zamiast int. Np. mozesz napisac sobie metode czyszczaca ekran.

void WyczyscEkran()
{
// Tutaj jakis kod
}

Powyzsza metoda nie musi niczego zwracac - interesuje Cie tylko wyczyszczenie ekranu i albo sie to uda albo nie - w tym drugim przypadku powinien poleciec jakis wyjatek.

Co do statica to sprawa sie bardziej komplikuje bo to troche zalezy o co pytasz. @spartanPAGE wspomnial o metodach statycznych ale na tym sie nie konczy, poniewaz statyczne moga byc chocby zmienne czy konstruktory. Jezeli chodzi o metody statyczne to sa to takie metody, ktore mozesz wykonac bez koniecznosci tworzenia obiektu danej klasy. Jezeli masz klase

class Ekran
{
  public static void WyczyscEkran()
  {
  // Tutaj jakis kod
  }
}

To mozesz wykonac metode WyczyscEkran() w nastepujacy sposob:

Ekran.WyczyscEkran()
 

Gdyby tam nie bylo slowa kluczowego static to musialbys najpierw utworzyc obiekt klasy Ekran czyli:

Ekran ekran = new Ekran();
ekran.WyczyscEkran()
 

Pierwsza wersja jest troche wygodniejsza od drugiej ale nie oznacza to, ze mozna sobie tak wszedzie to slowo static wstawiac. Nie sprawdzi sie to np. w sytuacji kiedy jakas klasa zawiera pola opisujace stan indywidualnego obiektu. Dla przykladu, jezeli masz klase Gracz, ktora reprezentuje pojedynczego gracza i zawiera jego wspolrzedne na mapie to lepiej nie uzywac pól / metod statycznych do pracy na tych wspolrzednych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1