Наследование для пользователей Visual Basic 6.0
Обновлен: Ноябрь 2007
Наследование позволяет создавать новые классы из существующих. Наследование может упростить конструирование приложения, предоставляя структуру отношений между различными классами. Оно также поддерживает повторное использование кода, так как требуется кодировать только поведение новых или дополнительных классов.
Наследование интерфейса
Visual Basic 6.0
Visual Basic 6.0 поддерживает наследование интерфейса, более подробно описанное в разделе Изменения интерфейса для пользователей Visual Basic 6.0.
Visual Basic 2008
Visual Basic 2008 поддерживает наследование интерфейса с помощью операторов Оператор Interface (Visual Basic) и Оператор Implements. Дополнительные сведения об интерфейсах см. в разделе Интерфейсы в Visual Basic.
Наследование реализации
При создании нового класса через наследование реализации он автоматически получает все члены и реализацию базового класса. Существующий класс называется "базовым классом". Новый класс является "производным классом". К классу могут быть добавлены дополнительные члены. Поведение базового класса можно изменить, написав код в новом классе. Этот метод называется переопределением.
Классы можно создать с помощью наследования из создаваемых классов, из классов в ссылках, добавляемых к проекту, или из объектов в .NET Framework. Многие классы платформы .NET Framework связаны наследованием. Например, класс TextBox наследует от класса System.Windows.Forms.TextBoxBase.
Visual Basic 6.0
Visual Basic 6.0 не поддерживает наследование реализации.
Visual Basic 2008
Наследование объявляется в Visual Basic 2008 с помощью оператора Inherits. В этом примере производный класс Oak наследует от базового класса Tree.
Public Class Oak
Inherits Tree
' Add code here to extend or
' modify the behavior of the Tree class.
End Class
MustInherit и NotInheritable
Visual Basic 6.0
В наследовании интерфейса в Visual Basic 6.0 любой класс может действовать как базовый класс интерфейса. Не существует синтаксиса, с помощью которого можно запретить какому-либо классу действовать как базовый класс интерфейса. Также не существует синтаксиса, с помощью которого можно было бы заставить класс действовать только как базовый класс интерфейса.
Visual Basic 2008
Наряду с наследованием реализации Visual Basic 2008 определяет два модификатора класса — MustInherit и NotInheritable. Эти модификаторы позволяют программисту управлять отношениями наследования в приложении.
Модификатор MustInherit в объявлении класса указывает класс, экземпляр которого не может быть создан:
Public MustInherit Class BaseClass
End Class
Это означает, что BaseClass не может отображаться после ключевого слова New. Могут быть созданы только экземпляры классов, наследующих от BaseClass, а также не имеющих модификатора MustInherit. В объектно-ориентированной литературе и других объектно-ориентированных языках класс MustInherit называется абстрактным классом. Класс, который не является классом MustInherit, то есть экземпляр которого может быть создан, называется конкретным классом.
Связанной концепцией является запечатанный класс, который не может служить в качестве базового класса. Ключевое слово NotInheritable в определении класса указывает этот статус:
Public NotInheritable Class DerivedClass
End Class
Класс NotInheritable помечает границу иерархии наследования.
Дополнительные сведения см. в разделе Наследование в Visual Basic.
Советы по обновлению
Классы, действующие как интерфейсы в Visual Basic 6.0, обновляются до интерфейсов Visual Basic 2008. Рассмотрим этот пример базового и производного класса из Visual Basic 6.0:
' Contents of class BaseClass
Public Sub BaseMethod()
End Sub
' Contents of class DerivedClass
Implements BaseClass
Private Sub BaseClass_BaseMethod()
End Sub
Мастер обновления создает этот обновленный код:
Option Strict Off
Option Explicit On
Interface _BaseClass
Sub BaseMethod()
End Interface
Friend Class BaseClass
Implements _BaseClass
Public Sub BaseMethod() Implements _BaseClass.BaseMethod
End Sub
End Class
Friend Class DerivedClass
Implements _BaseClass
Private Sub BaseClass_BaseMethod() Implements _BaseClass.BaseMethod
End Sub
End Class
С использованием наследования вместо интерфейсов обновленный код может измениться следующим образом:
Friend Class BaseClass
Public Sub BaseMethod()
' Add code here to define BaseMethod.
End Sub
End Class
Friend Class DerivedClass
Inherits BaseClass
End Class
Этим исключается один уровень косвенного обращения, _BaseClass. Также исключается одно определение метода, BaseClass_BaseMethod, так как метод унаследован от базового класса и не требует повторного кодирования. Если программисту требуется другое поведение производного класса, BaseMethod может быть переопределен, как показано ниже:
Friend Class BaseClass
Public Overridable Sub BaseMethod()
' Add code here to define BaseMethod.
End Sub
End Class
Friend Class DerivedClass
Inherits BaseClass
Public Overrides Sub BaseMethod()
' Add code here to define behavior for DerivedClass.
End Sub
End Class
В обновленных интерфейсах можно рекомендовать следующие методы:
Замените операторы Interface операторами Inherits.
Реализуйте базовый класс как интерфейс, а не как класс, который реализует интерфейс. Дополнительные сведения см. в разделе Изменения интерфейса для пользователей Visual Basic 6.0.
Реализуйте базовые классы как классы MustInherit.
Реализуйте производные классы как NotInheritable.