Изменения объектно-ориентированной модели модулей в 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 следует рассмотреть следующие варианты:
организация методов и данных модулей в классы в качестве общих данных и методов;
перенос методов модуля в имеющиеся классы в качестве общих методов, если метод связан с классом.