示例#1
0
        // Проверка допустимости преобр. с помощью is
        public void CheckingConversionAllowing()
        {
            TC_Person person = new TC_Person("Anna");

            if (person is TC_Employee)
            {
                TC_Employee emp = (TC_Employee)person;
                Console.WriteLine(emp.Company);
            }
            else
            {
                Console.WriteLine("Преобразование не доступно!");
            }
        }
示例#2
0
        // Попытка преобразованися с помощью as
        public void KeyWordConversion()
        {
            TC_Person   person = new TC_Person("Ben");
            TC_Employee emp    = person as TC_Employee;

            if (emp == null)
            {
                Console.WriteLine("Преобразование прошло неудачно!");
            }
            else
            {
                Console.WriteLine(emp.Company);
            }
        }
示例#3
0
        // Ловим InvalidCastException
        public void CatchingException()
        {
            TC_Person person = new TC_Person("Lilly");

            try
            {
                TC_Employee emp = (TC_Employee)person;
                Console.WriteLine(emp.Company);
            }
            catch (InvalidCastException ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
示例#4
0
        public void Action()
        {
            // Upcasting
            // Производные типы (классы) представляют собой базовый тип, т.к. внизу иерархии
            // TC_Emplyee и TC_Client
            TC_Employee employee = new TC_Employee("Den", "Yandex");
            // person присваивается ссылка на объект TC_Employee
            // Для сохранения ссылки на объект одного класса в переменную другого
            // выполняется преобразование типов от TC_Employee к TC_Person
            // Т.к. TC_Empl.. наследует от TC_Person, то происходит неявное восходящее преобразование
            TC_Person person = employee; // преобразование от TC_Employee к TC_Person

            // employee и person указывают на один и тот же объект в памяти (в Heap)
            // Но, person доступна часть с функционалом Person
            Console.WriteLine(person.Name);

            // Upcasting от TC_Employee к object
            object person1 = new TC_Employee("Mad", "Oracle");
            // Upcasting от TC_Client к object
            object person2 = new TC_Client("Bill", "Microsoft");
            // Upcasting от TC_Person к object
            object person3 = new TC_Person("Sam");

            // Downcasting (от базового к производному)
            TC_Employee employee1 = new TC_Employee("Max", "Unity");
            // преобр. от TC_Employye к TC_Person
            TC_Person person4 = employee1;
            // необходимо применить явное преобразование
            // преобр. от TC_Person к TC_Employye
            TC_Employee employee2 = (TC_Employee)person;

            object      obj = new TC_Employee("Mad", "Oracle");
            TC_Employee emp = (TC_Employee)obj;

            TC_Person pers = new TC_Client("Sam", "Ubisoft");
            // от TC_Person к TC_CLient
            TC_Client client = (TC_Client)pers;

            object obj1 = new TC_Employee("Mad", "Oracle");

            // Преобразование для вызова метода
            ((TC_Person)obj1).Display();

            // Преобразование к типу TC_Employee для получения свойства Company
            string comp = ((TC_Employee)obj1).Company;

            KeyWordConversion();
            CatchingException();
            CheckingConversionAllowing();
        }