- Добавяне на методи (Methods) към класовете
Прибавянето на методи става като във VB6. Ако
искате да създадете метод Admit в клас Uchenik, кодът ще изглежда така:
Public Function Admit() As
Boolean
`добавяне на Uchenik към базата данни и т.н.
Return True
End Function
Викането от клиента е простичко, като например:
If Uchenik.Admit Then...
Но не мислете, че няма промени в методите. Има големи промени в
дефинирането на методите, но са специфични за наследяемостта (inheritance), и затова ще ги разгледаме в друга глава.
- Добавяне на събития (Events)
За да добавите събитие към вашия клас, използвайте ключова дума Event. Представете си, че искате да добавите събитие към
класа, който известява лабораторните резултати. Би трябвало да използвате такъв
код:
Event LabResult(ByVal
LabType As String)
Така се дефинира събитието. За да предизвикате събитието, трябва да
използвате инструкция RaiseEvent. Примерно,
ако установявате свойство UchenikID,
бихте могли да проверите базата данни за нови лабораторни резултати за този
ученик. Ако има нови лабораторни резултати, бихте могли да вдигнете събитие:
Dim miUchenikID As Integer
Public Property UchenikID()
As Integer
Get
Return miUchenikID
End Get
Set
miUchenikID = Value
`проверка на базата данни за този Uchenik
`ако има нови лабораторни резултати
RaiseEvent LabResult("CBC")
End Set
End Property
Ако това беше реална процедура, вместо "CBC" , в
събитието щеше да има извеждане на данните на ученика от базата данни (database).
- Обработване на събитията в клиентската програма (Client)
Имате две опции за обработване на това събитие в клиентската
програма. Първият начин е чрез ключова дума WithEvents. Вторият начин е
да използваме инструкция AddHandler . За да използвате ключова дума
WithEvents, трябва да декларирате обекта и да включите WithEvents. Ако
използвате WithEvents, декларацията не може да бъде локална за
подпрограмата (sub) или за функцията (function). По тази причина кодът
ще бъде извън всяка подпрограма или за функция, на модулно"module" ниво във вашата клиентската програма (client):
Dim WithEvents Uchenik As Uchenik
Този ред предполага, че сте импортирали пространство от имена Shkola. Отбележете, че ключова дума New не e
в инструкцията. Не може да използвате ключова дума WithEvents в
декларация вътре в процедура, нито да използвате ключова дума New в
декларацията извън процедурата, за да създадете
обект, който вдига събитие. По тази причина след като сте декларирали
обект чрез WithEvents извън всяка процедура, трябва да използвате New
вътре в процедура:
Dim WithEvents Uchenik As Uchenik
...
Public Sub Foo()
Uchenik = New cUchenik()
...
End Sub
Сега, за да прибавите събитийна процедура, кликнете върху името на класа
Uchenik в падащия списък в горния
край на прозореца за кода. В комбобокса MethodName , изберете от падащия списък LabResult. Така се създава събитийна процедура Uchenik_LabResult:
Public Sub Uchenik_LabResult(ByVal
LabType As System.String)
Handles Uchenik.LabResult
...
End Sub
Вторият начин да се обработва събитие, е да се използва инструкция AddHandler. Вие трябва да имате
подпрограма (sub) или функция (function), която да действа като
събитийна процедура. Следващата стъпка е да използвате инструкция AddHandler , за да съедините конкретното
събитие от обекта с процедурата, която създавате за обработка на събитието.
Примерно, да допуснем, че искате да създадете подпрограма за обработване
на събитие, наречена LabHandler. Тази
процедура ще се дефинира като стандартна подпрограма (sub). Трябва да подадете като аргументи, всички параметри,
дефинирани в събитието LabResult. Тук,
събитието наречено LabResult подава
параметър lab от тип string. По тази причина, вашата процедура
трябва да приема стринг като аргумент.
Когато използвате AddHandler, вие
спесифицирате името на събитието в класа Uchenik
, което ще обработвате (LabResult), но
трябва и да го свържете с процедурата; в този случай, LabHandler. Вие даже не го свързвате директно с LabHandler; вместо
това го свързвате с адреса на LabHandler,
използвайки оператор AddressOf . Кодът
за използване на AddHandler изглежда
така:
Protected Sub
button1_Click(ByVal sender As Object, _
ByVal e As
System.EventArgs) Handles button1.Click
Dim Uchenik As New Uchenik()
AddHandler Uchenik.LabResult,
AddressOf Me.LabHandler
...
End Sub
Private Sub
LabHandler(ByVal LabType As String)
...
End Sub
Забележете, че в AddHandler, вие
се свързвате с обектната променлива (Uchenik)
и името на събитието (LabResult) , използвайки синтаксис Object.Event. Предимството на този способ е, че една процедура обработва
много събития, даже и те да са от различни компоненти. Вие можете да прихващате
събития в обекти, които сте създали по време на изпълнение (runtime). Можете
например да получавате колекция от обекти и да обработвате техните събития чрез
тази процедура.
- Кодът "Finalen"
Ето окончателния "Finalen"код, уверете се, че компилацията работи. Код за проект Shkola:
Public Class Uchenik
Dim msFirstName As String
Dim KlasDascaliList As New
Collection()
Dim miUchenikID As Integer
Public Property FirstName()
As String
Get
Return msFirstName
End Get
Set(ByVal Value As String)
msFirstName = Value
End Set
End Property
Default Public ReadOnly
Property KlasDascali _
(ByVal iIndex As Integer)
As KlasDascal
Get
Return CType(KlasDascaliList(iIndex),
KlasDascal)
End Get
End Property
Public Function Admit() As
Boolean
`добавяне на Uchenik към базата данни и т.н.
Return True
End Function
Event LabResult(ByVal
LabType As String)
Public Property UchenikID()
As Integer
Get
Return miUchenikID
End Get
Set(ByVal Value As Integer)
miUchenikID = Value
`проверка на базата данни за този Uchenik
`ако има нови лабораторни резултати
RaiseEvent LabResult("CBC")
End Set
End Property
End Class
Public Class KlasDascal
Dim miPhysID As Integer
Public Property KlasDascalID()
As Integer
Get
Return miPhysID
End Get
Set(ByVal Value As Integer)
miPhysID = Value
End Set
End Property
Public ReadOnly Property Vuzrast()
As Single
Get
`get Date of Birth (DOB)- получаване на дата на
раждане
`изчисляване на Vuzrast от DOB
`връщане на Vuzrast
End Get
End Property
End Class

Фигура 67 Опция Solutions Configuration в лентата с инструменти.