static void Main(string[] args) { Kutya kutya = new Kutya(); //A függvényeket a kutya "felől" hívom kutya.Koszon(); kutya.Enekel(); kutya.Beszel(); //Ebben az esetben a háziállat felől hívom a függvényeket. Lehet a Haziallat típusba new Kutya-t tenni hiszen abból származik Haziallat kutya2 = new Kutya(); kutya2.Koszon(); kutya2.Enekel(); kutya2.Beszel(); //direktben ki tudok jelölni egy felületet, most a Haziallat tipusu változónak a Kutya felületét használom ((Kutya)kutya2).Koszon(); ((Kutya)kutya2).Enekel(); ((Kutya)kutya2).Beszel(); var haziallat2 = new Haziallat(); // ((Kutya)haziallat2).Beszel(); invalid cast kivétel //Hogyan érdemes típuskonverziót csináltatni //Az object minden objektum ősosztálya, így bele lehet tenni bármilyen objektumot object o = kutya; //Kivenni hogy lehet? Ez a leggyorsabb if (o is Kutya) { Console.WriteLine("Ez egy kutya"); Kutya k = (Kutya)o; } //as kulcsszóval konvertálok Kutya k2 = o as Kutya; if (k2 != null) {//sikerült a konverzió Console.WriteLine("Ő egy kutya"); Kutya k = (Kutya)o; } //try catch-el mivel elszállhat a konvertálási kísérlet ez a leglassabb módszer try { Kutya k3 = (Kutya)o; } catch (Exception) { Console.WriteLine("Elszállt"); } Console.ReadLine(); }
static void Main(string[] args) { var haziallat = new Haziallat(); var haziallat2 = new Haziallat(); if (haziallat == haziallat2) { Console.WriteLine("Egyezőek"); } else { Console.WriteLine("Nem azonosak"); } //Megtöri az egységbezárást haziallat2.LabSzam = 3; //egységbe tudom zárni az információt haziallat2.mennyiLab(); haziallat2.HanySzeme = 12; haziallat2.HanyFogaVan = 34; var szemek = haziallat2.HanySzeme; //érték szerinti átadás var lepes = 5; haziallat.LepjenEnnyit(lepes); //referencia átadása haziallat.LepjenEnnyitR(ref lepes); Console.WriteLine(lepes); haziallat.AllatNeve(); Console.ReadKey(); }
static void Main(string[] args) { // A függvények a kutya oldaláról vannak meghívva Kutya kutya = new Kutya(); kutya.Koszon(); kutya.Enekel(); kutya.Beszel(); // eredmény: /* A háziállat köszön. * A kutya enekel. * A kutya beszél.*/ Console.WriteLine(); //A függvényeket a háziállat felől is meghívhatjuk Haziallat haziallat = new Kutya(); haziallat.Koszon(); haziallat.Enekel(); haziallat.Beszel(); //eredmény //A háziállat köszön. //A háziállat énekel. //A kutya beszél. Console.WriteLine(); //Direktben ki tudok jelölni felületet //A Haziallat tipusú változónak veszem a Kutya felületét // így ismét a kutya felől közelítek ((Kutya)haziallat).Koszon(); ((Kutya)haziallat).Enekel(); ((Kutya)haziallat).Beszel(); Console.WriteLine(); //eredmény ugyanaz mint először //A háziállat köszön. //A kutya enekel. //A kutya beszél. // ez a castolás ezt nem ellenőrzi a fordító ha olyan castolást csinálunk ami nem lehetséges az futásidejű hibát generál // var haziallat2 = new Haziallat(); // ((Kutya)haziallat2).Beszel(); //mivel a haziallat2 egy Haziallat tipusú objektum ezért neki nincs Kutya felülete // Hogy érdemes típuskonverziót végezni? // Az object osztály minden osztály ősosztálya minden objektum beletehető egy ijen típusú változóba object o = new Kutya(); //o.Beszel(); nincs ilyen metódusa //de hogy lehet innen kivenni? //ellenpróba ha az o-ba háziállatot teszek mivel objektum típusú ezért bármilyen osztály objektumával felülírható //o = new Haziallat(); ObjectbolKutya1(o); ObjectbolKutya2(o); ObjectbolKutya3(o); // nézzük meg a teljesítményeket // létrehozunk egy objektumtömböt feltöltjük kutyákkal és házállatokkal és megnézzük melyik függvény a gyorsabb var olist = new object[1000]; for (int i = 0; i < 1000; i++) { if (i % 2 == 0) { olist[i] = new Haziallat(); } else { olist[i] = new Kutya(); } } var sw = new System.Diagnostics.Stopwatch(); sw.Start(); for (int i = 0; i < 1000; i++) { ObjectbolKutya1(olist[i]); } Console.WriteLine("1-es módszer: {0}", sw.ElapsedTicks); sw.Restart(); for (int i = 0; i < 1000; i++) { ObjectbolKutya2(olist[i]); } Console.WriteLine("2-es módszer: {0}", sw.ElapsedTicks); sw.Restart(); for (int i = 0; i < 1000; i++) { ObjectbolKutya3(olist[i]); } Console.WriteLine("3-as módszer: {0}", sw.ElapsedTicks); Console.ReadKey(); }