VB.NET
VB.NET
Maria DEMS
Maria DEMS
2
Podstawy Visual
Basic.NET
• Visual
Basic
.NET
jest
jednym
z
podstawowych
języków
programowania
stosowanych na platformie .NET
• Deklaracja i inicjacja zmiennej odbywa się za
pomocą pojedynczej instrukcji.
Dim m As String=”Mama”
• Tworzenie
nowych
obiektów
wymaga
zdefiniowania klasy.
• Klasa jest typem obiektu, definiującym
właściwości i metody egzemplarzy obiektów.
• Deklaracja zmiennej obiektu połączenia ma
postać:
Dim conn = New SqlConnection()
3
Podstawy Visual
Basic.NET
• Do tworzenia i inicjalizacji obiektów stosowane są
konstruktory
parametryzowane
(akceptujące
argumenty).
Dim command = New SqlCommand(strSelect,
conn)
• Tablica
to grupa zmiennych tego samego typu
zajmująca ciągły obszar pamięci, do których
można odwoływać się pojedynczo za pomocą
indeksów.
Dim tab(5) As String
• Tablice mogą mieć dynamicznie zmieniany
rozmiar za pomocą instrukcji
ReDim
.
• Chcąc zachować wszystkie dane przechowywane
w tablicy należy użyć słowa kluczowego
Preserve
.
4
Operatory w Visual
Basic.NET
• Operatory VB.NET
Funkcja
Operator
Podnoszenie do potęgi
^
Negacja
~
Mnożenie, dzielenie
*, \
Dzielenie całkowite
/
Modulo (6 mod 4 =2)
Mod
Dodawanie, odejmowanie
+, -
Operatory logiczne
NOT, OR, AND, XOR
Połączenie
&, + (zmienne łańcuchowe)
Równe, różne, mniejsze, większe
=, <>, <,>
Mniejsze lub równe, większe lub równe
<=, >=
Przypisanie
=, ^=, *=, /=, \=, +=, _=, &=
5
Konwersja typów w
VB.NET
• W
VB.NET
argumentem
konwersji
(rzutowania) typu jest typ Object
Funkcja
Opis
CBool
Konwersja na Boolean
CByte
Konwersja na Byte
CChar
Konwersja na Char
CDec
Konwersja na Decimal
CDate
Konwersja na DateTime
CDbl
Konwersja na Double
CInt
Konwersja na Integer
CLng
Konwersja na Long
CSng
Konwersja na Single
CStr
Konwersja na String
Cshort
Konwersja na Short
CObj
Konwersja na Object
Funkcja
Opis
CBool
Konwersja na Boolean
CByte
Konwersja na Byte
CChar
Konwersja na Char
CDec
Konwersja na Decimal
CDate
Konwersja na DateTime
CDbl
Konwersja na Double
CInt
Konwersja na Integer
CLng
Konwersja na Long
CSng
Konwersja na Single
CStr
Konwersja na String
Cshort
Konwersja na Short
CObj
Konwersja na Object
6
Konwersja typów w
VB.NET
•
Konwersja niektórych typów powoduje utratę
części informacji, na przykład konwertując daną
zmiennoprzecinkową na typ całkowity tracona
jest część dziesiętna.
•
Przykład konwersji pobranej wartości z bazy na
String i przypisanie do elementu tabeli.
dr(4) = CStr(reader.GetValue(4))
•
W języku VB.NET dla wielu typów danych istnieją
metody umożliwiające konwersję na inny typ.
Nazwa takiej metody zawsze zaczyna się od
To
, a
kończy nazwą docelowego typu danych. Przykład
konwersji dzisiejszej daty systemowej na typ
String:
Dim
data1
As
String
=
DateTime.Today.Year.ToString
7
Procedury i funkcje w
VB.NET
• W VB.NET program może zawierać procedury,
funkcje i zdarzenia (np. OnClick, Page_Load,
OnSelectedIndexChanged).
• Procedura definiowana jest słowem kluczowym
Sub
Nazwa_procedury (lista_argumentów)
...
End Sub
.
• Zmienna tymczasowa zdefiniowana w bloku
procedury ma zasięg tylko tej procedury.
• Z wyjątkiem zmiennej
Static
, zmienne w bloku
procedury nie przechowują swojej wartości
pomiędzy kolejnymi wywołaniami procedury.
8
Procedury i funkcje w
VB.NET
• Funkcja, w odróżnieniu od procedury, zwraca
wartość do programu głównego. Wykorzystuje
się do tego celu instrukcje Return umieszczaną
w wewnątrz funkcji.
• Deklaracji funkcji ma postać:
Function
Nazwa_funkcji
(argumenty)
As
typ_wyniku
...
End Function
• Wywołanie funkcji może nastąpić w dowolnym
miejscu programu, poprzez przypisanie nazwy
funkcji do zmiennej.
9
Procedury i funkcje w
VB.NET
• Procedury i funkcje zazwyczaj wymagają
przekazania dodatkowych informacji w postaci
argumentów.
• Argumenty przekazywane są przez wartość
ByVal
lub przez referencję
ByRef
(opcja
domyślna).
• W definicji wywołania procedury lub funkcji
można określić również parametry opcjonalne za
pomocą słowa kluczowego
Optional
, które mogą
przyjmować wartości domyślne.
• Parametry opcjonalne muszą występować jako
ostatnie na liści argumentów.
• Przy wywoływaniu procedury lub funkcji, która
posiada
parametry
opcjonalne
można
je
pominąć, stawiając w to miejsce przecinek.
10
Procedury i funkcje w
VB.NET
• Przykład
deklaracji
procedury
z
parametrem opcjonalnym.
Sub pro_reader(ByVal sel As String, ByVal
obj As Object, ByVal typ As Int16, Optional
ByVal parametr As String = "")
• Przykład wywołania tej procedury. Parametr
opcjonalny jest określony i jest ostatnim na
liście.
pro_reader("pro_program",
program,
2,
miejsce)
11
Zakres zmiennych w
VB.NET
• Na zakres zmiennej mają wpływ trzy czynniki:
– miejsce deklarowania zmiennej (blok, procedura,
funkcja, moduł, klasa, struktura, przestrzeń
nazw),
– modyfikator użyty przy deklaracji (Dim, Private,
Friend, Public),
– zakres modułu, klasy lub struktury w którym
została zadeklarowana zmienna.
• Czas życia zmiennej jest wyznaczony przez jej
zakres.
• Zmienne, których czas życia jest większy niż jej
zakres nazywane są zmiennymi statycznymi (Static)
12
Instrukcj
e
sterując
e w
VB.NET
If TestPorównujący Then
Jedna lub wiele instrukcji
End If
If TestPorównujący Then
Instrukcja
If TestPorównujący Then
Jedna lub wiele instrukcji
Else
Jedna lub wiele instrukcji
End If
Instrukcje zagnieżdżone
If TestPorównujący Then
Jedna lub wiele instrukcji
Else
If TestPorównujący Then
Jedna lub wiele instrukcji
Else
Jedna lub wiele
instrukcji
Endif
End If
Instrukcje
warunkowe
13
W przypadku instrukcji zagnieżdżonych lepiej
używać struktury:
Instrukcja może zawierać dowolną liczbę
klauzul ElseIf. Użycie klauzuli Else jest w tym
przypadku opcjonalne
Warunki sprawdzane są po kolei, aż do
napotkania pierwszego prawdziwego, dlatego
istotna jest kolejność wyrażeń warunkowych.
If warunek1 Then
instrukcje, gdy warunek1 jest
prawdziwy
ElseIf warunek2 Then
instrukcje, gdy warunek2 jest
prawdziwy
ElseIf warunek3 Then
instrukcje, gdy warunek3 jest
prawdziwy
........
Else
instrukcje, gdy wszystkie warunki
są fałszywe
End If
14
Warunki Case sprawdzane są po kolei; po
pierwszym spełnieniu warunku Case i wykonaniu
związanych z nim instrukcji następuje wyjście z
konstrukcji.
Select Case wyrażenie
Case wartość (lub wartości oddzielone
przecinkami)
Jedna lub wiele
instrukcji
Case Is relacja
Jedna lub wiele instrukcji
Case wyrażenie1 To wyrażenie2
Jedna lub wiele instrukcji
Case Else
Jedna lub wiele instrukcji
End Select
Instrukcja Select Case
15
Pętle w VB.NET
Pętle
są zbiorem instrukcji, które należy
wykonać wielokrotnie.
Rozróżnia się dwie podstawowe struktury
pętli:
Do ... Loop
For ... Next
Pętla Do ... Loop może mieć struktury:
Do
If warunek Then
Exit Do
instrukcje
Loop
16
Pętla Do... Loop w
VB.NET
• Wyjście z pętli następuje w chwili, gdy
wpisany warunek
przyjmuje wartość
True
.
Do
Until
warunek
pętli
instrukcje
Loop
Do
Jedna lub wiele
instrukcji
Loop
Until
warunek pętli
17
Pętla Do... Loop w
VB.NET
Pętla Do While...Loop to pętla, w której
wpisane instrukcje powtarzane są dopóki
dany warunek
ma wartość
True
.
Można przerwać pętlę wcześniej przy
pomocy komendy
Exit Do
Do
While
warunek
pętli
Jedna lub wiele
instrukcji
Loop
Do
Jedna lub wiele
instrukcji
Loop
While
warunek
pętli
18
Pętla For... Next w
VB.NET
Umieszczanie nazwy zmiennej licznikowej
po instrukcji Next nie jest konieczne.
Można przerwać pętlę wcześniej przy
pomocy komendy
Exit For
For
ZmiennaLicznik = WarPoczatkowa
To
WarKoncowa
[ Step WarKroku]
Jedna lub wiele instrukcji
Next
Zmienna Licznik
19
Pętla For Each... Next w
VB.NET
Pętla
For Each ... Next
pozwala wykonać
fragment
kodu
dla
każdego
obiektu
należącego do tablicy lub kolekcji obiektów.
Kolekcją
nazywamy uporządkowany zbiór
powiązanych ze sobą obiektów, do którego
możemy odwoływać się jak do pojedynczego
obiektu.
For Each element In
grupa
[instrukcje]
[Exit For]
[instrukcje]
Next [element]
20
Kolekcje w VB.NET
• Kolekcja posiada atrybut Count, którego
wartość odpowiada liczbie elementów kolekcji.
• Kolekcja posiada metody, pozwalające dodać
oraz usunąć obiekt z kolekcji:
– metoda Add( ) - dodanie obiektu do
kolekcji,
– metoda Remove ( ) - usuwanie obiektu z
kolekcji,
• Możemy tworzyć własne kolekcje (obiekty typu
Collection
) oraz dodawać i usuwać obiekty do
kolekcji
predefiniowanych
(np..
kolekcji
Items
).
21
Zdarzenia w VB.NET
• Zdarzenia są to działania jakie mogą
wystąpić w danej aplikacji, po której
trzeba podjąć jakąś akcję.
• Każde zdarzenie powinno zawierać
procedurę obsługi tego zdarzenia (event
handler).
• Składnia procedury zdarzeniowej jest
identyczna jak w przypadku normalnych
procedur, ale różnica pojawia się w
liście parametrów.
22
Zdarzenia w VB.NET
• Przykład deklaracji procedury wyszukiwania
wycieczek
odpowiadającej
na
zdarzenie
kliknięcia przycisku.
Sub znajdz_wycieczke(ByVal obj As Object, ByVal
e As EventArgs) Handles btznajdz.Click
• Handles
określa do jakiego obiektu i zdarzenia
odnosi się ta procedura.
• Gdy kliknięty zostanie przycisk
btznajdz
,
wywoływana jest procedura
znajdz_wycieczke
.
• Argument
obj
jest obiektem, który wywołał
zdarzenie, natomiast
EventArgs
zawiera dane
właściwe dla zdarzenia, które zaszło.
23
Obsługa błedów w
VB.NET
• Do obsługi błędów stosowane są instrukcje
try
i
catch
• Użycie instrukcji
try
informuje, że pewien blok
kodu należy wykonać próbnie. W takim
przypadku, jeśli jakikolwiek fragment kodu
zapisany wewnątrz tej instrukcji spowoduje
zgłoszenie błędu, to nie doprowadzi on do
przerwania wykonywania aplikacji i wyświetlenia
komunikatu,
lecz
umożliwi
rozwiązanie
zaistniałego problemu.
• Instrukcja
try
oraz inne instrukcje używane wraz
z nią są wspólnie nazywane
strukturalną obsługą
wyjątków
.
24
Obsługa błedów w
VB.NET
• Cała składnia składa się z instrukcji
try
, po
której umieszczany jest chroniony blok kodu.
Następnie umieszczane są instrukcje
catch
i
finally
.
Try
instrukcje kodu...
Catch
obsługa wyjątku
End try
• Zgłaszanie
wyjątków
pozwala
na
przechwytywanie błędów zanim doprowadzą
one do przerwania wykonywania aplikacji.
25
Visual Basic.NET
Visual Basic.NET wprowadza zmiany w stosunku
do VB w następujących dziedzinach:
nowych możliwości programowania
obiektowego,
większych możliwości tworzenia interfejsów
www,
strukturalną obsługę języka i tworzenie wątków,
dostosowanie do wspólnej specyfikacji CLS oraz
wspólnego systemu typów CTS,
eliminację przestarzałych elementów składni
starszych wersji VB
Visual Basic.NET wprowadza zmiany w stosunku
do VB w następujących dziedzinach:
nowych możliwości programowania
obiektowego,
większych możliwości tworzenia interfejsów
www,
strukturalną obsługę języka i tworzenie wątków,
dostosowanie do wspólnej specyfikacji CLS oraz
wspólnego systemu typów CTS,
eliminację przestarzałych elementów składni
starszych wersji VB
26
Nowe możliwości
programowania obiektowego
VB.NET
Nowych możliwości programowania obiektowego
w VB.NET obejmują:
pełne dziedziczenie klas i polimorfizm
parametryzowane
konstruktory
-
jest
to
możliwość przekazywania informacji do klasy w
chwili tworzenia jej instancji, w celu ustawienia
jej właściwości lub modyfikacji metod,
przesłanianie
elementów
umożliwiające
modyfikowanie właściwości i metod klasy
bazowej w podklasach,
przeładowywanie nazw funkcji,
współdzielenie właściwości lub metod przez
wszystkie instancje danej klasy.
27
Przystosowanie projektów
do VB.NET
28
Tworzenie projektu w
środowisku VB.NET
Tworzenie projektu w VB.NET polega na
zbudowaniu diagramu klas projektu, np. z
wykorzystaniem
języka
UML
(Unified
Modeling Language)
Diagram
klas
pozwala
opisać
funkcjonalność różnych klas i podzielić
program na poszczególne zadania oraz
zawiera
opis
użytkowników
programu
(aktorów)
Dodaj towar
Usuń towar
Pobierz dane
z bazy
Użytkow
nik
Baza
danych
29
Tworzenie projektu w
środowisku VB.NET
Diagram klas należy zamienić na projekt klas,
a więc określić ich atrybuty, metody i
zdarzenia; przykładowo:
definiujemy klasę
Użytkownik
o atrybutach:
nazwa
,
hasło
i metodzie
autoryzuj,
definiujemy klasę
Towar
o atrybutach:
numer
,
nazwa
,
dostawca, cena
i metodach
dodaj, usuń, pobierz, sprawdź
Projekt
klas
opisuje
jedynie
ich
funkcjonalność (ich interfejs) a nie ich
wewnętrzną budowę.
Kolejnym etapem jest zdefiniowanie
klas
najniższego poziomu
30
Tworzenie projektu w
środowisku VB.NET
Klasy dodaje się albo w oknie Solution Explorera
albo w menu
Projekt
opcją
Add Class
..
zostanie wyświetlone okno dialogowe
Add New
Item
w okienku
Templates
należy wybrać
Class
, w polu
Name
wpisać jej nazwę i uruchomić opcje
Open
zostanie
wyświetlone
okno
edytora
kodu
zawierające deklarację klasy:
Public Class Nazwa_klasy
..................
End Class
W ciele klasy należy zdefiniować jej atrybuty
(zmienne), metody i zdarzenia.
31
Tworzenie projektu w
środowisku VB.NET
Właściwości w Visual Basic.NET są tworzone w
definicjach klas za pomocą słowa kluczowego
Property
właściwości „tylko do odczytu” (read-only)
posiadają funkcjonalność
Get
,
właściwości „tylko do zapisu” (write-only)
posiadają funkcjonalność
Set
, np.:
Public Class KomunikatMsg
Public Class KomunikatMsg
Private
strKomunikat as String
Public Property MsgText( ) As String
Get
MsgText = strKomunikat
End Get
32
Tworzenie projektu w
środowisku VB.NET
Set(ByVal Value As String)
strKomunikat = Value
End Set
End Property
End
Class
Class
W celu odczytania wartości
strKomunikat
z
obiektu
MyKomunikat
klasy
KomunikatMsg
KomunikatMsg
wykorzystujemy właściwość MsgText( )
strValue = MyKomunikat.MsgText( )
W celu przypisania do obiektu
MyKomunikat
określonej wartości
wykorzystujemy również
właściwość MsgText( )
MyKomunikat.MsgText( ) = „Witaj”
33
Tworzenie projektu w
środowisku VB.NET
Polecenia Get i Set pozwalają odczytywać i
ustawiać wartości pól prywatnych
Zapisywanie stanu obiektu do pliku tekstowego i
jego
odczytywanie
jest
określane
słowem
kluczowym
persistence.
Obiekty z modyfikatorem
persistence
są obiektami
trwałymi; ich stan jest aktualną wartością tego
obiektu.
Visual Basic.NET obsługuje funkcje dziedziczenia.
Klasa pochodna wskazuje używaną przez siebie
klasę bazową słowem
Inherits
Inherits
Public Class Komunikat_1Msg
Public Class Komunikat_1Msg
Inherits
Inherits
KomunikatMsg
KomunikatMsg
End Class
End Class
34
Tworzenie projektu w
środowisku VB.NET
Do zapisywania danych klasy do pliku służy metoda
Write( )
Public Function Write ( ) As Boolean
Public Function Write ( ) As Boolean
Dim MsgFile As Stream
Dim MsgFile As Stream
Write = True
Write = True
MsgFile = File.Open(„msg.bin”,
MsgFile = File.Open(„msg.bin”,
FileMode.Create)
FileMode.Create)
MsgFile.Close( )
MsgFile.Close( ) //zamknięcie utworzonego pliku
End Function
End Function
Do automatycznego zapisywania stanu obiektu przed
jego zniknięciem służy metoda
Dispose ( )
Public Sub Dispose ( )
Public Sub Dispose ( )
Write ( )
Write ( )
End Sub
End Sub
35
Tworzenie projektu w
środowisku VB.NET
Do odczytywania stanu obiektu w chwili tworzenia
nowej jego instancji służy metoda
Read( )
Public Function Read ( ) As Boolean
Public Function Read ( ) As Boolean
Dim MsgFile As Stream
Dim MsgFile As Stream
Read = True
Read = True
MsgFile = File.Open(„msg.bin”, FileMode.Open)
MsgFile = File.Open(„msg.bin”, FileMode.Open)
MsgFile.Close( )
MsgFile.Close( ) //zamknięcie otwartego do odczytu
pliku
End Function
End Function
Do tworzenia nowej instancji klasy
Komunikat_1Msg
wykorzystywana jest metoda
New ( )
Jeśli zdefiniujemy metodę
New ( )
i z jej wnętrza
wywołamy metodę
Read ( )
to obiekt odczyta zapisany
stan obiektu (o ile zapis został wcześniej dokonany).
36
Dziedziczenie w VB.NET
Definicja metody
New ( )
ma postać:
Public Sub New ( )
Public Sub New ( )
MyBase
MyBase
.New( )
.New( )
...................
...................
Read ( )
Read ( )
End Sub
End Sub
Wewnątrz podklasy odwołanie do klasy
bazowej realizowane jest przy użyciu słowa
kluczowego
MyBase
MyBase
Formularz Windows jest modułem klas
dziedziczącym cechy formularza z klasy
bazowej
System.Windows.Forms
System.Windows.Forms
platformy .NET lub z innego formularza.
37
Budowa obiektu MsgReader
Definicja klasy
MsgReader
ma postać:
Class MsgReader
Class MsgReader
Inherits System.Windows.Forms.Form
Inherits System.Windows.Forms.Form
Public Sub New( )
Public Sub New( )
MyBase.New()
MyBase.New() //tworzenie obiektu
formularza
MsgReader = Me
MsgReader = Me
End Sub
End Sub
End Class
End Class
Utworzony formularz
MsgReader
MsgReader
służy do
przeglądania
i
edycji
wiadomości
przechowywanych
w
obiekcie
klasy
Komunikat_1Msg
38
Tworzenie okna formularza
Utworzony
formularz
MsgReader
MsgReader
jest
formularzem pustym, więc należy dodać do
niego kontrolki.
Wszystkie kontrolki znajdujące się wewnątrz
obiektu okno formularz deklarowane są jako
pola
inicjalizowane
metodą
InitializeComponent ( ).
Po
dodaniu
kontrolki
metodą
New
automatycznie ustawiane są właściwości
niezbędne do określenia charakterystyki i
pozycji kontrolki.
Kontrolki ukazujące się w oknie formularza
należą do zbioru kontrolek dodanego metodą
Add( )
oraz zdefiniowane w klasie bazowej.
39
Tworzenie okna formularza
Ponieważ klasa
MsgReader
dziedziczy z klasy
bazowej
System.Windows.Forms.Form,
dostaje
automatyczny dostęp do zbioru kontrolek (controls
collection)
Do przeglądania i edycji tekstu wykorzystywana
jest kontrolka wieloliniowego edytora (
TextBox
control)
W celu powiązania formularza
MsgReader
z
obiektem klasy
Komunikat_1Msg
należy do metody
New(
)
klasy
MsgReader
dodać
parametr
zawierający
referencję
do
obiektu
klasy
Komunikat_1Msg;
parametr ten jest zapisywany do
pola klasy
MsgReader
i może być używany
wewnątrz obiektu.
40
Public Class FormularzVB
Public Class FormularzVB
Inherits System.Windows.Forms.Form
Inherits System.Windows.Forms.Form
........................................
........................................
Private Sub InitializeComponent()
Private Sub InitializeComponent()
Me.TextBox = New
Me.TextBox = New
System.Windows.Forms.TextBox()
System.Windows.Forms.TextBox()
Me.TextBox.AcceptsReturn = True
Me.TextBox.AcceptsReturn = True
Me.TextBox.Multiline = True
Me.TextBox.Multiline = True
Me.TextBox.Name = "TextBox"
Me.TextBox.Name = "TextBox"
...................
...................
Me.TextBox.Text = ""
Me.TextBox.Text = ""
Me.Controls.AddRange(New
Me.Controls.AddRange(New
System.Windows.Forms.Control() {Me.TextBox})
System.Windows.Forms.Control() {Me.TextBox})
Me.Text = "Zadanie"
Me.Text = "Zadanie"
End Sub
End Sub
End Class
End Class
41
Wyświetlanie pola
tekstowego
Private Msg AS Komunikat_1Msg
Private Msg AS Komunikat_1Msg
Public Sub New(ByRef Msg AS Komunikat_1Msg)
Public Sub New(ByRef Msg AS Komunikat_1Msg)
MyBase.New()
MyBase.New() //tworzenie obiektu formularza
MsgReader = Me
MsgReader = Me
Me.Msg = Msg
Me.Msg = Msg //przypisanie zmiennej wewnątrz
klasy
// MsgReader referencji do zmiennej Msg
klasy
Komunikat_1Msg
InitializeComponent( )
InitializeComponent( )
TextBox.Text = Msg.MsgText( )
TextBox.Text = Msg.MsgText( )
End Sub
End Sub
Do wyświetlenia zawartości pola tekstowego
wykorzystujemy właściwość
Text
kontrolki
TextBox
, zainicjalizowanej wartością
MsgText
obiektu klasy
Komunikat_1Msg
42
Zdarzenia OK i Anuluj
Zdarzenia
obsługują
procedury
zdarzeniowe zawarte w klasie MsgReader
Zdarzenia obsługują procedury zdarzeniowe zawarte w
klasie MsgReader
Protected Sub
Protected Sub
btnOK_Click
btnOK_Click
(ByVal sender As Object, _
(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles btnOK.Click
ByVal e As System.EventArgs) Handles btnOK.Click
Msg.MsgText = TextBox.Text()
Msg.MsgText = TextBox.Text() // zapisanie wiadomości
..............................
..............................
Close()
Close()
// zamknięcie formularza i jego zasobów
End Sub
End Sub
Protected Sub btnCancel_Click(ByVal sender As
Protected Sub btnCancel_Click(ByVal sender As
Object, _
Object, _
ByVal e As System.EventArgs) Handles
ByVal e As System.EventArgs) Handles
btnCancel.Click
btnCancel.Click
.............................
.............................
End Sub
End Sub
43
Uruchamianie aplikacji w
Visual Basic.NET
Domyślnie
aplikacje
Visual
Basic.NET
uruchamiane są przez wywołanie instancji
domyślnego formularza (np.
MsgReader)
MsgReader)
.
Jest to stosowane wtedy, gdy aplikacja całkowicie
opiera się na formularzu głównym oraz gdy
metoda New( ) nie pobiera żadnych argumentów.
W innych przypadkach punktem startowym jest
metoda
main( ),
zawarta w module
Main
, w
postaci:
Sub main ( )
Sub main ( )
System.Windows.Forms.Application.Run
System.Windows.Forms.Application.Run
(New MsgReader(New
(New MsgReader(New Komunikat_1Msg
( ) ) )
( ) ) )
End Sub
End Sub
44
Dziedziczenie w VB.NET
Kod tworzenia formularza będzie miał
postać:
Tworzenie następnego formularza może
bazować na kolejnej klasie pochodnej:
Imports System.ComponentModel
Imports System.ComponentModel
Imports System.Drawing
Imports System.Drawing
’ dziedziczona
z klasy
Import System.WinForms
Import System.WinForms
‘
System.WinForms.Form
Public Class Form1
Public Class Form1
Inherits System.WinForms.Form
Inherits System.WinForms.Form
Imports System.ComponentModel
Imports System.ComponentModel
Imports System.Drawing
Imports System.Drawing
’ dziedziczona
z klasy
Import System.WinForms
Import System.WinForms
‘
System.WinForms.Form
Public Class Form1
Public Class Form1
Inherits System.WinForms.Form
Inherits System.WinForms.Form
Imports System.ComponentModel
Imports System.ComponentModel
Imports System.Drawing
Imports System.Drawing
Import System.WinForms
Import System.WinForms
Public Class Form2
Public Class Form2
Inherits Form1
Inherits Form1
Imports System.ComponentModel
Imports System.ComponentModel
Imports System.Drawing
Imports System.Drawing
Import System.WinForms
Import System.WinForms
Public Class Form2
Public Class Form2
Inherits Form1
Inherits Form1
45
Dziedziczenie w VB.NET
Utworzony formularz będący instancją klasy
Form2 może posiadać dwa zestawy kontrolek:
utworzonych za pomocą modułu Visual
Designer
oddziedziczonych z formularza Form1.
Dziedziczony jest zarówno wygląd kontrolek
jak i kod obsługujący kontrolki.
Dziedziczenie jest możliwe wszystkich klas
utworzonych
w
jakimkolwiek
języku
platformy .NET.
W VB. NET nie występuje dziedziczenie
wielokrotne, dostępne w C++ i niektórych
innych językach obiektowych.
46
Parametryzowane
konstruktory
w VB.NET
Podczas tworzenia instancji obiektu mogą
być do niego przekazane parametry, które
natychmiast modyfikują zachowanie się tego
obiektu.
W poprzednich wersjach VB zamiast
konstruktorów stosowane były zdarzenia
zachodzące podczas tworzenia instancji,
takie jak:
Class Initialize
dla klas,
Form Load
dla formularzy, do których nie
mogły
być
przekazywane
żadne
parametry.
Przykładowy kod w VB miałby więc postać:
Dim objNowiPracownicy As New
Dim objNowiPracownicy As New
Pracownicy
Pracownicy
objNowiPracownicy.PracownicyID =
objNowiPracownicy.PracownicyID =
(”125-55-2345”)
(”125-55-2345”)
Dim objNowiPracownicy As New
Dim objNowiPracownicy As New
Pracownicy
Pracownicy
objNowiPracownicy.PracownicyID =
objNowiPracownicy.PracownicyID =
(”125-55-2345”)
(”125-55-2345”)
47
Parametryzowane
konstruktory
w VB.NET
Przykładowy kod w VB.NET będzie miał postać:
Konstruktor w VB.NET nie jest zdarzeniem, ale
procedurą, więc jest określany poprzez instrukcję
Sub New,
Sub New,
ma zakres
Public
i może mieć
argumenty.
Fragment kodu konstruktora ma przykładową
postać:
W tym przypadku przy tworzeniu każdej instancji
klasy wymagany jest argument.
Dim objNowiPracownicy As New Pracownicy
Dim objNowiPracownicy As New Pracownicy
(”125-55-2345”)
(”125-55-2345”)
Dim objNowiPracownicy As New Pracownicy
Dim objNowiPracownicy As New Pracownicy
(”125-55-2345”)
(”125-55-2345”)
Sub New (sPracownicyID AS String)
Sub New (sPracownicyID AS String)
kod konstruktora
Sub New (sPracownicyID AS String)
Sub New (sPracownicyID AS String)
kod konstruktora
48
Parametryzowane
konstruktory
w VB.NET
Konstruktory
uruchamiane są
automatycznie
podczas tworzenia instancji.
Wykorzystanie
konstruktora
do
tworzenie
nagłówka formularza Form2
Tworzymy nowy projekt formularza Windows w
środowisku VB. NET -
Form1
i wstawiamy do
niego przycisk uruchamiający formularz
Form2,
Wstawiamy drugi formularz (domyślnie
Form2
)
opcją
Project_SYMBOL|Add Windows Form
Dla tego formularza zostanie automatycznie
utworzony konstruktor o nazwie
Sub New
w
module
Class
formularza.
49
Parametryzowane
konstruktory
w VB.NET
Domyślny konstruktor ma postać:
Zmieniamy kod konstruktora następująco:
Public Sub New ( )
Public Sub New ( )
MyBase.New
MyBase.New
Form2 = Me
Form2 = Me
End Sub
End Sub
Public Sub New ( )
Public Sub New ( )
MyBase.New
MyBase.New
Form2 = Me
Form2 = Me
End Sub
End Sub
Public Sub New (ByVal sTitlebarCaption
Public Sub New (ByVal sTitlebarCaption
As String )
As String )
MyBase.New
MyBase.New
Form2 = Me
Form2 = Me
me.Text = sTitlebarCaption
me.Text = sTitlebarCaption
End Sub
End Sub
Public Sub New (ByVal sTitlebarCaption
Public Sub New (ByVal sTitlebarCaption
As String )
As String )
MyBase.New
MyBase.New
Form2 = Me
Form2 = Me
me.Text = sTitlebarCaption
me.Text = sTitlebarCaption
End Sub
End Sub
50
Parametryzowane
konstruktory
w VB.NET
Wracamy do
Form1
i dwukrotnie klikając
otwieramy kod zdarzenia, które wywołuje
Button1_Click
w edytorze kodu do którego
wstawiamy kod:
Zawiera on parametr wymagany przez instrukcję
Sub New.
Utworzona przyciskiem w
Form1
instancja
formularza
Form2
będzie miała nazwę podaną w
parametrze.
Dim frmNewForm As New
Dim frmNewForm As New
Form2(”Formularz drugi”)
Form2(”Formularz drugi”)
frmNewForm.Show( )
frmNewForm.Show( )
Dim frmNewForm As New
Dim frmNewForm As New
Form2(”Formularz drugi”)
Form2(”Formularz drugi”)
frmNewForm.Show( )
frmNewForm.Show( )
51
Przesłanianie nazw w
VB.NET
VB.Net obsługuje pełne przesłanianie
metod i właściwości klas bazowych.
Logika przesłaniania może istnieć zupełnie
niezależnie od klasy bazowej, a metoda
bazowa może być wywołana z klasy
przesłaniającej, ale jej działanie będzie
tylko w zasięgu tej klasy.
Klasa bazowa może zastrzec, że dana
właściwość lub metoda ma być przesłonięta
(lub nie może być przesłonięta) w klasie
potomnej
52
Przesłanianie nazw w
VB.NET
Przesłanianie jest kontrolowane za pomocą
następujących słów kluczowych:
Overridable
Overridable
- element klasy bazowej
może
być
przesłonięty w klasach potomnych,
Overrides
Overrides
- element klasy bazowej
jest
przesłonięty przez element o tej samej nazwie w
klasie potomnej,
NotOverridable
NotOverridable
- element klasy bazowej
nie
może
być przesłonięty w klasach potomnych
(opcja domyślna),
MustInherit
MustInherit
- atrybut deklaracji klasy bazowej
określający, że instancja klasy potomnej
nie
może być tworzona bezpośrednio
, ale
musi
zostać oddziedziczona,
53
Przesłanianie nazw w
VB.NET
MustOverride
MustOverride
- dostepne jedynie dla klas
zadeklarowanych jako
MustInherit.
MustInherit.
Oznacza,
że wszystkie klasy dziedziczące dany element
klasy bazowej muszą go przesłaniać.
Element
oznaczony
jako
MustOverride
zapewnia
jedynie
interfejs.
Nie
są
dopuszczalne nawet wiersze instrukcji
End
Sub
oraz
End Function
.
Rozpatrujemy
klasę bazową
, w której:
istnieją właściwości publiczne, inicjalizowane
przy pomocy konstruktora,
klasy potomne mogą implementować własne
wersje elementów (
Overridable
Overridable
).
54
Przesłanianie nazw w
VB.NET
Domyślny konstruktor ma postać:
Public Class
Public Class
Klient
Klient
Public Name As String
Public Name As String
Public Active As Boolean
Public Active As Boolean
Public Sub New (ByVal sName as String,
Public Sub New (ByVal sName as String,
ByVal bActive As Boolean)
ByVal bActive As Boolean)
Name = sName
Name = sName
Active = bActive
Active = bActive
End Sub
End Sub
‘klasa potomna może zaimplementować
własną wersję
Public Overridable Sub CheckStatus ( )
Public Overridable Sub CheckStatus ( )
Debug. WriteLine (”Name: ” & Name)
Debug. WriteLine (”Name: ” & Name)
Debug. WriteLine (”Active: ” & Active)
Debug. WriteLine (”Active: ” & Active)
End Sub
End Sub
End Class
End Class
Public Class
Public Class
Klient
Klient
Public Name As String
Public Name As String
Public Active As Boolean
Public Active As Boolean
Public Sub New (ByVal sName as String,
Public Sub New (ByVal sName as String,
ByVal bActive As Boolean)
ByVal bActive As Boolean)
Name = sName
Name = sName
Active = bActive
Active = bActive
End Sub
End Sub
‘klasa potomna może zaimplementować
własną wersję
Public Overridable Sub CheckStatus ( )
Public Overridable Sub CheckStatus ( )
Debug. WriteLine (”Name: ” & Name)
Debug. WriteLine (”Name: ” & Name)
Debug. WriteLine (”Active: ” & Active)
Debug. WriteLine (”Active: ” & Active)
End Sub
End Sub
End Class
End Class
55
Przesłanianie nazw w
VB.NET
Tworzymy
klasę potomną
, w której:
istnieją właściwości publiczne,
tworzymy konstruktor klasy podklasy,
wywołujemy konstruktor klasy bazowej,
inicjalizujemy zmienne podklasy,
przesłaniamy metody klasy bazowej,
wywołujemy wersje metod z klasy
bazowej,
wypisujemy właściwości podklasy.
56
Przesłanianie nazw w
VB.NET
Domyślny konstruktor ma postać:
Public Class
Public Class
KlientDocelowy
KlientDocelowy
Inherits
Inherits
Klient
Klient
Public DateToContact As Date
Public DateToContact As Date ‘deklaracja
dodatkowa
Public
Public
Sub
Sub
New (ByVal sName as String, ByVal
New (ByVal sName as String, ByVal
bActive As Boolean, ByVal datDateToContact As
bActive As Boolean, ByVal datDateToContact As
Date )
Date ) ‘konstruktor podklasy
MyBase.New(sName, bActive)
MyBase.New(sName, bActive) ‘konstruktor klasy
bazowej
DateToContact = datDateToContact
DateToContact = datDateToContact
‘dodatkowa
inicjalizacja
End Sub
End Sub
‘przesłonięcie metody klasy bazowej
Public
Public
Overrides
Overrides
Sub CheckStatus ( )
Sub CheckStatus ( )
MyBase.CheckStatus ( )
MyBase.CheckStatus ( ) ‘wywołanie wersji metody
klasy bazowej
Debug. WriteLine (”Kontakt: ” &
Debug. WriteLine (”Kontakt: ” &
DateToContact)
DateToContact)
End Sub
End Sub
End Class
End Class
Public Class
Public Class
KlientDocelowy
KlientDocelowy
Inherits
Inherits
Klient
Klient
Public DateToContact As Date
Public DateToContact As Date
‘deklaracja
dodatkowa
Public
Public
Sub
Sub
New (ByVal sName as String, ByVal
New (ByVal sName as String, ByVal
bActive As Boolean, ByVal datDateToContact As
bActive As Boolean, ByVal datDateToContact As
Date )
Date )
‘konstruktor podklasy
MyBase.New(sName, bActive)
MyBase.New(sName, bActive)
‘konstruktor klasy
bazowej
DateToContact = datDateToContact
DateToContact = datDateToContact
‘dodatkowa
inicjalizacja
End Sub
End Sub
‘przesłonięcie metody klasy bazowej
Public
Public
Overrides
Overrides
Sub CheckStatus ( )
Sub CheckStatus ( )
MyBase.CheckStatus ( )
MyBase.CheckStatus ( )
‘wywołanie wersji metody
klasy bazowej
Debug. WriteLine (”Kontakt: ” &
Debug. WriteLine (”Kontakt: ” &
DateToContact)
DateToContact)
End Sub
End Sub
End Class
End Class
57
Przesłanianie nazw w
VB.NET
Tworzymy instancje klasy potomnej, co
wymaga
przesłania
parametrów
inicjalizujących
jej
właściwości
i
wywołujemy metodę
CheckStatus
:
Zostanie wyświetlone okno:
Dim objNewKlientDocelowy As New
Dim objNewKlientDocelowy As New
KlientDocelowy
KlientDocelowy
(”Siemens”, True, #22/11/2003#)
(”Siemens”, True, #22/11/2003#)
objNewKlientDocelowy. CheckStatus
objNewKlientDocelowy. CheckStatus
Dim objNewKlientDocelowy As New
Dim objNewKlientDocelowy As New
KlientDocelowy
KlientDocelowy
(”Siemens”, True, #22/11/2003#)
(”Siemens”, True, #22/11/2003#)
objNewKlientDocelowy. CheckStatus
objNewKlientDocelowy. CheckStatus
Debug
Debug
Name: Siemens
Name: Siemens //generowane metodą
klasy bazowej
Active: True
Active: True
//generowane metodą
klasy bazowej
Kontakt: 22/11/2003
Kontakt: 22/11/2003 //generowane metodą
klasy potomnej
Debug
Debug
Name: Siemens
Name: Siemens //generowane metodą
klasy bazowej
Active: True
Active: True
//generowane metodą
klasy bazowej
Kontakt: 22/11/2003
Kontakt: 22/11/2003 //generowane metodą
klasy potomnej
58
Przeładowywanie nazw
funkcji w VB.NET
Przeładowywanie
nazw
funkcji
polega
na
zdefiniowaniu kilku funkcji o tej samej nazwie ale
różnych argumentach
W VB.NET realizowane to jest za pomocą słowa
kluczowego
Overloads
Overloads
, np.:
Overloads Sub Display (ByVal number as
Overloads Sub Display (ByVal number as
Integer)
Integer)
// ciało funkcji
End Sub
End Sub
Overloads Sub Display (ByVal aString as
Overloads Sub Display (ByVal aString as
String)
String)
// ciało funkcji
End Sub
End Sub
Overloads Sub Display (ByVal number as
Overloads Sub Display (ByVal number as
Integer)
Integer)
// ciało funkcji
End Sub
End Sub
Overloads Sub Display (ByVal aString as
Overloads Sub Display (ByVal aString as
String)
String)
// ciało funkcji
End Sub
End Sub
59
Elementy współdzielone w
VB.NET
W VB.NET istnieje możliwość tworzenia
właściwości i metod współdzielonych przez
wszystkie aktywne instancje w klasie.
Jest to odpowiednik elementów statycznych
języka C++
Do tworzenia elementów współdzielonych
wykorzystuje się słowo kluczowe
Shared
Shared
, np.:
Zmiana właściwości w jednej instancji
wywołuje
zmianę
tej
właściwości
we
wszystkich instancjach danej klasy.
Public Shared CommonName As
Public Shared CommonName As
String
String
Public Shared CommonName As
Public Shared CommonName As
String
String
60
Interfejsy WWW w VB.NET
Częścią platformy .NET są formularze Web,
działające w VB.NET tak samo, jak w każdym
innym języku platformy.
Usługi
Web
zapewniają
mechanizm
umożliwiający programom komunikowanie się
w Internecie za pomocą protokołu SOAP, który
nie zależy od wywoływanej technologii.
Komponent usługi Web zawiera metody:
widoczne w interfejsie usługi Web, oznaczone
za pomocą słowa kluczowego
WebMethod
,
przeznaczone
wyłącznie
do
użytku
wewnętrznego.
61
Strukturalna obsługa
języka w VB.NET
Nowe możliwości składni języka VB.NET obejmują:
strukturalną obsługę wyjątków,
tworzenie wątków.
Składnia obsługi błędów i wyjątków ma postać:
Try
Try
// Kod programu
Catch
Catch
// fragment kodu zawierający komunikat o błędzie,
wykonywany,
// gdy w kodzie po instrukcji Try wystąpił błąd
Finally
Finally
// fragment kodu wykonywany niezależnie od tego
czy po Try wystąpił błąd czy nie
End Try
End Try
Try
Try
// Kod programu
Catch
Catch
// fragment kodu zawierający komunikat o błędzie,
wykonywany,
// gdy w kodzie po instrukcji Try wystąpił błąd
Finally
Finally
// fragment kodu wykonywany niezależnie od tego
czy po Try wystąpił błąd czy nie
End Try
End Try
62
Strukturalna obsługa
języka w VB.NET
Kod po instrukcji
Try
Try
może zawierać instrukcję
Throw
Throw
, która wymusza błąd (i wykonanie sekcji
kodu po
Catch
Catch
)
VB.NET obsługuje również instrukcje
On Error
oraz obiekt
Err
.
VB. NET obsługuje swobodne tworzenie wątków.
W celu rozpoczęcia nowego wątku typ obiektu
deklarowany jest jako
Thread
Thread
, a podczas
tworzenia instancji przekazywany jest adres,
który ma być wykonany w wątku.
Klasa
Thread
Thread
posiada różne metody
wstrzymywania, zawieszania, przywracania,
usuwania
i innych operacji dokonywanych na
wątku.
63
Typy zmiennych stosowane
w VB.NET
Ponieważ podstawą platformy .NET jest wspólny
system plików
CTS
, w VB.NET wprowadzono
następujące zmiany w stosunku do typów danych
stosowanych w VB:
Typy całkowite:
Integer Short
(2 bajty)
Long Integer
(4 bajty)
------ Long
(8 bajtów).
Przy przenoszeniu kodu aplikacji następuje
automatyczna konwersja starych typów danych
na nowe
Przy wklejaniu dodatkowego kodu należy
samemu dokonać zmiany typów.
Typ
Currency Decimal
(12 bajtów) lub
Long
64
Typy zmiennych stosowane
w VB.NET
Wprowadzony jest typ
Char
(2 bajty),
przechowujący wartości znaków
Unicode
Typ
Variant
nie jest używany. Może być zastąpiony
typem
Object,
gdyż na platformie .NET zarówno
wartości całkowite jak i łańcuchy znaków
traktowane są jako obiekty.
Do obsługi łańcuchów o stałej długości
stosowana jest klasa
FixedLengthString
wykorzystywana w deklaracji:
Typ
Data
nie jest przechowywany w typie
Double
,
ale używa wewnętrznie 8-bitowego typu wartości
integer.
Dim sFixedLengthString As New
Dim sFixedLengthString As New
VB6.FixedLengthString (18)
VB6.FixedLengthString (18)
Dim sFixedLengthString As New
Dim sFixedLengthString As New
VB6.FixedLengthString (18)
VB6.FixedLengthString (18)
65
Zmiany wprowadzone w
VB.NET
VB.NET nie obsługuje domyślnych wartości i
metod.
W VB6 w instrukcji przypisania do obiektów
stosowana była instrukcja
Set,
w VB. NET nie są
używane właściwości domyślne, a więc instrukcja
Set
jest zbędna.
Przy własnościach
tylko do odczytu/zapisu
należy
deklaracje właściwości poprzedzić słowem
ReadOnly
(procedura
Get..End Get
) lub
WriteOnly
(procedura
Set..End Set
)
strName = txtName.Text
strName = txtName.Text
( w VB6
( w VB6
strName = txtName)
strName = txtName)
strName = rsRecordSet.
strName = rsRecordSet.
Fields
Fields
(”Name”).
(”Name”).
Value
Value
strName = txtName.Text
strName = txtName.Text
( w VB6
( w VB6
strName = txtName)
strName = txtName)
strName = rsRecordSet.
strName = rsRecordSet.
Fields
Fields
(”Name”).
(”Name”).
Value
Value
txtCity = txtNewCity
txtCity = txtNewCity
( w VB6 Set txtCity
( w VB6 Set txtCity
= txtNewCity
= txtNewCity
txtCity = txtNewCity
txtCity = txtNewCity
( w VB6 Set txtCity
( w VB6 Set txtCity
= txtNewCity
= txtNewCity
66
Zmiany wprowadzone w
VB.NET
Kompilator VB.NET zawsze wymaga użycia
nawiasów, nawet dla list argumentów typu
Null
, np..:
W VB. NET wszystkie parametry na liście
argumentów maja domyślne ustawienie
ByVal
VB. NET nie dopuszcza deklaracji
różnych
typów
w jednym wierszu, np..:
MsgBox (”Witaj”)
MsgBox (”Witaj”)
( w VB6 MsgBox
( w VB6 MsgBox
”Witaj”
”Witaj”
)
)
Dim sDate As String
Dim sDate As String
sDate = Date( )
sDate = Date( )
( w VB6 sDate = Date
( w VB6 sDate = Date
)
)
MsgBox (”Witaj”)
MsgBox (”Witaj”)
( w VB6 MsgBox
( w VB6 MsgBox
”Witaj”
”Witaj”
)
)
Dim sDate As String
Dim sDate As String
sDate = Date( )
sDate = Date( )
( w VB6 sDate = Date
( w VB6 sDate = Date
)
)
Dim strImie, strNazwisko As String
Dim strImie, strNazwisko As String
w VB6
w VB6
Dim strImie As String, strNazwisko As String,
Dim strImie As String, strNazwisko As String,
wiek As Integer
wiek As Integer
Dim strImie, strNazwisko As String
Dim strImie, strNazwisko As String
w VB6
w VB6
Dim strImie As String, strNazwisko As String,
Dim strImie As String, strNazwisko As String,
wiek As Integer
wiek As Integer
67
Zmiany wprowadzone w
VB.NET
VB. NET dopuszcza w deklaracji
inicjalizację
zmiennych
W deklaracji tablicy w VB6 liczba w nawiasie
oznaczała indeks ostatniego elementu
Podobnie, w deklaracji tablicy w VB.NET liczba
w nawiasie oznacza indeks ostatniego
elementu
W VB.NET
nie stosuje się tablic
zaczynających
od indeksu
1
1
Dim strNazwisko As String = ”Kowalski”
Dim strNazwisko As String = ”Kowalski”
Dim strNazwisko As String = ”Kowalski”
Dim strNazwisko As String = ”Kowalski”
Dim strNazwisko (10) As String
Dim strNazwisko (10) As String tablica 11-
elementowa (0 -10)
Dim strNazwisko (10) As String
Dim strNazwisko (10) As String
tablica 11-
elementowa (0 -10)
Dim strNazwisko (10) As String
Dim strNazwisko (10) As String tablica 11-
elementowa (0 - 10)
Dim strNazwisko (10) As String
Dim strNazwisko (10) As String
tablica 11-
elementowa (0 - 10)
68
Zmiany wprowadzone w
VB.NET
W VB.NET można również w deklaracji tablic
dokonywać ich inicjalizacji (analogicznie jak
zmienne)
Odwołania mają postać:
strImie(0), strImie(1),
strImie(2),
W VB6 formularze ładowane były w chwili pojawienia
się pierwszego odwołania do nich. W VB.NET
formularze musza być formalnie deklarowane i
ładowane jak inne obiekty, np..:
Dim frmNewForm As New Form2 ( )
Dim frmNewForm As New Form2 ( )
frmNewForm.Show ( )
frmNewForm.Show ( )
Dim frmNewForm As New Form2 ( )
Dim frmNewForm As New Form2 ( )
frmNewForm.Show ( )
frmNewForm.Show ( )
Dim strImie (2) As String = („”Ola”,
Dim strImie (2) As String = („”Ola”,
”Tomek”, ”Basia”)
”Tomek”, ”Basia”)
Dim strImie (2) As String = („”Ola”,
Dim strImie (2) As String = („”Ola”,
”Tomek”, ”Basia”)
”Tomek”, ”Basia”)
69
Zmiany wprowadzone w
VB.NET
W VB.NET wiele słów kluczowych zostało zastąpione
przez
elementy klas współdzielonych
platformy .NET,
np.
circle, line
- przestrzeń nazw
System.Drawing.Graphics
sgn, sqr, atn
- przestrzeń nazw
System.Math
,
lset, rset
- przestrzeń nazw
System.String
,
rnd, round
- przestrzeń nazw
Microsoft.VisualBasic.
Compatibility.VB6
W VB6 operatory
and, or, xor, not
and, or, xor, not
są używane zarówno
w działaniach bitowych jak i w operacjach boolowskich
W VB.NET operatory
and, or, xor, not
and, or, xor, not
są zastrzeżone
wyłącznie do operacji boolowskich; w arytmetyce
bitowej stosowane są operatory
BitAnd, BitOr, BitXor,
BitAnd, BitOr, BitXor,
BitNo
BitNo
70
Zmiany wprowadzone w
VB.NET
W VB6 typy definiowane są przy pomocy słów
kluczowych
Type .... End Type
i sa publicznie
dostępne.
W VB.NET zamiast typów definiuje się
struktury słowami
Structure....End
Structure
.
Każdy element struktury musi być
zadeklarowany słowami:
Dim, Public,
Protected, Friend, Protected Friend, Private
,
np..:
Structure klient
Structure klient
public klientID As Integer
public klientID As Integer
Dim klientNazwisko As String
Dim klientNazwisko As String
Private klientStatus As Boolean
Private klientStatus As Boolean
End Structure
End Structure
Structure klient
Structure klient
public klientID As Integer
public klientID As Integer
Dim klientNazwisko As String
Dim klientNazwisko As String
Private klientStatus As Boolean
Private klientStatus As Boolean
End Structure
End Structure
71
Zmiany wprowadzone w
VB.NET
W VB6 zmienna może być zadeklarowana w
dowolnym miejscu procedury (również wewnątrz
instrukcji warunkowej lub pętli) i niezależnie od
lokalizacji deklaracji ma pełen zasięg procedury.
W VB.NET
zmienne deklarowane w bloku
kodu
ograniczonym instrukcjami
End, Loop
lub
Next
są
dostępne tylko w tym bloku
, więc maja zasięg
bloku, ale:
zachowują swoją wartość po wyjściu z bloku,
nie można się do nich odwołać spoza bloku.
VB.NET obsługuje parametry opcjonalne, ale nie
obsługuje funkcji
If Missing
, więc parametry
opcjonalne wymagają wartości domyślnych.
72
Zmiany wprowadzone w
VB.NET
W VB.NET
w złożonych instrukcjach
warunkowych
, jeśli pierwszy warunek jest
spełniony, to następne nie są sprawdzane, więc
nie powinny zawierać żadnych czynności (np..
inicjalizacji).
Obiekt
Debug
dostępny jest teraz w przestrzeni
nazw
System.Diagnostic.Debug
, a jego metoda
została zastąpiona przez cztery metody:
Write, WriteIf. WriteLine, WriteLineIf.
Zmienione są
opcje formatowania
łańcuchów
znaków i analizy liczb oraz wprowadzona
inkrementacja i dekrementacja
zmiennych.
VB.NET nie obsługuje wielu słów kluczowych VB6,
m.in.. takich jak
GoTo, Let, Option Base n
itp..
73
Przystosowanie projektów
do VB.NET
Przystosowanie projektów wykonywanych w
VB6 do VB.NET zawarte jest w bibliotece
dostępnej pod adresem:
Fundamentalną technologią platformy .NET
używaną przez usługi Web jest protokół SOAP.
Pakiet narzędziowy SOAP dostępny jest pod
adresem:
http://msdn.microsoft.com/library/techart/vb6t
http://msdn.microsoft.com/library/techart/vb6t
ovbdotnet.htm
ovbdotnet.htm
http://msdn.microsoft.com/library/techart/vb6t
http://msdn.microsoft.com/library/techart/vb6t
ovbdotnet.htm
ovbdotnet.htm
http://msdn.microsoft.com/xml/general/toolkit
http://msdn.microsoft.com/xml/general/toolkit
_intro.asp
_intro.asp
http://msdn.microsoft.com/xml/general/toolkit
http://msdn.microsoft.com/xml/general/toolkit
_intro.asp
_intro.asp
74
Kontrolki VB.NET
Po wygenerowaniu nowego projektu
Windows Control Library
Windows Control Library
kontrolki ActiveX
automatycznie dziedziczą własności po klasie
System.Windows.Forms.UserControl.
System.Windows.Forms.UserControl.
Klasa ta w postaci:
dostarcza podstawowe właściwości i
zdarzenia związane z kontrolkami. Jest ona
klasą bazową do tworzenia własnych
kontrolek
Public Class
Public Class
UserControl1
UserControl1
Inherits
Inherits
System.Windows.Forms.UserControl
System.Windows.Forms.UserControl
End Class
End Class
Public Class
Public Class
UserControl1
UserControl1
Inherits
Inherits
System.Windows.Forms.UserControl
System.Windows.Forms.UserControl
End Class
End Class
75
Kontrolki VB.NET
Można stworzyć kontrolki dziedziczące
własności po innym komponencie, np.
CheckBox
Po wykonaniu tej zmiany tracimy możliwość
bezpośredniego edytowania kontrolki na
ekranie 'Design'.
Można za pomocą operacji
Drag and Drop
wprowadzić na ten ekran inne kontrolki ale
można je obsługiwać tylko ręcznie.
Public Class
Public Class
UserControl1
UserControl1
Inherits
Inherits
System.Windows.Forms.CheckBox
System.Windows.Forms.CheckBox
End Class
End Class
Public Class
Public Class
UserControl1
UserControl1
Inherits
Inherits
System.Windows.Forms.CheckBox
System.Windows.Forms.CheckBox
End Class
End Class
76
Zdarzenia VB.NET
Zdarzenia deklaruje się w następujący sposób:
Metoda
RaiseEvent
służy do wywołania
zdarzenia w momencie kliknięcia na
kontrolkę.
Public Class
Public Class
UserControl1
UserControl1
Inherits
Inherits
System.Windows.Forms.CheckBox
System.Windows.Forms.CheckBox
Public
Public
Event
Event
MojeZdarzenieKliknięcia()
MojeZdarzenieKliknięcia()
Protected
Protected
Overrides
Overrides
Sub
Sub
OnClick(
OnClick(
ByVal
ByVal
e
e
As
As
System.EventArgs)
System.EventArgs)
RaiseEvent
RaiseEvent
MojeZdarzenieKliknięcia()
MojeZdarzenieKliknięcia()
End
End
Sub
Sub
End Class
End Class
Public Class
Public Class
UserControl1
UserControl1
Inherits
Inherits
System.Windows.Forms.CheckBox
System.Windows.Forms.CheckBox
Public
Public
Event
Event
MojeZdarzenieKliknięcia()
MojeZdarzenieKliknięcia()
Protected
Protected
Overrides
Overrides
Sub
Sub
OnClick(
OnClick(
ByVal
ByVal
e
e
As
As
System.EventArgs)
System.EventArgs)
RaiseEvent
RaiseEvent
MojeZdarzenieKliknięcia()
MojeZdarzenieKliknięcia()
End
End
Sub
Sub
End Class
End Class
77
Zdarzenia VB.NET
Metody typu
Overrides
których nazwa zaczyna się
od liter
On
pozwalają nadpisać obsługę zdarzenia
zdefiniowaną w klasie bazowej.
W celu wywołania obsługi zdarzenia z klasy bazowej
modyfikujemy metodę w następujący sposób:
Można najpierw wywołać metodę
MyBase.OnClick(e)
MyBase.OnClick(e)
a później napisać obsługę
zdarzenia, ale zmienia to wynik działania
procedury.
Protected Overrides
Protected Overrides
Sub
Sub
OnClick(
OnClick(
ByVal
ByVal
e
e
As
As
System.EventArgs)
System.EventArgs)
RaiseEvent
RaiseEvent
MojeZdarzenieKliknięcia()
MojeZdarzenieKliknięcia()
MyBase
MyBase
.OnClick(e)
.OnClick(e)
End
End
Sub
Sub
Protected Overrides
Protected Overrides
Sub
Sub
OnClick(
OnClick(
ByVal
ByVal
e
e
As
As
System.EventArgs)
System.EventArgs)
RaiseEvent
RaiseEvent
MojeZdarzenieKliknięcia()
MojeZdarzenieKliknięcia()
MyBase
MyBase
.OnClick(e)
.OnClick(e)
End
End
Sub
Sub
78
Zdarzenia VB.NET
Zdarzenia w aplikacji można obsługiwać
dwiema metodami:
Pierwsza metoda polega na wykorzystaniu
słowa kluczowego
Handles
przy deklaracji
metody. Słowo to informuje kompilator, że
metoda ta będzie wykorzystana do
obsłużenia danego zdarzenia, np:
Private Sub
Private Sub
UserControl11_Click(
UserControl11_Click(
ByVal
ByVal
sender
sender
As
As
Object
Object
,
,
ByVal
ByVal
e
e
As
As
System.EventArgs) _
System.EventArgs) _
Handles
Handles
UserControl11.Click
UserControl11.Click
MsgBox("Nastąpiło kliknięcie!",
MsgBox("Nastąpiło kliknięcie!",
MsgBoxStyle.Information)
MsgBoxStyle.Information)
End
End
Sub
Sub
Private Sub
Private Sub
UserControl11_Click(
UserControl11_Click(
ByVal
ByVal
sender
sender
As
As
Object
Object
,
,
ByVal
ByVal
e
e
As
As
System.EventArgs) _
System.EventArgs) _
Handles
Handles
UserControl11.Click
UserControl11.Click
MsgBox("Nastąpiło kliknięcie!",
MsgBox("Nastąpiło kliknięcie!",
MsgBoxStyle.Information)
MsgBoxStyle.Information)
End
End
Sub
Sub
79
Druga polega na wykorzystaniu metody
AddHandler
i
RemoveHandler,
co pozwala na podłączenie danej
metody do obsługi zdarzenia w sposób dynamiczny, np:
Public Sub
Public Sub
PodłaczObsZdarzenia()
PodłaczObsZdarzenia()
AddHandler
AddHandler
UserControl11.Click,
UserControl11.Click,
AddressOf
AddressOf
MojaObsługakliknięcia
MojaObsługakliknięcia
End
End
Sub
Sub
Private
Private
Sub
Sub
MojaObsługakliknięcia(
MojaObsługakliknięcia(
ByVal
ByVal
obSend
obSend
As
As
Object
Object
,
,
ByVal
ByVal
e
e
As
As
System.EventArgs)
System.EventArgs)
MsgBox("Nastąpiło kliknięcie!",
MsgBox("Nastąpiło kliknięcie!",
MsgBoxStyle.Information)
MsgBoxStyle.Information)
End
End
Sub
Sub
Public Sub
Public Sub
OdlaczObsZdarzenia()
OdlaczObsZdarzenia()
RemoveHandler
RemoveHandler
UserControl11.Click,
UserControl11.Click,
AddressOf
AddressOf
MojaObsługakliknięcia
MojaObsługakliknięcia
End
End
Sub
Sub
Public Sub
Public Sub
PodłaczObsZdarzenia()
PodłaczObsZdarzenia()
AddHandler
AddHandler
UserControl11.Click,
UserControl11.Click,
AddressOf
AddressOf
MojaObsługakliknięcia
MojaObsługakliknięcia
End
End
Sub
Sub
Private
Private
Sub
Sub
MojaObsługakliknięcia(
MojaObsługakliknięcia(
ByVal
ByVal
obSend
obSend
As
As
Object
Object
,
,
ByVal
ByVal
e
e
As
As
System.EventArgs)
System.EventArgs)
MsgBox("Nastąpiło kliknięcie!",
MsgBox("Nastąpiło kliknięcie!",
MsgBoxStyle.Information)
MsgBoxStyle.Information)
End
End
Sub
Sub
Public Sub
Public Sub
OdlaczObsZdarzenia()
OdlaczObsZdarzenia()
RemoveHandler
RemoveHandler
UserControl11.Click,
UserControl11.Click,
AddressOf
AddressOf
MojaObsługakliknięcia
MojaObsługakliknięcia
End
End
Sub
Sub
80
Metoda którą podłączamy musi mieć
właściwe
parametry
do
obsłużenia
danego zdarzenia.
Pojawienie
się
dziedziczenia
i
polimorfizmu w Visual Basic.Net
spowodowało pojawienie się większej
różnorodności w deklarowaniu metod.
W Visual Basic.Net mamy o wiele
większe
możliwości
decydowania
o
dostępie do elementów danej klasy,
zwłaszcza w przypadku, kiedy tworzymy
hierarchiczną strukturę klas.
Deklaracje metod w
VB.NET
81
Deklaracje metod w
VB.NET
Z wykorzystaniem listy atrybutów
attrlist.
attrlist.
Definicja funkcji w VB.NET wygląda w tym
przypadku następująco:
[<
[<
attrlist
attrlist
>]
>]
[{ Overloads | Overrides |
[{ Overloads | Overrides |
Overridable |
Overridable |
NotOverridable | MustOverride | Shadows |
NotOverridable | MustOverride | Shadows |
Shared }]
Shared }]
[{Public | Protected | Friend | Protected
[{Public | Protected | Friend | Protected
Friend | Private }]
Friend | Private }]
Function
Function
nazwa {(arglist)] [
nazwa {(arglist)] [
As
As
typ ]
typ ]
[
[
Implements
Implements
interfejs.zdefiniowananazwa ]
interfejs.zdefiniowananazwa ]
[ instrukcje ]
[ instrukcje ]
[
[
Exit Function
Exit Function
]
]
[instrukcje ]
[instrukcje ]
End Function
End Function
[<
[<
attrlist
attrlist
>]
>]
[{ Overloads | Overrides |
[{ Overloads | Overrides |
Overridable |
Overridable |
NotOverridable | MustOverride | Shadows |
NotOverridable | MustOverride | Shadows |
Shared }]
Shared }]
[{Public | Protected | Friend | Protected
[{Public | Protected | Friend | Protected
Friend | Private }]
Friend | Private }]
Function
Function
nazwa {(arglist)] [
nazwa {(arglist)] [
As
As
typ ]
typ ]
[
[
Implements
Implements
interfejs.zdefiniowananazwa ]
interfejs.zdefiniowananazwa ]
[ instrukcje ]
[ instrukcje ]
[
[
Exit Function
Exit Function
]
]
[instrukcje ]
[instrukcje ]
End Function
End Function
82
Deklaracje metod w
VB.NET
Definicja procedury ma wtedy postać:
attrlist
– lista atrybutów dla danej metody. Jest to
nowość w stosunku do poprzednich wersji
kompilatora.
Wszystkie atrybuty muszą być dziedziczone z
klasy
System.Attribute
.
[<
[<
attrlist
attrlist
>]
>]
[{ Overloads | Overrides |
[{ Overloads | Overrides |
Overridable |
Overridable |
NotOverridable | MustOverride | Shadows |
NotOverridable | MustOverride | Shadows |
Shared }]
Shared }]
[{Public | Protected | Friend | Protected
[{Public | Protected | Friend | Protected
Friend | Private }]
Friend | Private }]
Sub
Sub
nazwa {(arglist)] [
nazwa {(arglist)] [
Implements
Implements
interfejs.zdefiniowananazwa ]
interfejs.zdefiniowananazwa ]
[ instrukcje ]
[ instrukcje ]
[
[
Exit Sub
Exit Sub
]
]
[instrukcje ]
[instrukcje ]
End Sub
End Sub
[<
[<
attrlist
attrlist
>]
>]
[{ Overloads | Overrides |
[{ Overloads | Overrides |
Overridable |
Overridable |
NotOverridable | MustOverride | Shadows |
NotOverridable | MustOverride | Shadows |
Shared }]
Shared }]
[{Public | Protected | Friend | Protected
[{Public | Protected | Friend | Protected
Friend | Private }]
Friend | Private }]
Sub
Sub
nazwa {(arglist)] [
nazwa {(arglist)] [
Implements
Implements
interfejs.zdefiniowananazwa ]
interfejs.zdefiniowananazwa ]
[ instrukcje ]
[ instrukcje ]
[
[
Exit Sub
Exit Sub
]
]
[instrukcje ]
[instrukcje ]
End Sub
End Sub
83
Deklaracje metod w
VB.NET
Zamiast stosować
Declare Function
można zastosować
klasę atrybutu
DllImportAttribute
, której konstruktor
ma pewne parametry jak np.
dllName
( w tym przypadku
„Kernel32”).
Public Class
Public Class
CDll
CDll
<
<
DllImport
DllImport
("Kernel32",
("Kernel32",
EntryPoint:="GetWindowsDirectory")>
EntryPoint:="GetWindowsDirectory")>
Public _ Shared
Public _ Shared
Function
Function
GetWindowsDirectory(
GetWindowsDirectory(
ByVal
ByVal
lpBuffer
lpBuffer
As
As
StringBuilder, _
StringBuilder, _
ByVa
ByVa
l nSize
l nSize
As
As
Integer) As Long
Integer) As Long
End Function
End Function
<
<
DllImport
DllImport
("Kernel32",
("Kernel32",
EntryPoint:="GetSystemDirectory")>
EntryPoint:="GetSystemDirectory")>
Public _ Shared
Public _ Shared
Function _
Function _
GetSystemDirectory(
GetSystemDirectory(
ByVal
ByVal
lpBuffer
lpBuffer
As
As
StringBuilder,
StringBuilder,
ByVal
ByVal
nSize
nSize
As _ Integer) As Long
As _ Integer) As Long
End Function
End Function
<
<
DllImport
DllImport
("Kernel32",
("Kernel32",
EntryPoint:="GetCommandLine")>
EntryPoint:="GetCommandLine")>
Public _ Shared
Public _ Shared
Function
Function
GetCommandLine()
GetCommandLine()
As
As
IntPtr
IntPtr
End Function
End Function
End Class
End Class
Public Class
Public Class
CDll
CDll
<
<
DllImport
DllImport
("Kernel32",
("Kernel32",
EntryPoint:="GetWindowsDirectory")>
EntryPoint:="GetWindowsDirectory")>
Public _ Shared
Public _ Shared
Function
Function
GetWindowsDirectory(
GetWindowsDirectory(
ByVal
ByVal
lpBuffer
lpBuffer
As
As
StringBuilder, _
StringBuilder, _
ByVa
ByVa
l nSize
l nSize
As
As
Integer) As Long
Integer) As Long
End Function
End Function
<
<
DllImport
DllImport
("Kernel32",
("Kernel32",
EntryPoint:="GetSystemDirectory")>
EntryPoint:="GetSystemDirectory")>
Public _ Shared
Public _ Shared
Function _
Function _
GetSystemDirectory(
GetSystemDirectory(
ByVal
ByVal
lpBuffer
lpBuffer
As
As
StringBuilder,
StringBuilder,
ByVal
ByVal
nSize
nSize
As _ Integer) As Long
As _ Integer) As Long
End Function
End Function
<
<
DllImport
DllImport
("Kernel32",
("Kernel32",
EntryPoint:="GetCommandLine")>
EntryPoint:="GetCommandLine")>
Public _ Shared
Public _ Shared
Function
Function
GetCommandLine()
GetCommandLine()
As
As
IntPtr
IntPtr
End Function
End Function
End Class
End Class
84
Z wykorzystaniem przeciążenia nazwy funkcji
lub procedury z klasy bazowej
-
Overloads
Overloads
.
Public Class
Public Class
CMojaKlasaBazowa
CMojaKlasaBazowa
Public Function
Public Function
MojaFunkcjaBazowa(
MojaFunkcjaBazowa(
ByVal
ByVal
x
x
As
As
Long
Long
,
,
ByVal
ByVal
y
y
As_ Long) As Long
As_ Long) As Long
MojaFunkcjaBazowa = x + y
MojaFunkcjaBazowa = x + y
End Function
End Function
End Class
End Class
Public Class
Public Class
CMojaKlasaDziedziczaca
CMojaKlasaDziedziczaca
Inherits
Inherits
CMojaKlasaBazowa
CMojaKlasaBazowa
Public
Public
Overloads
Overloads
Function
Function
MojaFunkcjaBazowa(
MojaFunkcjaBazowa(
ByVal
ByVal
x
x
As Long, _ ByVal
As Long, _ ByVal
y
y
As
As
Long, ByVal
Long, ByVal
z
z
As Long
As Long
)
)
As Long
As Long
MojaFunkcjaBazowa = x + y + z
MojaFunkcjaBazowa = x + y + z
End Function
End Function
Public Function
Public Function
MojaFunkcjaBazowa(
MojaFunkcjaBazowa(
ByVal
ByVal
x
x
As
As
Long
Long
,
,
ByVal
ByVal
y
y
As _ Long
As _ Long
,
,
ByVal
ByVal
z
z
As Long
As Long
,
,
ByVal
ByVal
Mnoz
Mnoz
As Long
As Long
)
)
As Long
As Long
„Błąd”
MojaFunkcjaBazowa = (x + y + z) * Mnoz
MojaFunkcjaBazowa = (x + y + z) * Mnoz
End Function
End Function
End Class
End Class
Public Class
Public Class
CMojaKlasaBazowa
CMojaKlasaBazowa
Public Function
Public Function
MojaFunkcjaBazowa(
MojaFunkcjaBazowa(
ByVal
ByVal
x
x
As
As
Long
Long
,
,
ByVal
ByVal
y
y
As_ Long) As Long
As_ Long) As Long
MojaFunkcjaBazowa = x + y
MojaFunkcjaBazowa = x + y
End Function
End Function
End Class
End Class
Public Class
Public Class
CMojaKlasaDziedziczaca
CMojaKlasaDziedziczaca
Inherits
Inherits
CMojaKlasaBazowa
CMojaKlasaBazowa
Public
Public
Overloads
Overloads
Function
Function
MojaFunkcjaBazowa(
MojaFunkcjaBazowa(
ByVal
ByVal
x
x
As Long, _ ByVal
As Long, _ ByVal
y
y
As
As
Long, ByVal
Long, ByVal
z
z
As Long
As Long
)
)
As Long
As Long
MojaFunkcjaBazowa = x + y + z
MojaFunkcjaBazowa = x + y + z
End Function
End Function
Public Function
Public Function
MojaFunkcjaBazowa(
MojaFunkcjaBazowa(
ByVal
ByVal
x
x
As
As
Long
Long
,
,
ByVal
ByVal
y
y
As _ Long
As _ Long
,
,
ByVal
ByVal
z
z
As Long
As Long
,
,
ByVal
ByVal
Mnoz
Mnoz
As Long
As Long
)
)
As Long
As Long
„Błąd”
MojaFunkcjaBazowa = (x + y + z) * Mnoz
MojaFunkcjaBazowa = (x + y + z) * Mnoz
End Function
End Function
End Class
End Class
85
Nie można zastosować słowa
Overloads
Overloads
do przeciążania
metod, które różnią się od siebie tylko wartością zwracaną:
Public Class
Public Class
CMojaKlasaBazowa
CMojaKlasaBazowa
Public Function
Public Function
MojaFunkcjaBazowa(
MojaFunkcjaBazowa(
ByVal
ByVal
x
x
As
As
Long, ByVal
Long, ByVal
y
y
As _ Long
As _ Long
)
)
As Long
As Long
MojaFunkcjaBazowa = x + y
MojaFunkcjaBazowa = x + y
End Function
End Function
End Class
End Class
Public Class
Public Class
CMojaKlasaDziedziczaca
CMojaKlasaDziedziczaca
Inherits
Inherits
CMojaKlasaBazowa
CMojaKlasaBazowa
Public Overloads
Public Overloads
Function
Function
MojaFunkcjaBazowa(
MojaFunkcjaBazowa(
ByVal
ByVal
x
x
As Long,
As Long,
_
_
ByVal
ByVal
y
y
As
As
Long
Long
)
)
As Double
As Double
’Błąd!!!
MojaFunkcjaBazowa = x + y
MojaFunkcjaBazowa = x + y
End Function
End Function
Public Overloads Function
Public Overloads Function
MojaFunkcjaBazowa(
MojaFunkcjaBazowa(
ByVal
ByVal
x
x
As Long, _ ByVal
As Long, _ ByVal
y
y
As
As
Long
Long
,
,
ByVa
ByVa
l z
l z
As Long
As Long
,
,
ByVal
ByVal
Mnoz
Mnoz
As Long
As Long
)
)
As Long
As Long
MojaFunkcjaBazowa = (x + y + z) * Mnoz
MojaFunkcjaBazowa = (x + y + z) * Mnoz
End Function
End Function
End Class
End Class
Public Class
Public Class
CMojaKlasaBazowa
CMojaKlasaBazowa
Public Function
Public Function
MojaFunkcjaBazowa(
MojaFunkcjaBazowa(
ByVal
ByVal
x
x
As
As
Long, ByVal
Long, ByVal
y
y
As _ Long
As _ Long
)
)
As Long
As Long
MojaFunkcjaBazowa = x + y
MojaFunkcjaBazowa = x + y
End Function
End Function
End Class
End Class
Public Class
Public Class
CMojaKlasaDziedziczaca
CMojaKlasaDziedziczaca
Inherits
Inherits
CMojaKlasaBazowa
CMojaKlasaBazowa
Public Overloads
Public Overloads
Function
Function
MojaFunkcjaBazowa(
MojaFunkcjaBazowa(
ByVal
ByVal
x
x
As Long,
As Long,
_
_
ByVal
ByVal
y
y
As
As
Long
Long
)
)
As Double
As Double
’Błąd!!!
MojaFunkcjaBazowa = x + y
MojaFunkcjaBazowa = x + y
End Function
End Function
Public Overloads Function
Public Overloads Function
MojaFunkcjaBazowa(
MojaFunkcjaBazowa(
ByVal
ByVal
x
x
As Long, _ ByVal
As Long, _ ByVal
y
y
As
As
Long
Long
,
,
ByVa
ByVa
l z
l z
As Long
As Long
,
,
ByVal
ByVal
Mnoz
Mnoz
As Long
As Long
)
)
As Long
As Long
MojaFunkcjaBazowa = (x + y + z) * Mnoz
MojaFunkcjaBazowa = (x + y + z) * Mnoz
End Function
End Function
End Class
End Class
86
Z wykorzystaniem metody
Overrides
Overrides
, która zastępuje
identyczną metodę klasy bazowej (o tej samej liczbie i
typie parametrów, oraz typie wartości zwracanej). Metoda
w klasie bazowej musi być określona jako
Overridable
Overridable
:
Public Class
Public Class
CMojaKlasaDziedziczaca
CMojaKlasaDziedziczaca
Inherits
Inherits
CMojaKlasaBazowa
CMojaKlasaBazowa
Public
Public
Overridable
Overridable
Overloads Function
Overloads Function
MojaFunkcjaBazowa(
MojaFunkcjaBazowa(
ByVal
ByVal
x
x
As Long, ByVal
As Long, ByVal
y
y
As
As
Long, _ ByVal
Long, _ ByVal
z
z
As Long
As Long
)
)
As Long
As Long
MojaFunkcjaBazowa = x + y + z
MojaFunkcjaBazowa = x + y + z
End Function
End Function
Public Overloads Function
Public Overloads Function
MojaFunkcjaBazowa(
MojaFunkcjaBazowa(
ByVal
ByVal
x
x
As _ Long, ByVal
As _ Long, ByVal
y
y
As Long, ByVal
As Long, ByVal
z
z
As Long, ByVal
As Long, ByVal
Mnoz
Mnoz
As _ Long
As _ Long
)
)
As Long
As Long
MojaFunkcjaBazowa = (x + y + z) * Mnoz
MojaFunkcjaBazowa = (x + y + z) * Mnoz
End Function
End Function
End Class
End Class
Public Class
Public Class
CMojaKlasaDziedziczaca
CMojaKlasaDziedziczaca
Inherits
Inherits
CMojaKlasaBazowa
CMojaKlasaBazowa
Public
Public
Overridable
Overridable
Overloads Function
Overloads Function
MojaFunkcjaBazowa(
MojaFunkcjaBazowa(
ByVal
ByVal
x
x
As Long, ByVal
As Long, ByVal
y
y
As
As
Long, _ ByVal
Long, _ ByVal
z
z
As Long
As Long
)
)
As Long
As Long
MojaFunkcjaBazowa = x + y + z
MojaFunkcjaBazowa = x + y + z
End Function
End Function
Public Overloads Function
Public Overloads Function
MojaFunkcjaBazowa(
MojaFunkcjaBazowa(
ByVal
ByVal
x
x
As _ Long, ByVal
As _ Long, ByVal
y
y
As Long, ByVal
As Long, ByVal
z
z
As Long, ByVal
As Long, ByVal
Mnoz
Mnoz
As _ Long
As _ Long
)
)
As Long
As Long
MojaFunkcjaBazowa = (x + y + z) * Mnoz
MojaFunkcjaBazowa = (x + y + z) * Mnoz
End Function
End Function
End Class
End Class
87
Z wykorzystaniem metody
Overridable,
Overridable,
która wskazuje,
że metoda z klasy bazowej może być nadpisana przez
identyczną metodę w klasie dziedziczącej, lub
Z wykorzystaniem metody
NotOverridable
NotOverridable
, która
oznacza, że ta metoda nie może być zastąpiona przez
żadną inną metodę.
Public Class
Public Class
CMojaKlasaDziedziczaca2
CMojaKlasaDziedziczaca2
Inherits
Inherits
CMojaKlasaDziedziczaca
CMojaKlasaDziedziczaca
Public Overloads
Public Overloads
Overrides
Overrides
Function
Function
MojaFunkcjaBazowa(
MojaFunkcjaBazowa(
ByVal
ByVal
x
x
As Long
As Long
,
,
ByVal
ByVal
y
y
As
As
Long
Long
, _
, _
ByVal
ByVal
z
z
As Long
As Long
)
)
As Long
As Long
MojaFunkcjaBazowa = (x + y) * z
MojaFunkcjaBazowa = (x + y) * z
End Function
End Function
End Class
End Class
Public Class
Public Class
CMojaKlasaDziedziczaca2
CMojaKlasaDziedziczaca2
Inherits
Inherits
CMojaKlasaDziedziczaca
CMojaKlasaDziedziczaca
Public Overloads
Public Overloads
Overrides
Overrides
Function
Function
MojaFunkcjaBazowa(
MojaFunkcjaBazowa(
ByVal
ByVal
x
x
As Long
As Long
,
,
ByVal
ByVal
y
y
As
As
Long
Long
, _
, _
ByVal
ByVal
z
z
As Long
As Long
)
)
As Long
As Long
MojaFunkcjaBazowa = (x + y) * z
MojaFunkcjaBazowa = (x + y) * z
End Function
End Function
End Class
End Class
Deklaracje metod w
VB.NET
88
Funkcja typu
NotOverridable
musi sama zastępować
taką samą metodę w klasie bazowej dla swej klasy.
Public Class
Public Class
CMojaKlasaBaza2
CMojaKlasaBaza2
Inherits
Inherits
CMojaKlasaBazowa
CMojaKlasaBazowa
Public
Public
NotOverridable
NotOverridable
Overrides Function
Overrides Function
MojaFunkcjaBazowa (
MojaFunkcjaBazowa (
ByVal
ByVal
x
x
As Long, ByVal
As Long, ByVal
y
y
As Long
As Long
)
)
As
As
_
_
Long
Long
MojaFunkcjaBazowa = x + y
MojaFunkcjaBazowa = x + y
End Function
End Function
End Class
End Class
Metoda w klasie bazowej musi być określona jako
Overridable:
Public Class
Public Class
CMojaKlasaDziedziczaca3
CMojaKlasaDziedziczaca3
Inherits
Inherits
CMojaKlasaBaza2
CMojaKlasaBaza2
Public
Public
Overrides
Overrides
Function
Function
MojaFunkcjaBazowa _
MojaFunkcjaBazowa _
Błąd!!!
(
(
ByVal
ByVal
x
x
As Long
As Long
,
,
ByVal
ByVal
y
y
As Long
As Long
)
)
As Long
As Long
MojaFunkcjaBazowa = x + y
MojaFunkcjaBazowa = x + y
End Function
End Function
End Class
End Class
Public Class
Public Class
CMojaKlasaBaza2
CMojaKlasaBaza2
Inherits
Inherits
CMojaKlasaBazowa
CMojaKlasaBazowa
Public
Public
NotOverridable
NotOverridable
Overrides Function
Overrides Function
MojaFunkcjaBazowa (
MojaFunkcjaBazowa (
ByVal
ByVal
x
x
As Long, ByVal
As Long, ByVal
y
y
As Long
As Long
)
)
As
As
_
_
Long
Long
MojaFunkcjaBazowa = x + y
MojaFunkcjaBazowa = x + y
End Function
End Function
End Class
End Class
Metoda w klasie bazowej musi być określona jako
Overridable:
Public Class
Public Class
CMojaKlasaDziedziczaca3
CMojaKlasaDziedziczaca3
Inherits
Inherits
CMojaKlasaBaza2
CMojaKlasaBaza2
Public
Public
Overrides
Overrides
Function
Function
MojaFunkcjaBazowa _
MojaFunkcjaBazowa _
Błąd!!!
(
(
ByVal
ByVal
x
x
As Long
As Long
,
,
ByVal
ByVal
y
y
As Long
As Long
)
)
As Long
As Long
MojaFunkcjaBazowa = x + y
MojaFunkcjaBazowa = x + y
End Function
End Function
End Class
End Class
89
Z wykorzystaniem metody
MustOverride
MustOverride
, która
wskazuje, że ta metoda nie jest zdefiniowana w tej
klasie i musi być zdefiniowana w klasie pochodnej;
klasa, w której deklarujemy taką metodę musi być
zadeklarowana jako
MustInherit
MustInherit
.
Public
Public
MustInherit
MustInherit
Class
Class
CMojaKlasaBaza2
CMojaKlasaBaza2
Public
Public
MustOverride
MustOverride
Function
Function
MojaFunkcjaBazowa _
MojaFunkcjaBazowa _
(
(
ByVal
ByVal
x
x
As Long, ByVal
As Long, ByVal
y
y
As Long
As Long
)
)
As Long
As Long
End Class
End Class
Public Class
Public Class
CMojaKlasaDziedziczaca3
CMojaKlasaDziedziczaca3
Inherits
Inherits
CMojaKlasaBaza2
CMojaKlasaBaza2
Public Overrides Function
Public Overrides Function
MojaFunkcjaBazowa _
MojaFunkcjaBazowa _
(
(
ByVal
ByVal
x
x
As Long
As Long
,
,
ByVal
ByVal
y
y
As Long
As Long
)
)
As Long
As Long
MojaFunkcjaBazowa = x + y
MojaFunkcjaBazowa = x + y
End Function
End Function
End Class
End Class
Public
Public
MustInherit
MustInherit
Class
Class
CMojaKlasaBaza2
CMojaKlasaBaza2
Public
Public
MustOverride
MustOverride
Function
Function
MojaFunkcjaBazowa _
MojaFunkcjaBazowa _
(
(
ByVal
ByVal
x
x
As Long, ByVal
As Long, ByVal
y
y
As Long
As Long
)
)
As Long
As Long
End Class
End Class
Public Class
Public Class
CMojaKlasaDziedziczaca3
CMojaKlasaDziedziczaca3
Inherits
Inherits
CMojaKlasaBaza2
CMojaKlasaBaza2
Public Overrides Function
Public Overrides Function
MojaFunkcjaBazowa _
MojaFunkcjaBazowa _
(
(
ByVal
ByVal
x
x
As Long
As Long
,
,
ByVal
ByVal
y
y
As Long
As Long
)
)
As Long
As Long
MojaFunkcjaBazowa = x + y
MojaFunkcjaBazowa = x + y
End Function
End Function
End Class
End Class
90
Z wykorzystaniem metody
Shadows
Shadows
, która
wskazuje, że metoda ta zakrywa identycznie
nazwany element programistyczny lub zbiór
przeciążonych elementów w klasie bazowej:
Public Class
Public Class
CMojaKlasaBazowa3
CMojaKlasaBazowa3
Public
Public
i
i
As Long
As Long
End Class
End Class
Public Class
Public Class
CMojaKlasaDziedziczaca4
CMojaKlasaDziedziczaca4
Inherits
Inherits
CMojaKlasaBazowa3
CMojaKlasaBazowa3
Public
Public
Shadows
Shadows
Function
Function
i(
i(
ByVal
ByVal
e
e
As Long
As Long
)
)
As
As
String
String
MsgBox(e, MsgBoxStyle.Information)
MsgBox(e, MsgBoxStyle.Information)
i = "Jest OK!"
i = "Jest OK!"
End Function
End Function
End Class
End Class
Public Class
Public Class
CMojaKlasaBazowa3
CMojaKlasaBazowa3
Public
Public
i
i
As Long
As Long
End Class
End Class
Public Class
Public Class
CMojaKlasaDziedziczaca4
CMojaKlasaDziedziczaca4
Inherits
Inherits
CMojaKlasaBazowa3
CMojaKlasaBazowa3
Public
Public
Shadows
Shadows
Function
Function
i(
i(
ByVal
ByVal
e
e
As Long
As Long
)
)
As
As
String
String
MsgBox(e, MsgBoxStyle.Information)
MsgBox(e, MsgBoxStyle.Information)
i = "Jest OK!"
i = "Jest OK!"
End Function
End Function
End Class
End Class
Deklaracje metod w
VB.NET
91
Z wykorzystaniem metody
Shared
Shared
, która wskazuje, że
ta metoda nie musi być wywołana z instancji danego
typu, lecz można ją wywołać bezpośrednio z typu nie
tworząc instancji tego typu:
Public Class
Public Class
CMojaKlasa1
CMojaKlasa1
Public
Public
Shared
Shared
Function
Function
MojaFunkcjaBazowa _
MojaFunkcjaBazowa _
(
(
ByVal
ByVal
x
x
As Long, ByVal
As Long, ByVal
y As Long, ByVal z
y As Long, ByVal z
As
As
Long
Long
)
)
As Long
As Long
MojaFunkcjaBazowa = (x + y) * z
MojaFunkcjaBazowa = (x + y) * z
End Function
End Function
End Class
End Class
Public Class
Public Class
CMojaKlasa2
CMojaKlasa2
Public Function
Public Function
MojaFunkcjaDziedzicaca(
MojaFunkcjaDziedzicaca(
ByVal
ByVal
i
i
As Long
As Long
)
)
As String
As String
i = CMojaKlasa1.MojaFunkcjaBazowa(2, 3,
i = CMojaKlasa1.MojaFunkcjaBazowa(2, 3,
4)
4)
End Function
End Function
End Class
End Class
Public Class
Public Class
CMojaKlasa1
CMojaKlasa1
Public
Public
Shared
Shared
Function
Function
MojaFunkcjaBazowa _
MojaFunkcjaBazowa _
(
(
ByVal
ByVal
x
x
As Long, ByVal
As Long, ByVal
y As Long, ByVal z
y As Long, ByVal z
As
As
Long
Long
)
)
As Long
As Long
MojaFunkcjaBazowa = (x + y) * z
MojaFunkcjaBazowa = (x + y) * z
End Function
End Function
End Class
End Class
Public Class
Public Class
CMojaKlasa2
CMojaKlasa2
Public Function
Public Function
MojaFunkcjaDziedzicaca(
MojaFunkcjaDziedzicaca(
ByVal
ByVal
i
i
As Long
As Long
)
)
As String
As String
i = CMojaKlasa1.MojaFunkcjaBazowa(2, 3,
i = CMojaKlasa1.MojaFunkcjaBazowa(2, 3,
4)
4)
End Function
End Function
End Class
End Class
92
Z wykorzystaniem metody
Public
Public
Z wykorzystaniem metody
Protected
Protected
– dostępnej
tylko z poziomu własnej klasy lub dziedziczącej:
Public Class
Public Class
CMojaKlasaBazowa3
CMojaKlasaBazowa3
Protected
Protected
Function
Function
MojaFunkcjaBazowa(
MojaFunkcjaBazowa(
ByVal
ByVal
x
x
As Long
As Long
, _
, _
ByVal
ByVal
y
y
As Long
As Long
)
)
As Long
As Long
MojaFunkcjaBazowa = x + y
MojaFunkcjaBazowa = x + y
End Function
End Function
End Class
End Class
Public Class
Public Class
CMojaKlasaDziedziczaca4
CMojaKlasaDziedziczaca4
Inherits
Inherits
CMojaKlasaBazowa3
CMojaKlasaBazowa3
Public Shadows Function
Public Shadows Function
MojaFunkcja(
MojaFunkcja(
ByVal
ByVal
e
e
As Long
As Long
)
)
As _ String
As _ String
Dim
Dim
Wynik
Wynik
As Long
As Long
Wynik = Me.MojaFunkcjaBazowa(1, 2)
Wynik = Me.MojaFunkcjaBazowa(1, 2)
End Function
End Function
End Class
End Class
Public Class
Public Class
CMojaKlasaBazowa3
CMojaKlasaBazowa3
Protected
Protected
Function
Function
MojaFunkcjaBazowa(
MojaFunkcjaBazowa(
ByVal
ByVal
x
x
As Long
As Long
, _
, _
ByVal
ByVal
y
y
As Long
As Long
)
)
As Long
As Long
MojaFunkcjaBazowa = x + y
MojaFunkcjaBazowa = x + y
End Function
End Function
End Class
End Class
Public Class
Public Class
CMojaKlasaDziedziczaca4
CMojaKlasaDziedziczaca4
Inherits
Inherits
CMojaKlasaBazowa3
CMojaKlasaBazowa3
Public Shadows Function
Public Shadows Function
MojaFunkcja(
MojaFunkcja(
ByVal
ByVal
e
e
As Long
As Long
)
)
As _ String
As _ String
Dim
Dim
Wynik
Wynik
As Long
As Long
Wynik = Me.MojaFunkcjaBazowa(1, 2)
Wynik = Me.MojaFunkcjaBazowa(1, 2)
End Function
End Function
End Class
End Class
93
Nie można wykonać następującej operacji:
Public Class
Public Class
CMojaKlasaDziedziczaca4
CMojaKlasaDziedziczaca4
Inherits
Inherits
CMojaKlasaBazowa3
CMojaKlasaBazowa3
Public Function
Public Function
MojaFunkcja(
MojaFunkcja(
ByVal
ByVal
e
e
As Long
As Long
)
)
As String
As String
Dim
Dim
Instancja
Instancja
As New
As New
CMojaKlasaBazowa3()
CMojaKlasaBazowa3()
Dim
Dim
Wynik
Wynik
As Long
As Long
Wynik =
Wynik =
Instancja
Instancja
.MojaFunkcjaBazowa(1, 2)
.MojaFunkcjaBazowa(1, 2)
‘Błąd !!!
‘Błąd !!!
End Function
End Function
End Class
End Class
Public Class
Public Class
CMojaKlasaDziedziczaca4
CMojaKlasaDziedziczaca4
Inherits
Inherits
CMojaKlasaBazowa3
CMojaKlasaBazowa3
Public Function
Public Function
MojaFunkcja(
MojaFunkcja(
ByVal
ByVal
e
e
As Long
As Long
)
)
As String
As String
Dim
Dim
Instancja
Instancja
As New
As New
CMojaKlasaBazowa3()
CMojaKlasaBazowa3()
Dim
Dim
Wynik
Wynik
As Long
As Long
Wynik =
Wynik =
Instancja
Instancja
.MojaFunkcjaBazowa(1, 2)
.MojaFunkcjaBazowa(1, 2)
‘Błąd !!!
‘Błąd !!!
End Function
End Function
End Class
End Class
Taka operacja jest możliwa dopiero po
zadeklarowaniu metody jako
Friend.
Friend.
Deklaracje metod w
VB.NET
94
Z wykorzystaniem metody
Friend
Friend
– do metody w ten sposób
zadeklarowanej można mieć dostęp w całym programie
gdzie zawarta jest jej deklaracja i gdziekolwiek indziej, ale
w ramach
danego podzespołu (assembly
):
Public Class
Public Class
CMojaKlasaBazowa3
CMojaKlasaBazowa3
Friend
Friend
Function
Function
MojaFunkcjaBazowa(
MojaFunkcjaBazowa(
ByVal
ByVal
x
x
As
As
Long,
Long,
_
_
ByVal
ByVal
y
y
As Long
As Long
)
)
As Long
As Long
MojaFunkcjaBazowa = x + y
MojaFunkcjaBazowa = x + y
End Function
End Function
End Class
End Class
Public Class
Public Class
CMojaKlasaDziedziczaca4
CMojaKlasaDziedziczaca4
Public Function
Public Function
MojaFunkcja(
MojaFunkcja(
ByVal
ByVal
e
e
As Long
As Long
)
)
As String
As String
Dim
Dim
Instancja
Instancja
As New
As New
CMojaKlasaBazowa3()
CMojaKlasaBazowa3()
Dim
Dim
Wynik
Wynik
As Long
As Long
Wynik = Instancja.MojaFunkcjaBazowa(1,
Wynik = Instancja.MojaFunkcjaBazowa(1,
2)
2)
End Function
End Function
End Class
End Class
Public Class
Public Class
CMojaKlasaBazowa3
CMojaKlasaBazowa3
Friend
Friend
Function
Function
MojaFunkcjaBazowa(
MojaFunkcjaBazowa(
ByVal
ByVal
x
x
As
As
Long,
Long,
_
_
ByVal
ByVal
y
y
As Long
As Long
)
)
As Long
As Long
MojaFunkcjaBazowa = x + y
MojaFunkcjaBazowa = x + y
End Function
End Function
End Class
End Class
Public Class
Public Class
CMojaKlasaDziedziczaca4
CMojaKlasaDziedziczaca4
Public Function
Public Function
MojaFunkcja(
MojaFunkcja(
ByVal
ByVal
e
e
As Long
As Long
)
)
As String
As String
Dim
Dim
Instancja
Instancja
As New
As New
CMojaKlasaBazowa3()
CMojaKlasaBazowa3()
Dim
Dim
Wynik
Wynik
As Long
As Long
Wynik = Instancja.MojaFunkcjaBazowa(1,
Wynik = Instancja.MojaFunkcjaBazowa(1,
2)
2)
End Function
End Function
End Class
End Class
95
Z wykorzystaniem metody
Protected Friend
Protected Friend
– dostęp
do metody zadeklarowanej w ten sposób jest taki
sam jak do metod zadeklarowanych jako
Protected
i
Friend
.
Z wykorzystaniem metody
Private
Private
– metoda
zadeklarowana w ten sposób jest dostępna tylko w
tym kontekście gdzie została zadeklarowana.
Public Class
Public Class
CMojaKlasa3
CMojaKlasa3
Private
Private
Function
Function
MojaFunkcja(
MojaFunkcja(
ByVal
ByVal
x
x
As Long
As Long
,
,
ByVal
ByVal
y
y
As _ Long
As _ Long
)
)
As Long
As Long
MojaFunkcja = x + y
MojaFunkcja = x + y
End Function
End Function
Private
Private
Function
Function
MojaFunkcja2()
MojaFunkcja2()
Dim
Dim
Wynik
Wynik
As Long
As Long
Wynik = Me.MojaFunkcja(1, 2)
Wynik = Me.MojaFunkcja(1, 2)
End Function
End Function
End Class
End Class
Public Class
Public Class
CMojaKlasa3
CMojaKlasa3
Private
Private
Function
Function
MojaFunkcja(
MojaFunkcja(
ByVal
ByVal
x
x
As Long
As Long
,
,
ByVal
ByVal
y
y
As _ Long
As _ Long
)
)
As Long
As Long
MojaFunkcja = x + y
MojaFunkcja = x + y
End Function
End Function
Private
Private
Function
Function
MojaFunkcja2()
MojaFunkcja2()
Dim
Dim
Wynik
Wynik
As Long
As Long
Wynik = Me.MojaFunkcja(1, 2)
Wynik = Me.MojaFunkcja(1, 2)
End Function
End Function
End Class
End Class
96
Z wykorzystaniem metody
Implements
Implements
, która
implementuje metodę zdefiniowaną poprzez interfejs:
Interface
Interface
IMojInterfejs
IMojInterfejs
Function
Function
MojaFunkcja(
MojaFunkcja(
ByVal
ByVal
x
x
As Long, ByVal
As Long, ByVal
y
y
As Long
As Long
) _
) _
As Long
As Long
End Interface
End Interface
Public Class
Public Class
CMojaKlasa4
CMojaKlasa4
Implements
Implements
IMojInterfejs
IMojInterfejs
Public Function
Public Function
MojaFunkcja (
MojaFunkcja (
ByVal
ByVal
x
x
As Long,
As Long,
ByVal
ByVal
y
y
As _ Long
As _ Long
)
)
As Long
As Long
Implements
Implements
IMojInterfejs.MojaFunkcja
IMojInterfejs.MojaFunkcja
MojaFunkcja = x + y
MojaFunkcja = x + y
End Function
End Function
End Class
End Class
Interface
Interface
IMojInterfejs
IMojInterfejs
Function
Function
MojaFunkcja(
MojaFunkcja(
ByVal
ByVal
x
x
As Long, ByVal
As Long, ByVal
y
y
As Long
As Long
) _
) _
As Long
As Long
End Interface
End Interface
Public Class
Public Class
CMojaKlasa4
CMojaKlasa4
Implements
Implements
IMojInterfejs
IMojInterfejs
Public Function
Public Function
MojaFunkcja (
MojaFunkcja (
ByVal
ByVal
x
x
As Long,
As Long,
ByVal
ByVal
y
y
As _ Long
As _ Long
)
)
As Long
As Long
Implements
Implements
IMojInterfejs.MojaFunkcja
IMojInterfejs.MojaFunkcja
MojaFunkcja = x + y
MojaFunkcja = x + y
End Function
End Function
End Class
End Class
Deklaracje metod w
VB.NET
97
• Dino Esposito : Tworzenie aplikacji za pomocą ASP.NET oraz
ADO.NET (Microsoft Press, Wydawnictwo RM Warszawa 2002)
• Julian Templeman, David Vitter : Visual Studio .NET: .NET
Framework. Czarna Księga (Helion 2003)
• Microsoft Press : Microsoft Visual C#.NET Encyklopedia
(Helion 2003)
• Rusty Harold : XML. Księga Eksperta (Helion 2001)
• Scott Worley : ASP.NET. Vademecum Profesjonalisty (Helion,
2003)
• Steaven Holzner : XML. Vademecum Profesjonalisty
(Helion2001)
• http://www.ASP.com
• http://www.ietf.org/RFC% 2069/
• http://www.learnASP.com
• http://www.msdn.microsoft.com/vcsharp/
• http://www.windows2003.pl
• http://www.xml.com
Literatura