static void Main(string[] args) { //Tässä määritellään asiakas-olio. Asiakas asiakas = new Asiakas("Amanda", 1000); //Tässä tulostetaan asiakkaan tiedot kutsumalla //TulostaTiedot()-metodi. asiakas.TulostaTiedot(); //Tässä määritellään hopeaEtuAsiakas-olio. HopeaEtuAsiakas hopeaEtuAsiakas = new HopeaEtuAsiakas("Emanuel", 2000, 5430.85m); //Tässä tulostetaan hopeaEtuAsiakas-olion tiedot. hopeaEtuAsiakas.TulostaTiedot(); //Tässä lasketaan bonus Console.WriteLine("Bonus: {0,0:c2}", hopeaEtuAsiakas.LaskeBonus()); //Tässä määritellään kultaEtuAsiakas-olio. KultaEtuAsiakas kultaEtuAsiakas = new KultaEtuAsiakas("Emiliano", 3000, 15430.85m); //Tässä tulostetaan kultaEtuAsiakas-olion tiedot. kultaEtuAsiakas.TulostaTiedot(); //Tässä lasketaan bonus Console.WriteLine("Bonus: {0,0:c2}", kultaEtuAsiakas.LaskeBonus()); }
static void Main(string[] args) { //Tässä määritellään hopeaEtuAsiakas-olio. HopeaEtuAsiakas hopeaEtuAsiakas = new HopeaEtuAsiakas("Emanuel", 2000, 5430.85m); //Tässä tulostetaan hopeaEtuAsiakas-olion tiedot. hopeaEtuAsiakas.TulostaTiedot(); //Tässä kutsutaan LaskeBonus()-metodi. Console.WriteLine("HopeaEtuAsiakkaan bonus on: {0,0:c2}", hopeaEtuAsiakas.LaskeBonus()); }
static void Main(string[] args) { //Tässä määritellään hopeaEtuAsiakas-olio. HopeaEtuAsiakas hopeaEtuAsiakas = new HopeaEtuAsiakas("Emanuel", 2000, 5430.85m); //Tässä tulostetaan hopeaEtuAsiakas-olion tiedot. hopeaEtuAsiakas.TulostaTiedot(); //Tässä asiakkaan bonus tulostetaan näytölle. Console.WriteLine("HopeaEtuAsiakkaan bonus on: {0,0:c2}", hopeaEtuAsiakas.LaskeBonus()); //Tässä kutsutaan LaskeKorvaus()-metodi. Huomaa, että //koska se ei sisällä mitään koodia, se ei suorita eikä //tulosta mitään! hopeaEtuAsiakas.LaskeKorvaus(); }
static void Main(string[] args) { //Tässä määritellään olio Asiakas-luokasta. Asiakas asiakas = new Asiakas("Emilia", 1000); //Tässä asiakkaan tiedot tulostetaan näytölle. asiakas.TulostaTiedot(); //Tässä määritellään olio HopeaEtuAsiakas-luokasta. HopeaEtuAsiakas hopeaEtuAsiakas = new HopeaEtuAsiakas("Julia", 2000, 5430.85m); hopeaEtuAsiakas.TulostaTiedot(); //Tässä asiakkaan saama bonus lasketaan ja //tulostetaan näytölle. hopeaEtuAsiakas.LaskeBonus(); }
static void Main(string[] args) { Console.OutputEncoding = System.Text.Encoding.UTF8; //Tässä määritellään asiakas-olio. Asiakas asiakas = new Asiakas("Amanda", 1000); //Tässä tulostetaan asiakkaan tiedot kutsumalla //TulostaTiedot()-metodi. asiakas.TulostaTiedot(); //Tässä määritellään hopeaEtuAsiakas-olio. HopeaEtuAsiakas hopeaEtuAsiakas = new HopeaEtuAsiakas("Emanuel", 2000, 5430.85m); //Tässä tulostetaan hopeaEtuAsiakas-olion tiedot. hopeaEtuAsiakas.TulostaTiedot(); //Tässä määritellään kultaEtuAsiakas-olio. KultaEtuAsiakas kultaEtuAsiakas = new KultaEtuAsiakas("Emiliano", 3000, 15430.85m); //Tässä tulostetaan kultaEtuAsiakas-olion tiedot. kultaEtuAsiakas.TulostaTiedot(); }
static void Main(string[] args) { /* * Tässä teen eri kokeilut upcast ja downcast ymmärtämiseen. * */ // Asiakas on HenkiloTiedon aliluokka Asiakas vadimAsiakas = new Asiakas("Vadim", 111, 3); // HenkiloTiedot on ylin luokka HenkiloTiedot vadimHenkiloTiedot = new HenkiloTiedot("Vadim", 111); // muunnetaan Asiakas luokka sen yliluokkaan (upcast). HenkiloTiedot vadimAsiakasHenkiloTeidoksi = (HenkiloTiedot)vadimAsiakas; Console.WriteLine("-----HenkiloTiedon alkuperainen TulostaTiedot()-----"); vadimHenkiloTiedot.TulostaTiedot(); Console.WriteLine("-----Asikaan muunnettu HenkiloTiedoksi TulostaTiedot()-----"); vadimAsiakasHenkiloTeidoksi.TulostaTiedot(); Console.WriteLine("-----Ja Asiakkaan alkuperainen TulostaTiedot()-----"); vadimAsiakas.TulostaTiedot(); Console.WriteLine("\n\n"); Console.WriteLine("Tässä yritetaan muuntaa yliluokka HenkiloTiedot alaluokaksi Asiakas"); // yritetaan muuntaa yliluokka HenkiloTiedot alaluokaksi Asiakas try { Asiakas vadimAlaLuokkaHenkiloTiedot = (Asiakas)vadimHenkiloTiedot; // tulostetaan vadimAlaLuokkaHenkiloTiedot.TulostaTiedot(); } catch { Console.WriteLine("Yläluokka ei muuttuu alaluokaksi..."); } Console.WriteLine("----Yritetaan aikasemmin muunnettu alaluokka yliluokaksi muuntaa alaluokaksi-----"); // yritetaan muuntaa yliluokka HenkiloTiedot alaluokaksi Asiakas Asiakas vadimVanhaAla_YliLuokkaHenkiloTiedot = (Asiakas)vadimAsiakasHenkiloTeidoksi; // tulostetaan vadimVanhaAla_YliLuokkaHenkiloTiedot.TulostaTiedot(); Console.WriteLine("\n"); // muunnetaan alasin luokka HopeaAsiakas ylinluokkaan HenkiloTiedot HopeaEtuAsiakas vadimHopeaAsiakas = new HopeaEtuAsiakas("Vadim", 111, 3, 100.10f); Console.WriteLine("----Tässä alinluokan TulostaTiedot ja LaskeBonus----"); vadimHopeaAsiakas.TulostaTiedot(); vadimHopeaAsiakas.LaskeBonus(); Console.WriteLine("\n"); Console.WriteLine("----Munnoksen vadimHopeaAsikass ylinluokaksi HenkiloTiedot() jälkeen----"); HenkiloTiedot vadimHopeaYlinLuokkaan = (HenkiloTiedot)vadimHopeaAsiakas; vadimHopeaYlinLuokkaan.TulostaTiedot(); Console.WriteLine("\n"); Console.WriteLine("----Takaisin entinen ala ja nyt ylinluokka vadimHopeaYlinLuokkaan alaluokaksi----"); HopeaEtuAsiakas entAlaNytYlaVadimHopea = (HopeaEtuAsiakas)vadimHopeaYlinLuokkaan; entAlaNytYlaVadimHopea.TulostaTiedot(); entAlaNytYlaVadimHopea.LaskeBonus(); Console.WriteLine("\n"); // yritetään muuntaa aikasemmin muunnettu HopeaEtuAsiakas luokka muuntaa Asiakas luokaaksi Console.WriteLine("-----Munnetaan aikasemmin muunnettu HopeaEtuAsiakas-olio newAsiakas-olioksi"); try { Asiakas newAsiakas = (Asiakas)entAlaNytYlaVadimHopea; newAsiakas.TulostaTiedot(); newAsiakas.LaskeBonus(); } catch { Console.WriteLine("Yläluokka ei muuttuu alaluokaksi..."); } Console.WriteLine("\n"); /* * * Tässä lopetetaan omat kokeilut, eli aikasemmin munnettu alaluokka yliluokaksi * saa muuntaa takaisin alaluokaksi (downcast) */ //Seuraavassa määritellään hopeaEtuAsiakas-olio HopeaEtuAsiakas hopeaEtuAsiakas = new HopeaEtuAsiakas("Laura", 3000, 10, 12345.00f); //tulostetaan tulevaa vertaulua varten Console.WriteLine("ToString: " + hopeaEtuAsiakas.ToString()); hopeaEtuAsiakas.TulostaTiedot(); hopeaEtuAsiakas.LaskeBonus(); //Seuraavassa määritellään henkiloTiedot1-olio, joka //alustetaan muuntamalla hopeaEtuAsiakas-olio //(upcast). Tämä on mahdollista koska HenkiloTiedot //on HopeaEtuAsiakas-luokan välillinen yliluokka. //Huomaa, että henkiloTiedot1-olio sisältää kuitenkin //vain ne jäsenet, jotka on määritelty HenkiloTiedot- //luokassa, eli nimi, id ja TulostaTiedot()-metodi. HenkiloTiedot henkiloTiedot1 = (HenkiloTiedot)hopeaEtuAsiakas; Console.WriteLine("-- HopeaEtuAsiakas-olio on muunnettu HenkiloTiedot-olioksi --"); //Seuraavassa kutsutaan henkiloTiedot1-olion //TulostaTiedot()-metodi. Huomaa, että koska //henkiloTiedot1-olio on alustettu muunntamalla //hopeaEsuAsiakas-olio, käytännössä hopeaEsuAsiakas-olion //TulostaTiedot() tulee kutsutuksi! //HopeaEtuAsiakkaan tiedot: Laura 3000 Ostot: 12 345,00 € eikä "Henkilön tiedot: Laura 3000" henkiloTiedot1.TulostaTiedot(); Console.WriteLine("\t\t-------------------"); Asiakas asiakas1 = new Asiakas("Lucia", 2000, 3); //tulostetaan tulevaa vertaulua varten Console.WriteLine("ToString: " + asiakas1.ToString()); asiakas1.TulostaTiedot(); asiakas1.LaskeBonus(); //Seuraavassa määritellään henkiloTiedot2-olio, joka //alustetaan muuntamalla asiakas1-olio (upcast). Tämä //on mahdollista koska HenkiloTiedot on Asiakas-luokan //välitön yliluokka. Huomaa, että henkiloTiedot2-olio //sisältää kuitenkin vain ne jäsenet, jotka on //määritelty HenkiloTiedot-luokassa, eli nimi, id ja //TulostaTiedot()-metodi. HenkiloTiedot henkiloTiedot2 = (HenkiloTiedot)asiakas1; Console.WriteLine("-- Asiakas-olio on muunnettu HenkiloTiedot-olioksi --"); //Seuraavassa kutsutaan henkiloTiedot2-olion //TulostaTiedot()-metodi. Huomaa, että koska //henkiloTiedot2-olio on alustettu muunntamalla //asiakas1-olio, käytännössä asiakas1-olion //ylikirjoitettu TulostaTiedot() tulee kutsutuksi! //Asiakkaan tiedot: Lucia 2000 Suhteen kesto: 3 eikä "Henkilön tiedot: Lucia 2000" Console.WriteLine("ToString: " + henkiloTiedot2.ToString()); henkiloTiedot2.TulostaTiedot(); Console.WriteLine("\t\t-------------------"); //Seuraavassa hopeaEtuAsiakas-olio muunnetaan asiakas1- //olioksi (upcast). Tämä on mahdollista koska Asiakas- //luokka on HopeaEtuAsiakas-luokan yliluokka. Huomaa, //että muunnoksen seurauksena vain Asiakas-luokassa //määritellyt jäsenet eli nimi, id, suhteenKesto, //LaskeBonus() ja TulostaTiedot() ovat käytössä, mutta //ei ostot-kenttä! asiakas1 = (Asiakas)hopeaEtuAsiakas; Console.WriteLine("-- HopeaEtuAsiakas-olio on muunnettu Asiakas-olioksi --"); //Seuraavassa kutsutaan asiakas1-olion metodeja. //Huomaa, että koska asiakas1 on alustettu muunntamalla //hopeaEtuAsiakas-olio, tämän olion ylikirjoitettu //TulostaTiedot()-metodit tulee kutsutuiksi. //HopeaEtuAsiakkaan tiedot: Laura 3000 Ostot: 12 345,00 € //Mutta, //koska LaskeBonus()-metodi on merkitty new:lla //HopeaEtuAsiakas-luokassa, Asiakas-luokassa määritelty //LaskeBonus() tulee kutsutuksi //Asiakkaan bonus on: 1 000,00 € eikä "HopeaAsiakkaan bonus on: 1 234,50 €" Console.WriteLine("ToString: " + asiakas1.ToString()); asiakas1.TulostaTiedot(); asiakas1.LaskeBonus(); Console.WriteLine("\t\t-------------------"); //Seuraavassa henkiloTiedot1-olio muunnetaan //hopeaEtuAsiakas2-olioksi (downcast). Huomaa, että //tämä on mahdollista vain sen takia, että //henkiloTiedot1-olio alunperin luotiin muuntamalla //HopeaEtuAsiakas-luokan olio. Huomaa myös, että //hopeaEtuAsiakas2 sisältää kaikki HopeaEtuAsiakas- //luokkaan kuuluvat jäsenet. nimi, id ja ostot HopeaEtuAsiakas hopeaEtuAsiakas2 = (HopeaEtuAsiakas)henkiloTiedot1; Console.WriteLine("-- HenkiloTiedot-olio on muunnettu HopeaEtuAsiakas-olioksi --"); Console.WriteLine("jäsenet: nimi: " + hopeaEtuAsiakas2.nimi + "" + ", id: " + hopeaEtuAsiakas2.id + "" + ", suhteen kesto: " + hopeaEtuAsiakas2.suhteenKesto + "" + ", ostot: " + hopeaEtuAsiakas2.ostot); Console.WriteLine("ToString: " + hopeaEtuAsiakas2.ToString()); hopeaEtuAsiakas2.TulostaTiedot(); hopeaEtuAsiakas2.LaskeBonus(); Console.WriteLine("\t\t-------------------"); //Seuraavassa asiakas1-olio muunnetaan //hopeaEtuAsiakas3-olioksi (downcast). Huomaa, että //tämä on taas mahdollista vain sen takia, että //asiakas1 aikaisemmin alustettiin muunntamalla //HopeaEtuAsiakas-luokan olio. HopeaEtuAsiakas hopeaEtuAsiakas3 = (HopeaEtuAsiakas)asiakas1; Console.WriteLine("-- Asiakas-olio on muunnettu HopeaEtuAsiakas-olioksi --"); Console.WriteLine("ToString: " + hopeaEtuAsiakas3.ToString()); hopeaEtuAsiakas3.TulostaTiedot(); hopeaEtuAsiakas3.LaskeBonus(); Console.WriteLine("\t\t-------------------"); //Seuraavassa määritellään olioita ilman //tyyppimuunnosta. HenkiloTiedot henkiloTiedot3 = new HenkiloTiedot("Paul", 5000); Asiakas asiakas2 = new Asiakas("Jyrki", 4000, 7); //Seuraava muunnos aliluokkaan (downcast) epäonnistuu //koska henkiloTiedot3-olio luotiin suoraan //HenkiloTiedot-luokan muodostimella! //HopeaEtuAsiakas hopeaEtuAsiakas4 = (HopeaEtuAsiakas)henkiloTiedot3; //Seuraava muunnos aliluokkaan (downcast) epäonnistuu //koska asiakas2-olio luotiin suoraan Asiakas-luokan //muodostimella! //HopeaEtuAsiakas hopeaEtuAsiakas5 = (HopeaEtuAsiakas)asiakas2; //Seuraava muunnos aliluokkaan (downcast) epäonnistuu //koska henkiloTiedot3-olio luotiin suoraan //HenkiloTiedot-luokan muodostimella! //Asiakas asiakas3 = (Asiakas)henkiloTiedot3; //Seuraava muunnos epäonnistuu koska Asiakas- ja //AliHankija-luokat eivät ole yhteensopivia! //Alihankija aliHankija = (Alihankija) asiakas2; }