Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
вмип.doc
Скачиваний:
2
Добавлен:
08.05.2019
Размер:
69.63 Кб
Скачать

5. Члены классов

Членами классов являются поля, свойства, методы и события, объявленные в области видимости класса. Использование различных членов класса рассмотрим на следующем примере:

Module MyModule

Public Class Human

Private humanName As String ‘Поле Имя

Private humanAge As Integer ‘Поле возраст

‘Объявление событий, уведомляющих о смене имени и возраста

Public Event NameChanged(ByVal NewNameValue as String)

Public Event AgeChanged(ByVal NewAgeValue as Integer)

Public Property Name() As String ‘Свойство имя

Get

Return humanName

End Get

Set (ByVal Value As String)

humanName=Value

RaiseEvent NameChanged(humanName) ‘Рассылка события смены имени

End Set

End Property

Public Property Age () As Integer ‘свойство возраст

Get

Return humanAge

End Get

Set (ByVal Value Is Integer)

If Value <0 Or value >200 Then

‘Вывод сообщения об ошибке изменения возраста

Console.Writeline(“Возраст должен быть между 0 и 200 годами”)

Else

If humanAge <> Value Then

humanAge = Value

RaiseEvent AgeChanged(humanAge) ‘Рассылка события смены возраста

End If

End Set

End Property

Public Sub OutpunName()

Console.Writeline(humanName)

End Sub

End Class

Sub SomeNameChanged(ByVal name As String) ‘обработка события смены имени

Console.Writeline(“Имя изменено на ” & name)

End Sub

Sub SomeAgeChanged(ByVal Age AsInteger) ‘обработка события смены возраста

Console.Writeline(“Возраст изменен на ” & age)

End Sub

Sub Main () ‘точка входа в программу

Dim h As New Human ()

‘Регистрируем обработчики двух событий

AddHandler h.NameChanged, Adressof SomeNameChanged

AddHandler h.NameChanged, Adressof SomeAgeChanged

h.Name = “Иванов А.П.”

h.OutputName() ‘вывод имени

h.Age = 25 ‘вызывает обработку события изменения возраста

Console.Writeline(h.Age) ‘вывод возраста

h.Age = 25 ‘не вызывает обработку события, т.к. возраст не изменился

h.Age = -20

Console.Writeline(h.Age) ‘вывод возраста. Результат тот же

Console.Readline() ‘ ожидание нажатия клавиши <Enter>

End Sub

End Module

В ходе работы этой программы на экран будет выведено:

Имя изменено на Иванов А.П.

Иванов А.П.

Возраст изменен на 25

25

Возраст должен быть между 0 и 200 годами

25

Поля представляют собой обычные переменные, принадлежащие классу или экземпляру класса. При создании экземпляра класса все его поля автоматически инициализируются 0, однако возможна и инициализация поля в момент его объявления, в этом случае компилятор гарантирует, что поле будет проинициализировано до первого обращения к нему.

Методы представляют собой процедуры и функции, объявленные внутри класса. Как и поля, методы могут быть вызваны для конкретного экземпляра или же для класса. Как уже говорилось ранее, VB.Net позволяет передавать параметры по ссылке или по значению, при этом следует иметь в виду, что передача объектов фактически означает передачу ссылки на них, поэтому вызываемая функция будет иметь доступ непосредственно к объекту. VB.Net позволяет объявлять и параметры методов по умолчанию.

Свойства позволяют выполнять вызов функции синтаксически похожей на присваивание значения переменной или же на чтение значения переменной. В приведенном примере создается класс, содержащий данные о человеке, в частности, класс содержит данные об имени и возрасте человека. Эти данные спрятаны от непосредственного доступа (они объявлены с модификатором Private). Доступ к ним открывается с помощью метода OutputName() и соответствующих свойств: Name(), Age(). Причем, свойство Age позволяет не просто установить или считать возраст человека, но и провести проверку на допустимость введенного значения. Такую проверку было бы невозможно провести, ели бы возраст был просто открытой переменной.

Обычно свойства позволяют выполнять чтение и запись переменных (полей), однако можно сделать так, чтобы свойство было доступно только для чтения или только для записи. Для этого остаточно опустить один из блоков Get или Set, указав при этом слова ReadOnly (если есть только блок Get) или WriteOnly (если есть только блок Set). Например,

Public Readonly property MaxAge() Is Integer

Get

Return 200

End Get

End Property

Допустимо указание различного уровня доступа для блоков Get, Set, однако при этом уровень доступа этих методов должен быть ниже уровня доступа свойства. Иными словами, можно сделать свойство открытым, а блок Set закрытым, но не наоборот.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]