static void Main()
        {
            Osoba janko = new Student();
            Student jankoStudent = janko as Student;
            if (jankoStudent != null)
                Console.WriteLine(jankoStudent);
            else
                Console.WriteLine("null");

            Radnik jankoSljaker = janko as Radnik;
            if (jankoSljaker != null)
                Console.WriteLine(jankoSljaker);
            else
                Console.WriteLine("null");

            try
            {
                jankoSljaker = (Radnik)janko;
            }
            catch (Exception e)
            {
                Console.WriteLine("Bačena iznimka!");
                Console.WriteLine(e.Message);
            }

            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            Osoba janko = new Student();
            Student jankoStudent = janko as Student;
            if (jankoStudent != null)
                Console.WriteLine(jankoStudent);
            else
                Console.WriteLine("null");

            // ovo će biti null:
            Radnik jankoSljaker = janko as Radnik;
            if (jankoSljaker != null)
                Console.WriteLine(jankoSljaker);
            else
                Console.WriteLine("null");

            // razlika između eksplicitne i uvjetne pretvorbe: eksplicitna će baciti iznimku:

            try
            {
                jankoSljaker = (Radnik)janko;
            }
            catch (InvalidCastException e)
            {
                Console.WriteLine("Bačena iznimka!");
                Console.WriteLine(e.Message);
            }

            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            Osoba janko = new Student();

            Osoba osoba = new Osoba();

            Console.ReadKey();
        }
        // ovo je efikasniji način pisanja kada želimo napraviti "sigurnu" pretvorbu:
        // (pogledati i usporediti generirani IL kod za obje metode)
        static void Pretvorba2()
        {
            Osoba janko = new Student();

            Student studentJanko = janko as Student;
            if (studentJanko != null)
            {
            }
        }
        // ovo je česti način pisanja kada želimo napraviti "sigurnu" pretvorbu:
        static void Pretvorba1()
        {
            Osoba janko = new Student();

            if (janko is Student)
            {
                Student studentJanko = (Student)janko;
                // iskoristi studenta unutar bloka
            }
        }
        static void Main(string[] args)
        {
            Osoba janko = new Student();

            Osoba osoba = new Osoba();
            if (janko is Osoba)
            {
                Console.WriteLine("je");
            }
            else
                Console.WriteLine("nije");

            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            Osoba janko = new Student();

            Console.WriteLine(janko is Student);     //True
            Console.WriteLine(janko is Osoba);       //True

            Osoba osoba = new Osoba();

            Console.WriteLine(osoba is Student);     //False
            Console.WriteLine(osoba is Osoba);       //True

            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            Osoba janko = new Student();

            Osoba osoba = new Osoba();
            if (janko is Student)
                Console.WriteLine("janko je tipa Student \n");
            if(janko is Osoba)
                Console.WriteLine("janko je tipa Osoba\n");
            if (osoba is Osoba)
                Console.WriteLine("osoba je tipa Osoba\n");
            if(osoba is Student)
                Console.WriteLine("osoba je tipa Student\n");
                Console.ReadKey();
        }
        static void Main(string[] args)
        {
            Osoba janko = new Student();

            Osoba osoba = new Osoba();

            // ovo je istina:
            bool daLiJeStudent = janko is Student;
            Console.WriteLine("Janko je Student? {0}", daLiJeStudent);

            // i ovo je istina:
            bool daLiJeOsoba = janko is Osoba;
            Console.WriteLine("Janko je Osoba? {0}", daLiJeOsoba);

            // ovo je istina:
            bool daLiJeAOsoba = osoba is Osoba;
            Console.WriteLine("A je Osoba? {0}", daLiJeAOsoba);

            // ovo nije istina:
            bool daLiJeAStudent = osoba is Student;
            Console.WriteLine("A je Student? {0}", daLiJeAStudent);

            Console.ReadKey();
        }