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


Изменения объектно-ориентированной модели модулей в Visual Basic

Обновлен: Ноябрь 2007

Общие члены представляют собой члены класса, такие как свойства и подпрограммы, доступные для всех экземпляров класса, но не связанные с каким-либо определенным экземпляром. Дополнительные сведения об общих членах см. в разделе Общие члены в Visual Basic.

Данные экземпляра и общие данные

Данные экземпляра — это набор данных, создаваемых при выполнении ключевого слова New. Общие данные класса, напротив, создаются независимо от выполнения ключевого слова New.

Visual Basic 6.0

В Visual Basic 6.0 общие данные в определениях класса не поддерживаются. Для совместного использования данных несколькими экземплярами класса используется глобальная переменная в модуле.

Visual Basic 2008

Общие данные объявляются путем добавления модификатора Shared (Visual Basic) в оператор объявления переменной, как показано ниже:

Private Shared totalInstances As Integer

Общие методы

Visual Basic 6.0

В Visual Basic 6.0 общие члены класса не поддерживаются. Подобные функциональные возможности обеспечиваются с помощью модулей. Среда выполнения создает только один экземпляр данных в модуле. Область действия данных и методов модуля распространяется на весь проект. Ниже приведен пример библиотеки, реализованной в модуле:

Public Sub GetTitle(wordXml As String)
    ' Add code here to find title in Xml string.
End Sub

Public Sub ReplaceTitle(wordXml As String, newTitle As String)
    ' Add code here to replace title.
End Sub

Visual Basic 2008

Дальнейшим развитием объектно-ориентированного подхода к модулям является использование общих членов класса, если члены связаны друг с другом в рамках библиотеки или если они связаны с имеющимся классом. Среда разработки определит, являются ли все члены общими, или в класс входят как общие члены, так и члены экземпляра. Если в класс входят только общие члены, при добавлении только закрытого конструктора экземпляр класса не сможет быть создан из клиентского кода. В следующем примере демонстрируется класс, экземпляр которого не может быть создан из клиентского кода, и клиентский код, вызывающий один из его членов:

Public Class WordLibrary
    Public Shared Sub GetTitle(ByVal wordXml As String)
        ' Add code here to find title in Xml string.
    End Sub

    Public Shared Sub ReplaceTitle(ByVal wordXml As String, _
        ByVal newTitle As String)
        ' Add code here to replace title.
    End Sub

    Private Sub New()
        ' This prevents instantiation of the class in the client.
    End Sub
End Class
' Code that calls the library method.
Sub ChangeTheTitle()
    WordLibrary.ReplaceTitle("Old Title", "New Title")
End Sub

Ниже приведены некоторые преимущества использования класса вместо модуля для создания данной библиотеки:

  • библиотека имеет имя, WordLibrary, которое явным образом вызывается в коде;

  • методы группируются в один класс, что указывает на их взаимосвязь;

  • использование закрытого конструктора указывает на то, что данный класс предоставляет набор служебных методов;

  • в клиентском коде используется имя библиотеки, благодаря чему организация проекта становится более понятной при прочтении.

В .NET Framework общие методы обычно используются для обеспечения функциональных возможностей, связанных с классом, но не требующих создания экземпляра класса. Одним из примеров может служить метод Parse, поддерживаемый многими типами данных в .NET Framework. Тип данных Тип данных Integer (Visual Basic) поддерживает метод Parse, принимающий в качестве параметра строку. Метод Parse возвращает целочисленное значение, представленное строкой. Нет смысла делать метод Parse методом-членом. Операции выполняются не над целочисленным значением, а над строкой.

Доступ к общим членам

Visual Basic 6.0

В Visual Basic 6.0 общие члены класса не поддерживаются.

Visual Basic 2008

Общие члены могут быть вызваны с помощью имени класса или имени экземпляра, как в следующем примере:

WordLibrary.ReplaceTitle("Old Title", "New Title")

Общие методы не могут обращаться к данным экземпляра, кроме тех случаев, когда общему методу передается ссылка на экземпляр класса.

Советы по обновлению

При обновлении модуля Visual Basic 6.0 WordLibrary создается следующий код:

Module WordLibrary
    Public Sub GetTitle(ByRef wordXml As String)
        ' Add code here to find title in Xml string.
    End Sub

    Public Sub ReplaceTitle(ByRef wordXml As String, _
        ByRef newTitle As String)
        ' Add code here to replace title.
    End Sub
End Module

При обновлении кода модуля с Visual Basic 6.0 до версии Visual Basic 2008 следует рассмотреть следующие варианты:

  • организация методов и данных модулей в классы в качестве общих данных и методов;

  • перенос методов модуля в имеющиеся классы в качестве общих методов, если метод связан с классом.

См. также

Основные понятия

Общие члены в Visual Basic