public void Syo(Hedelma hedelma)
 {
     Console.WriteLine("Hedelmä syöty");
     hedelma.Katoa(this);
 }
        static void Main(string[] args)
        {
            /**
             * Esimerkki5Program.cs
             *
             * Jos EN TUNTISI ohjelmoinnista seuraavia konsepteja:
             * - Luokan parametrillinen rakentaja
             *
             * Jos TUNNEN ohjelmoinnista seuraavan konseptin:
             * - Staattinen luokan metodi tai staattinen luokan muuttuja
             * - Parametrilliset metodit
             * - Rajapinta ja rajapinnan toteutus
             *
             * niin silloin toteutus olisi esimerkin näköinen.
             *
             * En ota enää esille parametrillista rakentajaa. Se ei tuo
             * oikeastaan mitään suuria hyötyjä tässä esimerkissä.
             *
             * Esimerkissä suurin ero on, että mukaan otettu yksinkertainen
             * rajapinta, joka kertoo metodin nimen, joka huolehtii
             * pisteiden laskemisesta. Huomaa, että jälkimmäinen olio saa
             * enemmän pisteitä.
             *
             * Rajapinta on nimeltään PisteLogiikka ja jokainen luokka, joka
             * sen perii toteuttaa KasvataPisteita()-metodin. Tällöin Hedelmän
             * Katoa()-metodissa kutsutaankin parametrina annetun olion
             * KasvataPisteita()-metodia. Parametrin tyypinä on rajapinta,
             * jolloin voidaan kutsua vain rajapinnan metodia, joten C# ja
             * Visual Studio huolehtii, ettei mikään muu luokka voi päästä
             * metodiin parametrina, jos se ei toteuta rajapintaa.
             *
             * Tämä tapa voi olla alkuun hankalin hahmottaa ja etsiä hyötyjä.
             * Hyödyt syntyvät taas isommissa ohjelmissa. Nyt esimerkissä
             * on luotu kaksi erilaista rajapinnan toteuttavaa luokkaa. Tällöin
             * luokissa itsessään on määritetty KasvataPisteitä()-metodi
             * ja kuten esimerkissä huomaa niin voidaan vaihdella toteutusta.
             * Nyt pelissä voisi olla erilaisia pelattavia hahmoja, jotka saavat
             * erilaisella kaavalla pisteitä.
             *
             * Huomaa myös, että kun rajapinta annetaan parametrin tyyppinä,
             * ei Hedelma-luokka enää tiedä mistään Packan luokista tai muista
             * ja voi toimia näin omana yksikkönään. Tämä tuo mahdollisuuden laajentaa
             * ominaisuuksia myöhemmin mikä ei tästä esimerkistä välttämättä
             * käy ilmi parhaiten. Vahvan riippuvuuden sijasta puhuttaisiin
             * heikosta luokkien välisestä riippuvuudesta.
             *
             **/
            Pacman  pacman   = new Pacman(); // Luodaan uusi pacman olio
            Hedelma hedelma1 = new Hedelma();
            Hedelma hedelma2 = new Hedelma();
            Hedelma hedelma3 = new Hedelma();

            pacman.Syo(hedelma1);
            pacman.Syo(hedelma2);
            pacman.Syo(hedelma3);

            Console.WriteLine(pacman.pisteet);

            MsPacman mspackman = new MsPacman(); // Huomaa, että luodaan MsPackman olio
            Hedelma  hedelma4  = new Hedelma();
            Hedelma  hedelma5  = new Hedelma();

            mspackman.Syo(hedelma4);
            mspackman.Syo(hedelma5);

            Console.WriteLine(mspackman.pisteet);
            Console.ReadKey();
        }