Поделиться через


Наследование для пользователей 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.

См. также

Другие ресурсы

Наследование в Visual Basic

Интерфейсы в Visual Basic