Меню сайта
Категории раздела
HTML [44] |
Visual C++ и MFC [21] |
c++ [78] |
php [19] |
Javascript [15] |
C# [51] |
загрузки [0] |
XNA
[10]
создание игр с помощью xna
|
Наш опрос
Друзья сайта
Статистика
Онлайн всего: 2
Гостей: 2
Пользователей: 0
Реклама
Главная » Статьи » C# |
Урок 18
Если в родительском классе некоторая функция объявлена как виртуальная, то в производном классе ее можно переопределить. В этом, собственно говоря, ничего нового нет - этомы могли делать и без всяких виртуальных функций. Новое заключается в том, что если мы запишем в переменную типа родительского класса экземпляр проиводного, то для такого экземпляра мы сможем вызывать переопределенную функцию производного класса. Вот пример, поясняющий это: using System; namespace test { //Класс Worker class Worker { protected int age=0; virtual public void setAge(int age) { if(age>0 && age<100) this.age=age; else this.age=0; } public int getAge() { return age; } } //Класс Boss class Boss : Worker { public int numOfWorkers; //Количество подчиненных override public void setAge(int age) { if(age>0 && age<45) this.age=age; else this.age=0; } } class Test { static void Main(string[] args) { Worker boss = new Boss(); boss.setAge(50); Console.WriteLine("Возраст босса "+boss.getAge()); } } } Как вы видите, тут функцию setAge в родительском классе Worker мы определили с ключевым словом virtual, а одноименную функцию в производном классе Boss - с ключевым словом ovеrride. Обратите внимание на то, что из какого конкретно класса вызывается функция (из родительского или производного) определяется на этапе выполнения программы, а не на этапе компиляции. В принципе в переменную родительского типа мы могли бы записать экземпляр именно родительского класса. В этом случае, естественно, вызвалась бы функция родительского класса. Вот поясняющий это утверждение пример: class Test { static void Main(string[] args) { Worker boss; bool b; //Присваиваем значение в переменную b ... if(b) { //В переменной boss - экземпляр класса Boss boss=new Boss(); } else { //В переменной boss - экземпляр класса Worker boss=new Worker(); } //Вызываем метод класса Boss или Worker boss.setAge(50); Console.WriteLine("Возраст "+boss.getAge()); } } С этим уроким все! | |
Просмотров: 626 | Рейтинг: 0.0/0 |
Всего комментариев: 0 | |