Основы 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
|