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

Visual Basic.NET. Уроки

  Все выпуски  

Visual Basic.NET. Уроки


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

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

Рассылка №37

Основы VB.NET. Урок 32. Обращаемся к родителю или ключевое слово MyBase.

Полные версии уроков (с картинками) можно найти по адресам
Урок 32. Обращаемся к родителю или ключевое слово MyBase.

Основы VB.NET. Урок 32. Обращаемся к родителю или ключевое слово MyBase

Иногда нам из кода дочернего класса надо вызвать код родительского класса. Для этого как раз и служит ключевое слово MyBase. Вот пример:

Class A
    Public Sub f()
        Console.WriteLine("функция f() из родительского класса")
    End Sub
End Class
Class B
    Inherits A
    Public Shadows Sub f()
        Console.WriteLine("функция f() из дочернего класса")
    End Sub
    Public Sub func()
        'Вызывается f из родительского класса.
        MyBase.f()
        'Вызывается f из дочернего класса.
        f()
    End Sub
End Class
'Тестирование.
Module Module1
    Sub Main()
        Dim q As New B()
        'Программа выведет
        '"функция f() из родительского класса"
        '"функция f() из дочернего класса"
        q.func()
    End Sub
End Module

Тут класс B - это потомок класса A. И в одном, и в другом классах есть метод f. Если нам надо вызвать f из родительского класса в дочернем классе, то мы используем ключевое слово MyBase.

С помощью MyBase можно получать доступ не только к методам, но и к полям, свойствам и т. п. родительского класса.

Часто вызов через MyBase используется для конструкторов. Скажем, в конструкторе родительского класса инициализируется ряд полей. В дочернем классе добавлены еще пара полей и инициализацию полей дочернего класса удобнее делать так: в конструкторе дочернего класса сначала вызываем конструктор класса-предка (через MyBase), затем инициализируем поля, определенные в классе-предке. Вот пример такого использования MyBase:

Class Circle
    'Радиус.
    Private r As Single
    'Конструктор без параметров.
    Public Sub New()
        r = 1
    End Sub
    'Конструктор с параметрами.
    Public Sub New(ByVal r As Single)
        MyClass.r = r
    End Sub
    'Вычисление площади.
    Public Function Square() As Single
        Return r * Math.PI
    End Function
End Class

Class Cylinder
    Inherits Circle
    'Высота.
    Private height As Single
    'Конструктор без параметров.
    Public Sub New()
        'Вызов конструктора без параметров родительского класса.
        MyBase.New()
        height = 1
    End Sub
    'Конструктор с параметрами.
    Public Sub New(ByVal r As Single, ByVal height As Single)
        'Вызов конструктора с параметрами родительского класса.
        MyBase.New(r)
        MyClass.height = height
    End Sub
    'Вычисление объема.
    Public Function Volume() As Single
        'Вызов метода Square родительского класса.
        Return MyBase.Square * height
    End Function
End Class

Module Module1
    Sub Main()
        Dim cyl As New Cylinder(2, 0.5)
        Console.WriteLine("Объем цилиндра равен {0}", cyl.Volume())
    End Sub
End Module
Наверх

Рассылки с сайта progs.biz

Рассылки Subscribe.Ru
Уроки по C/C++

Уроки по C/C++. Конструкции языка, указатели, объектно-ориентированное программирование, работа с файлами, библиотека STL и другое.


Copyright Алексеев Игорь, 2002-2003
Copyright сайт progs.biz, 2002-2003
Распространение материалов без разрешения владельцев авторских прав запрещено.



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

В избранное