Metody statyczne

darek963

Metody statyczne

Aby wywołać zwykłą metodę należy w pierwszej kolejności zadeklarować i zainicjować obiekt danej klasy. Jeśli metoda działa na rzecz struktur zawartych w tej samej klasie nie ma w tym nic złego. Natomiast jeśli chcemy tworzyć metody, które nie operują na strukturach klasy powinniśmy posłużyć się metodami statycznymi. Można je wywoływać nie tworząc bytu obiektu i tym samym nie alokować dodatkowej pamięci.

Używanie metod statycznych niesie za sobę pewne ograniczenia:

*nie możemy ich wywoływać na rzecz stworzonego obiektu (tzn. że jeśli stworzymy obiekt klasy, która zawiera metodę statyczną to nie będzie ona dostępna dla tego obiektu)
*możemy w nich odwoływać się tylko do metod, które są również zadeklarowane jako statyczne (nie odwołują się na rzecz obiektu)

Przykłady

Dobrym przykładem już zaimplementowanych metod statycznych w środowisku VS C# są metody klasy Convert:
int liczba = Convert.ToInt32("123");

Proszę zwrócić uwagę, że wywołujemy metodę ToInt32() zawartą w klasie Convert nie tworząc obiektu tej klasy.

Poniższy kod pokazuje jak deklarować metody zwykłe i statyczne oraz jak z nich korzystać:

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int wynik = 0;

            // <uzycie metody statycznej>
            //      uzycie metody statycznej nie wymaga
            //      tworzenia obiektu

            wynik = DodawanieLiczb.MetodaStatyczna(5, 3);

            // </uzycie metody statycznej>

            Console.WriteLine("Metoda statyczna: " + wynik);
            

            // <uzycie metody zwyklej>
            //      aby uzyc zwyklej metody nalezy
            //      stworzyc obiekt klasy, w ktorej jest metoda

            DodawanieLiczb ObiektDodawanie;
            ObiektDodawanie = new DodawanieLiczb();
            wynik = ObiektDodawanie.MetodaZwykla(5, 3);

            // </uzycie metody zwyklej>

            Console.WriteLine("Metoda zwykla: " + wynik);
            

            Console.ReadKey();
        }
    }

    class DodawanieLiczb
    {
        // <metoda zwykla>
        public int MetodaZwykla(int parametr1, int parametr2)
        {
            return (parametr1 + parametr2);
        }
        // </metoda zwykla>

        // <metoda statyczna>
        public static int MetodaStatyczna(int parametr1, int parametr2)
        {
            return (parametr1 + parametr2);
        }
        // </metoda statyczna>
    }
}

2 komentarzy

"nie możemy ich wywoływać na rzecz stworzonego obiektu" ??
zawsze można odwołać się do obiektu danej klasy przez metodę statyczne korzystająć z referencji :)

"nie możemy ich wywoływać na rzecz stworzonego obiektu" ??
zawsze można odwołać się do obiektu danej klasy przez metodę statyczne korzystająć z referencji :)