6.3. Члени класів
Членами класів є поля, методи, властивості та події, оголошені в області видимості класу.
Поля
Поля представляють собою звичайні змінні, що належать класу або примірнику класу. При створенні екземпляра класу всі його поля автоматично ініціалізуються нулем, однак можлива й ініціалізація поля в момент його оголошення. У цьому випадку компілятор гарантує, що поле буде проініціалізовано до першого звернення до нього.
Приклад оголошення полів:
Dim a As Intl6 ' По умолчанию имеет модификатор Private, инициализируется нулем
Public al As String = "sample" ' Инициализация в момент объявления
Shared a2 As Double ‘Поле належить класу
Методи
Методи являють собою процедури і функції, оголошені усередині класів. Як і поля, методи можуть бути викликані для конкретного екземпляра або ж для класу.
Мова Visual Basic. NET підтримує перевантаження функцій, тобто дозволяє створювати функції з однаковим ім'ям, але з різними параметрами. Більш точно - перевантаження функції ведеться по її сигнатурі, тобто за типом параметрів. Таким чином, можна оголосити декілька функцій з однаковим ім'ям, але різними параметрами.
Visual Basic. NET дозволяє передавати параметри за посиланням і за значенням. При цьому слід мати на увазі, що передача об'єктів фактично означає передачу посилання на них, тому функція, що викликається буде мати доступ до об'єкта.
Visual Basic. NET дозволяє оголошувати параметри методів за умовчанням.
Приклад оголошення методів:
' Закрытый (Private) метод класса
Shared Function Fund(ByVal par As String) As String
Return 5
End Function
' Открытый метод с параметром по умолчанию
Public Sub Sub2(ByVal par As Integer, Optional ByVal p As Int16 = 0)
End Sub
' Перегруженная версия метода с другим типом параметра
Public Sub Sub2(ByVal par As String)
End Sub
Властивості
Властивості, як вже говорилося раніше, дозволяють виконати виклик функції, синтаксично схоже на привласнення значення змінної, або ж читання значення змінної.
Структура:
Property Name() As Type
‘Читання
Get
Return Name1
End Get
‘Запис
Set(ByVal value As Integer)
Name1 = value
End Set
End Property
Розглянемо наступний приклад:
Private humanAge As Integer
Private humanName As String
Private humanNick As String
' Возраст
Public Property Age() As Integer
Get
Return humanAge
End Get
Set(ByVal value As Integer)
If value < 0 Or value > 200 Then
Throw New ArgumentException("Age must be between 0" + _
" and 200 years")
End If
humanAge = value
End Set
End Property
' Имя
Default Public Property Name(ByVal NickName As Boolean) As String
Get
If NickName Then
Return humanNick
Else
Return humanName
End If
End Get
Set(ByVal value As String)
If NickName = True Then
humanNick = value
Else
humanName = value
End If
End Set
End Property
Також властивість можна оголошувати за замовчуванням за допомогою модифікатора Default . Це дозволить звертатися до данлї властивості, не вказуючи її імені.
Можна зробити так, щоб властивість було доступно лише для читання або тільки для запису. Для цього досить опустити один з блоків Get або set, вказавши при цьому слова Readonly або writeonly (Readonly, якщо є тільки блок Get, і writeoniy, якщо є тільки блок set).
Події
Події, як і властивості, є надбудовами, поліпшують читаємість програми і спрощують написання коду. Події дозволяють реєструвати обробник повідомлень класу для того, щоб потім отримувати повідомлення при зміні стану класу.
Для оголошення події на які будуть підписуватись класи використовується ключове слово Event:
Event EventName (Eventargumet)
Додавання обробника події відбувається за допомогою ключового слова AddHandler, видалення - RemoveHandler. На подію може підписатися довільну кількість класів. Синтаксис реєстрації обробника виглядає наступним чином:
AddHandier classname.EventName, AddressOf SubName