Общие члены в Visual Basic
Обновлен: Ноябрь 2007
Общие члены являются свойствами, процедурами и полями, общими для всех экземпляров класса или структуры. В некоторых языках программирования такие элементы называются статическими членами.
Общие поля и свойства
Общие поля и свойства используются для данных, являющихся частью класса, но не характерных для какого-либо экземпляра класса. При изменении значения общего поля и свойства, изменяется значение, связанное с классом и всеми экземплярами класса.
С другой стороны изменение значения поля или свойства, не являющегося общим и связанного с любым одним экземпляром, не влияет на значение этого поля или свойства в других экземплярах класса. Обычные поля и свойства существуют независимо для каждого экземпляра класса.
В этом случае общие поля и свойства ведут себя как глобальные переменные, к которым можно получить доступ только из экземпляров класса или с помощью уточнения имени класса. Для достижения такого эффекта без общих полей и свойств потребовалось бы использование переменных уровня модуля. Однако переменные модульного уровня могут затруднить понимание и эксплуатацию классов. Более того, такое использование переменных модульного уровня нарушает концепцию инкапсуляции, представленную классами.
Общие процедуры
Общие процедуры являются методами класса, не связанными с определенным экземпляром класса. Например, метод Cos, определенный внутри класса Math, является общим методом. Можно вызвать общую процедуру как метод объекта или непосредственно из класса.
Общие процедуры и свойства не имеют доступа к экземплярам класса. Поэтому в общих методах допускаются только квалифицированные ссылки на неразделяемые данные членов.
Примечание. |
---|
Рекомендуется не обращаться к общему члену через экземпляр класса. Причиной этого является то, что компилятор игнорирует квалификацию общего члена и обрабатывает его так, как будто к нему производится доступ непосредственно через класс. В некоторых случаях, когда планируется запуск некоторого кода для квалифицированного объекта, компилятор Visual Basic создает предупреждение о доступе к общему члену через экземпляр класса. Технология IntelliSense не отображает общие члены для экземпляра класса. |
Пример. Общие члены
В следующем примере для демонстрации способа использования общих членов в программе создается 2 поля экземпляра, общее поле и общий метод:
Public Class Item
Public Shared Count As Integer = 1
Public Shared Sub ShareMethod()
MsgBox("Current value of Count: " & Count)
End Sub
Public Sub New(ByVal Name As String)
' Use Count to initialize SerialNumber.
Me.SerialNumber = Count
Me.Name = Name
' Increment the shared variable
Count += 1
End Sub
Public SerialNumber As Integer
Public Name As String
Public Sub InstanceMethod()
MsgBox("Information in the first object: " & _
Me.SerialNumber & vbTab & Me.Name)
End Sub
End Class
Sub TestShared()
' Create two instances of the class.
Dim part1 As New Item("keyboard")
Dim part2 As New Item("monitor")
part1.InstanceMethod()
part2.InstanceMethod()
Item.ShareMethod()
End Sub
При выполнении процедуры TestShared создаются два экземпляра класса. Конструктор использует общее поле Count для инициализации поля экземпляра SerialNumber, а затем увеличивает Count. Этот метод автоматически предоставляет каждому экземпляру уникальный серийный номер.
После создания двух экземпляров, метод экземпляра InstanceMethod вызывается для обоих объектов, а также вызывается общий метод ShareMethod. В результате:
Information in the first object: 1 keyboard
Information in the second object: 2 monitor
Current value of the shared Count field: 3