Отправляет email-рассылки с помощью сервиса Sendsay

Visual Basic.NET. Уроки

  Все выпуски  

Visual Basic.NET. Уроки


Информационный Канал Subscribe.Ru

Основы VB.NET. Уроки с сайта http://progs.biz

Рассылка №16

Основы VB.NET. Урок 14. Абстрактные классы.

Полные версии уроков (с картинками) можно найти по адресам
Урок 14. Абстрактные классы.

Основы VB.NET. Урок 14. Абстрактные классы

Часто мы имеем такую ситуацию - есть иерархия классов, и в каждом классе-потомке есть метод, который выполняет одно и то же действие. Но во всех класса-потомках это действие выполняется по-разному. В этом случае мы объявляем этот метод в классе-предке, но реализацию этого метода в классе-предке мы не пишем (а пишем отдельно в каждом классе-потомке). Класс-предок при этом мы объявляем как абстрактный. Создавать экземпляры такого класса нельзя - он используется только как предок для других классов в иерархии.

Поясним сказанное на примере. В этом примере есть класс Figure (геометрическая фигура). В нем есть метод Perim - для подсчета периметра фигуры. Понятно, что общей форулы для периметра нет (разве что через интеграл ;)) - для одной геометрической фигуры будет одна формула, для другой - другая. Поэтому мы объявляем наш класс Figure как абстрактный (с помощью ключевого слова MustInherit), а его метод Perim объявляем в классе без реализации (это делаем через ключевое слово MustOverride). Далее заводим два класса-потомка (Square (квадрат) и Rectangle (прямоугольник)), в которых и пишем реализацию метода Perim:

'Объявляем абстрактный класс
MustInherit Class Figure
    Public MustOverride Function Perim() As Double
End Class
'Класс Square - потомок класса Figure
Class Square
    Inherits Figure
    'Сторона квадрата
    Public a As Double
    'Конструктор
    Public Sub New(ByVal a1 As Integer)
        a = a1
    End Sub
    'Реализуем метод Perim
    Public Overrides Function Perim() As Double
        Return a * 4
    End Function
End Class
'Класс Rectangle - потомок класса Figure
Class Rectangle
    Inherits Figure
    'Стороны прямоугольника
    Public a As Double, b As Double
    'Конструктор
    Public Sub New(ByVal a1 As Integer, ByVal b1 As Integer)
        a = a1
        b = b1
    End Sub
    'Реализуем метод Perim
    Public Overrides Function Perim() As Double
        Return (a + b) * 2
    End Function
End Class

Обратите внимание, что метод Perim() мы объявили в родительском классе с ключевым словом MustOverride, а пишем его реализацию в дочених классах с ключевым словом Overrides.

Применить наши классы можно так:

Class Test
    Public Shared Sub Main()
        'Объявляем массив
        Dim p(2) As Figure
        p(0) = New Square(2)
        p(1) = New Rectangle(2, 3)
        Console.WriteLine(p(0).Perim())
        Console.WriteLine(p(1).Perim())
    End Sub
End Class

Видите - тут мы объявили массив из переменных типа родительского класса Figure. Далее мы в нулевой элемент массива записываем новый экземпляр класса Square, а в первый элемент - экземпляр класса Rectangle. Далее идет самое важное - мы вызываем метод Perim и выполняется конкретная реализация этого метода (или из класса Square, или из класса Rectangle). Выведет эта программа, естественно, 8 и 10.

Наверх
Рассылки сайта progs.biz:
Рассылки Subscribe.Ru
Сайтостроение (уроки по HTML, PHP, MySQL, веб-дизайну)

Уроки по созданию сайта - HTML, PHP, JavaScript, PhotoShop, ASP, работа с базами данных, скрипты, SSI, Flash, использование HTML-редакторов (Dreamweaver, Homesite). Каждый урок рассчитан на 10-15 минут. Каждая серия уроков независима от других.


Copyright Алексеев Игорь, 2002

Copyright сайт progs.biz, 2002



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное