20. Metody statyczne oraz metody instancyjne

20. Metody statyczne oraz metody instancyjne

 Daniel Celeda
Daniel Celeda
00:00
20.06.2006
26 komentarzy
81472 wyświetlenia

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:


Spodobał Ci się ten artykuł? Podziel się z innymi!

Źródło:

Polecamy również w kategorii Kurs C#, cz. I

Komentarze

  • stały klient 17:52 13.06.2006

    tzn nie będzie ona publikowana tutaj?

  • ad-4m 21:18 16.06.2006

    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.

  • hlehle 02:49 21.06.2006

    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 :)

  • m010ch 22:04 24.06.2006

    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?

  • Kuba 01:15 25.06.2006

    true. Na dziś to jest koniec kursu, ale myślimy nad jego kontynuacją...

  • M4ciek 15:02 01.07.2006

    to są jakieś banały.... Dla kogoś, kto dopiera zaczyna programować w czym kolwiek raczej nie dla pr0 ;(

  • hlehle 22:43 03.07.2006

    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? :)))

  • Bad Ray 09:16 05.07.2006

    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!

  • Ariel 13:10 06.07.2006

    Dziękuję twórcom kursu i proszę o jeszcze. :-)

  • Shreeve 09:34 27.07.2006

    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

  • dz1adek@wp.pl 15:22 04.08.2006

    czy ma ktos jescze jakis kurs c# po polsku? pozdro

  • Jaja 19:37 12.08.2006

    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?

  • ZnowJaja 20:29 12.08.2006

    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 ;)

  • Burrek 17:05 18.08.2006

    Nic nie rozumiem z tego artykułu :(

  • Marek 15:03 13.06.2007

    Chyba cos nie tak ze screenami jest.

  • zniesmaczony 21:06 09.07.2007

    Jak ktos zna c/c++ czy jave to sie nic nie dowie :(... ubogo

  • Trez 17:48 21.07.2007

    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.

  • Mendoza 21:39 24.07.2007

    "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.

  • Kot-ek 12:59 19.11.2007

    "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)

  • adambart84 10:25 21.11.2007

    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:/

  • michal 20:04 25.12.2007

    zle zrzuty ekranu, nie z tego cwiczenia :P

  • Aleksander 09:01 17.02.2008

    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?

  • Wojtek 09:02 26.02.2009

    Ostatnie 2 zrzuty ekranu mają sie nijak do podawanych przykładów !

  • karol 17:34 16.11.2011

    pierwszy kod w dziale "Zmienne statyczne" wywołał mi na ekranie: Czerwony Zielony drugi, rzeczywiście inny: Zielony Zielony

  • Jurek 14:43 17.01.2013

    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).

  • pies 15:17 18.08.2014

    @Jurek: Nie dla dwóch obiektów, bo w tym przypisaniu nie ma obiektów tylko klasa jest!

Skomentuj

Autor