progs.biz  
Начало>VB.NET>Основы>Урок 32
C#
VB.NET
Visual C++.NET
ASP.NET
Visual C++ 6
WinAPI
C/C++
Delphi
C++ Builder
Java
SQL
PHP
DirectX
Visual Basic 6.0
Ассемблер
Интернет
Сист. прогр-ние
Pocket PC
Обзор книг
Обзор программ

Джон Коннелл. Разработка элементов управления Microsoft .NET на Microsoft Visual Basic .NET
Джон Коннелл. Разработка элементов управления Microsoft .NET на Microsoft Visual Basic .NET
Заказать на Озоне



Яндекс-цитирования

Основы 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
Рассылки нашего сайта на Subscribe.Ru
Visual C++, MFC
C# и .NET
VB.NET
ASP.NET new!
Win API
C/C++
Delphi
Java
HTML, PHP, mySQL, WEB-дизайн
Flash MX
C++ Builder
Ассемблер
SQL Server
DirectX
Обзор книг
Обзор программ
Новости сайта progs.biz


 
 
Копирование любых материалов сайта без разрешения авторов и владельцев сайта запрещено.
© 2002-2008 сайт progs.biz
© 2002-2008 Игорь Алексеев