Главная страница Библиотека (скачать книги) Скачать софт Введение в программирование Стандарты для C++ Уроки по C# Уроки по Python HTML Веб-дизайн Ассемблер в среде Windows ActiveX Javascript Общее о Линукс Линукс - подробно Линукс - новое Delphi Паскаль для начинающих Турбопаскаль Новости Партнеры Наши предложения Архив новостей |
Виртуальные методы.
Метод базового класса, которому при определении был указан модификатор virtual, и который был переопределен в одном или более потомственных классов называется виртуальным методом класса. Каждый наследник может иметь собственную версию виртуального метода. При вызове такого метода класса, выбор конкретной версии зависит от того типа объекта, на который ссылается ссылочная переменная, осуществляющая вызов. Выбор производится во время выполнения программы. using System; class Animal{ public Animal(string n){ name=n; } private string name; public virtual void Sound(){ // виртуальный метод Console.WriteLine("Неизвестный Звук !!!"); } public void ShowName(){ Console.WriteLine(name); } } class Cat:Animal{ public Cat(string name):base(name){} public override void Sound(){// переопределение виртуального метода Console.WriteLine("Мяу !!!"); } } class Dog:Animal{ public Dog(string name):base(name){} public override void Sound(){ Console.WriteLine("Гав !!!"); } } class Sample { static void Main() { try{ Animal p; Animal obj = new Animal("Неизвестное имя"); Cat obj2 = new Cat("Мурка"); Dog obj3 = new Dog("Полкан"); p = obj; p.Sound();// Animal::Sound p = obj2; p.Sound();//Cat::Sound p = obj3; p.Sound();//Dog::Sound } catch(Exception e){ Console.WriteLine(e.Message); } Console.Read(); } } Если в каком-то потомке виртуальный метод не переопределен, то тогда при вызове его используется метод базового класса. Давайте рассмотрим ещё один пример использования виртуальных методов: using System; class Animal{ public Animal(string n){ name=n; } private string name; public virtual void Sound(){ Console.WriteLine("Неизвестный Звук !!!"); } public void ShowName(){ Console.WriteLine(name); } } class Cat:Animal{ public Cat(string name):base(name){} public override void Sound(){ Console.WriteLine("Мяу !!!"); } } class Dog:Animal{ public Dog(string name):base(name){} public override void Sound(){ Console.WriteLine("Гав !!!"); } } class Sample { static void Main() { try{ Animal[] arr = new Animal[3]; arr[0] = new Animal("Без имени"); arr[1] = new Cat("Василий"); arr[2] = new Dog("Мелодия"); for(int i = 0;i<arr.Length;i++){ arr[i].Sound(); } } catch(Exception e){ Console.WriteLine(e.Message); } Console.Read(); } } |
|
Библиотека программиста. 2009. |
|