[ Pobierz całość w formacie PDF ]
delegatów
wcześniej dla C# tworzenia i używania delegata w VB:
Module DelegatesExample
Delegate Sub SDelegate(ByVal S As String)
Sub CallDelegate(ByVal Write As SDelegate)
System.Console.WriteLine("W CallDelegate")
Write("Witaj w delegacie")
End Sub
Sub WriteString(ByVal S As String)
System.Console.WriteLine( _
"W WriteString: {0}", S)
End Sub
Sub Main()
Dim Del As New SDelegate( _
AddressOf WriteString)
CallDelegate(Del)
End Sub
End Module
Choć napisany w VB, powyższy kod działa dokładnie tak samo jak
przykład w C#, zaprezentowany we wcześniejszej części niniejszego
rozdziału. Podobnie jak tamten przykład, i ten rozpoczyna się od zde-
finiowania SDelegate jako typ Delegate. Tak jak wcześniej, obiekty
SDelegate mogą zawierać referencje jedynie do metod, które przyj-
mują pojedynczy łańcuch znaków jako parametr. W metodzie Sub Main
z przykładu zmienna Del typu SDelegate jest deklarowana, a następ-
nie inicjalizowana tak, by zawierała referencję do procedury Write-
String (procedura VB jest metodą, która w przeciwieństwie do
funkcji nie zwraca żadnego wyniku). Osiągnięcie tego wymaga wy-
korzystania słowa kluczowego VB AddressOf przed nazwą procedury.
Sub Main wywołuje następnie CallDelegate, przekazując Del jako
parametr.
CallDelegate posiada parametr SDelegate zwany Write. Kiedy wy-
woływany jest Write, metoda w delegacie, który został przekazany do
CallDelegate, jest w rzeczywistości wywoływana. W powyższym przy-
kładzie metodą tą jest WriteString, zatem następnie wykonywany jest
124 Języki .NET
kod znajdujący się wewnątrz procedury WriteString. Wynik tego
prostego przykładu jest dokładnie taki sam jak dla wersji w C#, zapre-
zentowanej wcześniej:
W CallDelegate
W WriteString: Witaj w delegacie
Delegaty są kolejnym przykładem nowych cech, które VB zyskał dzięki
powstaniu na bazie CLR. Choć opanowanie tego języka z pewnością
wymaga wiele nauki ze strony programistów, nagrodą jest pokazny
zbiór nowych możliwości.
Zdarzenia VB Jednym z pomysłów, które nie są dla VB nowe, jest bezpośrednia ob-
bazują na
sługa zdarzeń. Jednak w przeciwieństwie do wersji Visual Basic sprzed
delegatach
.NET, obecnie zdarzenia są zbudowane na bazie delegatów. Nadal jed-
nak używanie zdarzeń w VB może być stosunkowo proste, łatwiejsze
nawet od używania ich w C#. Poniżej znajduje się przykład pokazany
wcześniej w C#, a obecnie przeniesiony na VB:
Module EventsExample
Public Class EventSource
Public Event EventX()
Sub RaiseEventX()
RaiseEvent EventX()
End Sub
End Class
Public Class EventSink
Private WithEvents Source As EventSource
Public Sub New(ByVal Es As EventSource)
Me.Source = Es
End Sub
Public Sub ReceiveEvent() _
Handles Source.EventX
System.Console.WriteLine("EventX wywołane")
End Sub
End Class
Sub Main()
Dim Source As EventSource = New EventSource()
Dim Sink As EventSink = New EventSink(Source)
Source.RaiseEventX()
End Sub
End Module
Visual Basic 125
Tak jak we wcześniejszym przykładzie, kod ten zawiera klasę Event- Zdarzenia mogą
być deklarowane
Source, klasę EventSink oraz metodę Main, która tworzy i wykorzy-
za pomocą słowa
stuje obiekt każdej z klas. Jak jednak pokazuje powyższa ilustracja,
kluczowego Event
możliwe jest wykorzystywanie zdarzeń w VB bez jawnej pracy z typami
delegatów. Zamiast tego zdarzenie może być zadeklarowane z użyciem
słowa kluczowego Event, tak jak dzieje się to w pierwszym wierszu
klasy EventSource. Nie istnieje konieczność posiadania referencji ani do
delegata zdefiniowanego w systemie, takiego jak System.EventHandler,
ani też do własnego delegata (choć oczywiście można to zrobić). Zgła-
szanie zdarzenia niekoniecznie wymaga też jawnego stosowania się do
konwencji argumentów wykorzystywanej w C#. Zamiast tego, jak po-
kazano w metodzie RaiseEventX klasy EventSource, można wykorzy-
stać słowo kluczowe RaiseEvent. Kompilator VB wypełnia pozostałe
wymagania.
Sposób dołączania obsługi zdarzeń do zdarzeń jest w VB także w pe- Obsługa zdarzeń
w VB może być
wien sposób prostszy niż w C#. W klasie EventSink z powyższego
łatwiejsza niż
przykładu słowo kluczowe WithEvents oznacza, że pole Source może
w C#
wywoływać zdarzenia. Definicja metody, która obsługuje zdarzenie,
może wykorzystywać słowo kluczowe Handles w celu oznaczenia,
[ Pobierz całość w formacie PDF ]