Example #1
0
        public static void noVirtualCast()
        {
            NoVirtualItem iItem = new NoVirtualItem("AlmaItem", 10, 1000);
            NoVDVD iDVD = new NoVDVD("AlmaDVD", 20, 500.0, DVDType.LayerOne);
            NoVirtualItem iItemDVD = new NoVDVD("AlmaDVD", 20, 500.0, DVDType.LayerOne);

            // DVD-bol Item-et (cast nelkul, mert mindig lehetseges)
            NoVirtualItem iItem2 = iDVD;
            System.Console.WriteLine(iItem2.play()); // Play NoVirtualItem

            // Item-bol DVD-t (cast szukseges, mert nem biztos, hogy lehetseges!)
            NoVDVD iDVD2 = (NoVDVD)iItemDVD;
            System.Console.WriteLine(iDVD2.play()); // Play NoVDVD

            NoVirtualItem iItemVHS = new NoVVHS("AlmaVHS", 20, 500.0, VHSType.Size240);
            // NoVDVD iDVD3 = (NoVDVD)iItemVHS; // InvalidCastException

            // biztonsagos megoldas
            if (iItemVHS is NoVDVD)
            {
                NoVDVD iDVD3 = (iItemVHS as NoVDVD);
                // vagy: NoVDVD iDVD3 = (NoVDVD)iItemVHS;
            }

            // tudjuk, hogy az iItemDVD-nek van DiskType-ja, de nem tudjuk kiirni:
            // System.Console.WriteLine(iItemDVD.DiskType);
            // de igy viszont mar igen
            System.Console.WriteLine((iItemDVD as NoVDVD).DiskType);
        }
Example #2
0
        public static void noVirtualDemo()
        {
            // minden metodus a NoVirtualItem osztalyban fut (egyertelmu)
            System.Console.WriteLine("\n### (1) NoVirtualItem iItem = new NoVirtualItem()");
            NoVirtualItem iItem = new NoVirtualItem("AlmaItem", 10, 1000);
            System.Console.WriteLine(iItem.play()); // Play NoVirtualItem
            System.Console.WriteLine(iItem.handle()); // Play NoVirtualItem

            // A play() egyertelmuen a NoVDVD-ben fut, de a handle() esete mar nem ennyire egyertelmu
            System.Console.WriteLine("\n### (2) NoVDVD iDVD = new NoVDVD()");
            NoVDVD iDVD = new NoVDVD("AlmaDVD", 20, 500.0, DVDType.LayerOne);
            System.Console.WriteLine(iDVD.play()); // Play NoVDVD --> DVD

            // Itt a Play a NoVirtualItem osztalyban fut! OK: a handle() altel hivott play() metodust eloszor a
            // NoVirtualItem osztalyban talalja meg a fordito, mert a handle() metodus is ott van!
            System.Console.WriteLine(iDVD.handle()); // Play NoVirtualItem (es igy nem jelenik meg a DiskType..)

            // minden metodus a NoVirtualItem osztalyban fut --> ez a nem virtualis metodusok hasznlatanak egyik legnagyobb hatranya
            // egyetlen elonye: gyorsabb mint a virtualis metodusok hivasa (gyorsabb, mert kiszamithato, egyertelmu a forditonak. Embernek mar kevesbe..)
            System.Console.WriteLine("\n### (3) NoVirtualItem iItemDVD = new NoVDVD()");
            NoVirtualItem iItemDVD = new NoVDVD("AlmaDVD", 20, 500.0, DVDType.LayerOne);
            System.Console.WriteLine(iItemDVD.play()); // Play NoVirtualItem
            System.Console.WriteLine(iItemDVD.handle()); // Play NoVirtualItem

            System.Console.WriteLine("\n### (4) NoVDVD iDVD = new NoVDVD() --> NoVirtualItem");
            Program.noVirtualPrint(iDVD);
            // igy ugyanazt erjuk el, mint a 3. esetben
        }