Zamknij komunikat

Nowy Office 2013
Do góry Skomentuj

20. Metody statyczne oraz metody instancyjne

20. Metody statyczne oraz metody instancyjne

Daniel Celeda
20 czerwca 2006
79 745
Odsłony
Daniel Celeda
20 czerwca 2006
79 745
Odsłony

Spotkaliśmy się już z obydwoma typami metod. Metodą statyczną jest np. „Main()”, natomiast

public void PrzypiszWartosc(string nowaWartosc)
{
   napis = nowaWartosc;
}

to metoda instancyjna. Metoda „PrzypiszWartosc(string nowaWartosc)” może być wykonana w ramach istniejącego obiektu. Np.

obiekt.PrzypiszWartosc("Przypisany tekst");

Metody statyczne nie wymagają aby wcześniej tworzyć instancje klas zwierających definicje tych metod. Dlatego „Main()” jest statyczna, ponieważ dzięki temu środowisko uruchomieniowe nie musi tworzyć obiektu aby program mógł zacząć działać. Przyjrzyjmy się przykładowi.

class KlasaPomocnicza
{
   public void Napisz()
   {
     System.Console.WriteLine("Metoda klasy KlasaPomocnicza");
   }
}
class KlasaGlowna
{
   static void Main()
   {
     KlasaPomocnicza.Napisz();
     System.Console.ReadLine();
   }
}

Ten program się nie skompiluje, ponieważ chcemy wywołać metodę niestatyczną bez stworzenia wcześniej obiektu klasy zawierającej definicję tej metody. Możemy ten błąd naprawić na dwa sposoby.
Pierwszy to stworzenie obiektu klasy „KlasaPomocnicza”.

class KlasaPomocnicza
{
   public void Napisz()
   {
     System.Console.WriteLine("Metoda klasy KlasaPomocnicza");
   }
}
class KlasaGlowna
{
   static void Main()
   {
     KlasaPomocnicza obiekt = new KlasaPomocnicza();
     obiekt.Napisz();
     System.Console.ReadLine();
   }
}

Drugi natomiast to zadeklarowanie metody „Napisz()” jako statycznej.

class KlasaPomocnicza
{
   public static void Napisz()
   {
     System.Console.WriteLine("Metoda klasy KlasaPomocnicza");
   }
}
class KlasaGlowna
{
   static void Main()
   {
     KlasaPomocnicza.Napisz();
     System.Console.ReadLine();
   }
}

A oto wynik:

Zmienne statyczne

Oprócz metod także zmienne mogą być statyczne. Różnią się one standardowych zmiennych tym, że są wspólne dla wszystkich obiektów klasy, w której znajdują się deklaracje owych zmiennych.
Najpierw przyjrzyjmy się programowi nie zawierającemu klas ze zmiennymi statycznymi.

class KlasaPomocnicza
{
   public string napis;
   public void Napisz()
   {
     System.Console.WriteLine(napis);
   }
}
class KlasaGlowna
{
   static void Main()
   {
     KlasaPomocnicza obiekt1 = new KlasaPomocnicza();
     KlasaPomocnicza obiekt2 = new KlasaPomocnicza();

     obiekt1.napis = "Czerwony";
     obiekt2.napis = "Zielony";

     obiekt1.Napisz();
     obiekt2.Napisz();

     System.Console.ReadLine();
   }
}

Tworzymy dwa obiekty klasy “KlasaPomocnicza”, następnie przypisujemy różne wartości zmiennym “napis” każdego z obiektów. Na koniec wypisujemy zawartość każdej ze zmiennych na ekran.
Wynik jest taki jakiego się spodziewamy.

Zmodyfikujmy nasz program tak aby wykorzystać zmienne statyczne.

class KlasaPomocnicza
{
   public static string napis;
   public void Napisz()
   {
     System.Console.WriteLine(napis);
   }
}
class KlasaGlowna
{
   static void Main()
   {
     KlasaPomocnicza obiekt1 = new KlasaPomocnicza();
     KlasaPomocnicza obiekt2 = new KlasaPomocnicza();

     KlasaPomocnicza.napis = "Czerwony";
     KlasaPomocnicza.napis = "Zielony";

     obiekt1.Napisz();
     obiekt2.Napisz();

     System.Console.ReadLine();
   }
}

Tym razem wartości przypisujemy dla klasy a nie dla obiektów. Wynik tym razem jest inny:

Zobacz również

Komentarze

tzn nie będzie ona publikowana tutaj?
stały klient, 13 czerwca 2006, 17:52
mam nadzieję, że będzie to odcinek zbliżony raczej do pierwszych/środkowych, niż do ostatnich, w których to bardzo ważne i skomplikowane rzeczy są omawiane w sposób bardzo skrócony i niedokładnie. Kurs zaczął się na prawdę nieźle, ale im dalej w las tym absurdalnie mniej drzew - mniej wiadomości [tam gdzie właśnie są one potrzebne">. Gdybym nie znał C/C++ to większość tematów nadal byłaby mi nieznana.
ad-4m, 16 czerwca 2006, 21:18
Niestety niektóre tematy należało omówić, a że artykuły mają ograniczoną długość to efekt może czasami być nie do końca satysfakcjonujący. Może lepiej było zrezygnować z niektórych tematów, a dokładniej omówić pozostałe... Nigdy nie może być idealnie :)
hlehle, 21 czerwca 2006, 02:49
Coś jest nie tak, bo wszystkie 3 screeny przedstawiają to samo, a conajmniej 2 ostatnie nie powinny :P I pytanko - czy to ostatnia część kursu? W ktorejś z pierwszych części znalazłem informacje, że kurs będzie miał właśnie 20 części - true or false?
m010ch, 24 czerwca 2006, 22:04
true. Na dziś to jest koniec kursu, ale myślimy nad jego kontynuacją...
Kuba, 25 czerwca 2006, 01:15
to są jakieś banały.... Dla kogoś, kto dopiera zaczyna programować w czym kolwiek raczej nie dla pr0 ;(
M4ciek, 1 lipca 2006, 15:02
m010ch: Faktycznie screeny są nie te co powinny. Może Kuba poprawi jak znajdzie czas :) M4ciek: To nie jest kurs dla "pro". Wydawało mi się, że jest to aż nadto jasne. Prowokacja jakaś czy co? :)))
hlehle, 3 lipca 2006, 22:43
I tak to jest chyba najlepszy kurs w sieci podstaw c#, dzieki niemu przeszłem w niecały dzień z c++ do c#, no i dzieki temu moge czym szybciej zabrac sie do pisania engine 3d. Twórcom Dziękuje!
Bad Ray, 5 lipca 2006, 09:16
Dziękuję twórcom kursu i proszę o jeszcze. :-)
Ariel, 6 lipca 2006, 13:10
W zasadzie, nie nauczyłem się nic nowego, ale jako przypomnienie... SUPER. Problem w tym, że MAŁO !! :D Napisane świetnym językiem, będę kurs polecał znajomym. Biorę się teraz za ASP.NET 2.0, SQL, i C# w praktyce. (z ASP jeszcze styczności nie miałem, więc liczę, że zrozumiem, chociaż na czym to polega). :) Pozdrawiam
Shreeve, 27 lipca 2006, 09:34
czy ma ktos jescze jakis kurs c# po polsku? pozdro
dz1adek@wp.pl, 4 sierpnia 2006, 15:22
A czy wie ktos jak zrobic zmienna statyczna w C# ale nie w klasie tylko w funkcji????? Bo tak normalnie to to nie idzie: void FajnaFunkcja(costam cos) { static string t = "x"; .... } Czyzby nie bylo tak przydatnego elementu?
Jaja, 12 sierpnia 2006, 19:37
Juz wiem ze nie ma czegos takiego w C# i preferuje sie uzywanie zmiennych statycznych tylko w klasach. Google wszystko Ci powie. O ile dobrze zapytasz ;)
ZnowJaja, 12 sierpnia 2006, 20:29
Nic nie rozumiem z tego artykułu :(
Burrek, 18 sierpnia 2006, 17:05
Chyba cos nie tak ze screenami jest.
Marek, 13 czerwca 2007, 15:03
Jak ktos zna c/c++ czy jave to sie nic nie dowie :(... ubogo
zniesmaczony, 9 lipca 2007, 21:06
No i zakończyłem 1 cz. kursu. Serdecznie dziękuję autorowi. Faktycznie w ostatnich lekcjach była widoczna obniżka poziomu (od zdecydowanie najtrudniejszych lekcji 15 i 16). Teraz już wiem dużo więcej. Wiele się spodziewam po 2 części.
Trez, 21 lipca 2007, 17:48
"Zniesmaczony" bo chyba bylo pisane we wstepie ze to kurs dla poczatkujacych. Jak sie zna c czy c++ to kurs moze pomoc tylko w zrozumieniu jak sie pisze w c#. Mi ten kurs wlasnie pomogl w tym zakresie. I tak jak porzednicy napisze rowniez, ze w koncowce kursu widac spadek poziomu.
Mendoza, 24 lipca 2007, 21:39
"Tworzymy dwa obiekty klasy “KlasaPomocnicza”, następnie przypisujemy różne wartości zmiennym “napis” każdego z obiektów. Na koniec wypisujemy zawartość każdej ze zmiennych na ekran. Wynik jest taki jakiego się spodziewamy." - chyba jednak nie do końca :P Nie te obrazki co trzeba zostały załączone do strony... (i zostało zauważone to już w czerwcu poprzedniego roku - że też administrator tej strony nic sobie z tego nie robi - ewentualnie twórca kursu)
Kot-ek, 19 listopada 2007, 12:59
Zawsze można szybko sprawdzić działanie kodu (chwała za to twórcom kursu że wszystkie przykłady kompilują się i działają), ale wypadałoby aby screeny odpowiadały efektom wywołania kodu pokazanego jako przykład:/
adambart84, 21 listopada 2007, 10:25
zle zrzuty ekranu, nie z tego cwiczenia :P
michal, 25 grudnia 2007, 20:04
Podsumowanie pierwszej części ująlbym w zdaniu-"Nierownomiernie rozłożony poziom trudnosci" ,ale...uważam że ten kurs(a przejrzałem ich wieeele) należy do jednych z nalepszych.Jednym z najlepszych dla początkujących:).Pogratulować pomyslu,upartości i dość dobrego poslugiwania sie językiem zrozumiałym dla wszystkich(no prawie). Z innej beczki ktoś ma żródła c# odnośnie sieci neuronowych?
Aleksander, 17 lutego 2008, 09:01
Ostatnie 2 zrzuty ekranu mają sie nijak do podawanych przykładów !
Wojtek, 26 lutego 2009, 09:02
pierwszy kod w dziale "Zmienne statyczne" wywołał mi na ekranie: Czerwony Zielony drugi, rzeczywiście inny: Zielony Zielony
karol, 16 listopada 2011, 17:34
Moje kolejne podejście do .NET i wreszcie trafiam na tekst jasny, bez zbędnego bełkotu marketingowego. Wszystko zrozumiałe mimo kilku błędów. Rzeczywiście przedostatni ekran powinien zawierać Czerwony Zielony, a ostatni Zielony Zielony (bo jedna, współna znienna dla dwóch objektów).
Jurek, 17 stycznia 2013, 14:43
@Jurek: Nie dla dwóch obiektów, bo w tym przypisaniu nie ma obiektów tylko klasa jest!
pies, 18 sierpnia 2014, 15:17

Dodaj swój komentarz

Zasady publikacji komentarzyZasady publikacji komentarzy

Redakcja CentrumXP.pl nie odpowiada za treść komentarzy publikowanych na stronach Portalu
i zastrzega sobie prawo do usuwania wypowiedzi, które:

  • zawierają słowa wulgarne, obraźliwe, prowokujące i inne naruszające dobre obyczaje;
  • są jedynie próbami reklamowania stron internetowych (spamowanie poprzez umieszczanie linków);
  • przyczyniają się do złamania prawa bądź warunków licencyjnych oprogramowania (cracki, seriale, torrenty itp.);
  • zawierają dane osobowe, teleadresowe, adresy mailowe lub numery GG;
  • merytorycznie nie wnoszą nic do dyskusji lub nie mają związku z tematem komentowanego newsa, artykułu bądź pliku.