Staattiset luokat, metodit ja kentät

Taustaa

Luokan jäsenet (jäsenmuuttujat, metodit, tapahtumat, indeksoijat, konstruktorit,...) voivat olla joko instanssin jäseniä (instance members) tai staattisia jäseniä (static members). Olio-ohjelmoinnissa tavallisesti luodaan instansseja eli olioita luokista. Tietyissä tilanteissa on kuitenkin perusteltua käyttää luokkien metodeja ja ominaisuuksia staattisina (static), eli suoraan ilman että luokasta luodaan oliota. Huom! Koska C#:ssa EI ole globaaleja metodeja tai vakioita, on tilanteita joissa tarvitaan yhteisiä ja julkisia metodeja, muuttujia ja vakioita.

Perusteita

Staattinen luokka (Static class) ja staattiset metodit (static methods)

Luokka voidaan määritellä staattiseksi. Staattinen luokka on periaatteessa samanlainen kuin ei-staattinen luokka, mutta yhdellä merkittävällä erolla: siitä EI voi tehdä instansseja. Toisin sanoen et voi käyttää new avainsanaa luomaan oliomuuttujan luokasta. Koska staattisesti luokasta ei ole instanssia eli oliomuuttujaa, käytetään luokkaa viittaamalla suoraan luokan nimeen.


    static class MyMath
    {
        public int Power2(int nro)
		{
		  return nro * nro;
		}
    }
    

Staattista luokkaa ja sen metodia Power2 käytetään seuraavasti


    class TestMath
    {
        static void Main(string[] args)
        {
            int num = 12;
			int num2 = MyMath.Power2(num);
            Console.WriteLine(num2);
        }
    }
    

Staattisten jäsenten käyttö (Using Static members)

Luokka voidaan määritellä staattiseksi ja luokan jäseniä voidaan määritellä staattiseksi.


using System;
namespace JAMK.IT
{
  public class Cat
  {
    //member can be accessed only via the constuctor
    private static int instances = 0;
    public Cat()
    {
	  //every time when an instance has been called we will increase the counter	
      instances++;
    }
    public static void HowManyCats()
    {
      Console.WriteLine("{0} kissaa olemassa", instances);
    }
  }

  public class TestCat
  {
    public static void Testaa()
    {
      Cat.HowManyCats();//should be zero in the beginning
      Cat misse = new Cat();
      Cat.HowManyCats();//should be 1
      Cat tassu = new Cat();
      Cat.HowManyCats();//should be 2
    }
  }

//start point
class Program
  {
    static void Main(string[] args)
    {
      JAMK.IT.TestCat.Testaa();
    }
  }
}
    


Esimerkki staattisten metodien kutsumisesta

Oheisessa koodiesimerkissä on kutsuttu staattisia metodeja, jotka ovat määritelty samassa luokassa ja eri luokassa. Vertailun vuoksi on kutsuttu myös olion metodia.


	
	


Lisätietoa