Czy w ogóle ogarniasz, czym jest statyczna metoda? Statyczna metoda to taka, którą możesz wykonać na rzecz KLASY, a nie OBIEKTU. Wiesz, czym się różni obiekt od klasy? Wyobraź to sobie tak. Klasa to pewien opis. Np. to może być projekt biurka. Obiekt to... obiekt powstały na podstawie tego projektu. Czyli o ile klasa będzie projektem biurka, o tyle obiekt będzie tym biurkiem.
Projekt określa tylko budowę biurka. Jego "kształt" i funkcjonalność (np. dwie szuflady). Nie określa jego koloru ani materiałów. Teraz załóżmy, że powstało 10 biurek na podstawie tego projektu. Każde biurko w innym kolorze, każde z innego drewna. Ale wszystkie są takie same, jeśli chodzi o kształt i funkcjonalność. Teraz wchodzisz ze swoją czarodziejską różdżką i mówisz: "Ja chcę, żeby wszystkie biurka z tego projektu były wykonane z dębu". Robisz zmianę w projekcie i w magiczny sposób wszystkie biurka nagle stają się dębowe. Robiąc zmianę w projekcie wywołałeś metodę statyczną.
Teraz przykład z życia wzięty.
Napisz taką klasę, która zwraca Ci ilość obiektów utworzonych z niej. To jest zadanie dla Ciebie. Jak je zrobisz, zakumasz, czym tak naprawdę są metody statyczne. Podpowiem Ci, że potrzebujesz też zmiennej statycznej.
A, żeby jeszcze trochę utrudnić, niech każdy obiekt tej klasy ma unikalne ID, o którym decyduje ta klasa.
Nie wiem w zasadzie, ale czy chodziło Ci np o coś takiego? (mało tych metod napisałem)
using System;
namespace ConsoleApplication1
{
class Testy
{
public int test1;
public int test2;
public Testy(int test1, int test2)
{
this.test1 = test1;
this.test2 = test2;
}
public static Testy Statek( Testy m)
{
return new Testy(m.test1+m.test2,m.test2+m.test1);
}
public override string ToString()
{
return String.Format("{0}", test1);
}
//podobnie jak kalkulator pisałem, co w tym złego? Działa przecież
}
class Testy2
{
public string x;
public string y;
public Testy2(string x, string y)
{
this.x = x;
this.y = y;
}
public override string ToString()
{
return String.Format("{0} {1}", x, y);
}
public static Testy2 Mundur(Testy2 xxx)
{
return new Testy2(xxx.x,xxx.y);
}
public static Testy2 Mundur2(Testy2 ooo, string zmienna)
{
ooo.x = ooo.x + zmienna;
ooo.y = ooo.y + zmienna;
return ooo;
}
public static Testy2 Mundur3(Testy2 kkk, string x1, string x2)
{
kkk.x = kkk.x + x1;
kkk.y = kkk.y + x2;
return kkk;
}
}
class Program
{
static void Main(string[] args)
{
Testy y = new Testy(2, 5);
Console.WriteLine("Wynik: {0}",Testy.Statek(y));
Testy2 y1 = new Testy2("ala", "ma");
Console.WriteLine("{0} kota",Testy2.Mundur(y1));
Testy2 y2 = new Testy2("bakłażan ", "marchewka ");
Console.WriteLine(" {0}",Testy2.Mundur2(y2,"Warzywa\n"));
Testy2 y3 = new Testy2("biurko ", "stolik ");
Console.WriteLine("{0}",Testy2.Mundur3(y3,"żółte\t", "pomarańczowy"));
Console.ReadKey();
}
}
}