VB.NET

97
VB.NET VB.NET Maria DEMS Maria DEMS

description

VB.NET. Maria DEMS. 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” - PowerPoint PPT Presentation

Transcript of VB.NET

Page 1: VB.NET

VB.NETVB.NET

Maria DEMSMaria DEMS

Page 2: VB.NET

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()

Page 3: VB.NET

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.

Page 4: VB.NET

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 =, ^=, *=, /=, \=, +=, _=, &=

Page 5: VB.NET

5

Konwersja typów w VB.NET

• W VB.NET argumentem konwersji (rzutowania) typu jest typ ObjectFunkcja 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

Page 6: VB.NET

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

Page 7: VB.NET

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.

Page 8: VB.NET

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.

Page 9: VB.NET

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.

Page 10: VB.NET

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)

Page 11: VB.NET

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)

Page 12: VB.NET

12

Instrukcj

e sterując

e w VB.NET

If TestPorównujący ThenJedna lub wiele instrukcji

End IfIf TestPorównujący Then InstrukcjaIf TestPorównujący Then

Jedna lub wiele instrukcjiElse

Jedna lub wiele instrukcjiEnd IfInstrukcje zagnieżdżoneIf TestPorównujący Then

Jedna lub wiele instrukcjiElse

If TestPorównujący Then Jedna lub wiele instrukcjiElse

Jedna lub wiele instrukcji Endif

End IfInstrukcje warunkowe

Page 13: VB.NET

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 Theninstrukcje, gdy warunek1 jest

prawdziwyElseIf warunek2 Then

instrukcje, gdy warunek2 jest prawdziwyElseIf warunek3 Then

instrukcje, gdy warunek3 jest prawdziwy........Else

instrukcje, gdy wszystkie warunki są fałszyweEnd If

Page 14: VB.NET

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żenieCase 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

Page 15: VB.NET

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:

DoIf warunek Then Exit DoinstrukcjeLoop

Page 16: VB.NET

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ętliinstrukcjeLoop

Do Jedna lub wiele instrukcji Loop Until warunek pętli

Page 17: VB.NET

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

Page 18: VB.NET

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

Page 19: VB.NET

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]

Page 20: VB.NET

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).

Page 21: VB.NET

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.

Page 22: VB.NET

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.

Page 23: VB.NET

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.

Page 24: VB.NET

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.

Page 25: VB.NET

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

Page 26: VB.NET

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.

Page 27: VB.NET

27

Przystosowanie projektów do VB.NET

Page 28: 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 danez bazy

Użytkownik Baza danych

Page 29: VB.NET

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

Page 30: VB.NET

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.

Page 31: VB.NET

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 KomunikatMsgPublic Class KomunikatMsg

Private strKomunikat as String

Public Property MsgText( ) As String

Get

MsgText = strKomunikat

End Get

Page 32: VB.NET

32

Tworzenie projektu w środowisku VB.NET

Set(ByVal Value As String)

strKomunikat = Value

End Set

End Property

End ClassClass 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”

Page 33: VB.NET

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 InheritsInherits

Public Class Komunikat_1MsgPublic Class Komunikat_1Msg

Inherits Inherits KomunikatMsgKomunikatMsg

End ClassEnd Class

Page 34: VB.NET

34

Tworzenie projektu w środowisku VB.NET

Do zapisywania danych klasy do pliku służy metoda Write( )

Public Function Write ( ) As BooleanPublic Function Write ( ) As Boolean

Dim MsgFile As StreamDim MsgFile As Stream

Write = TrueWrite = True

MsgFile = File.Open(„msg.bin”, FileMode.Create)MsgFile = File.Open(„msg.bin”, FileMode.Create)

MsgFile.Close( ) MsgFile.Close( ) //zamknięcie utworzonego pliku

End FunctionEnd Function Do automatycznego zapisywania stanu obiektu przed jego

zniknięciem służy metoda Dispose ( )

Public Sub Dispose ( )Public Sub Dispose ( )

Write ( )Write ( )

End SubEnd Sub

Page 35: VB.NET

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 BooleanPublic Function Read ( ) As Boolean

Dim MsgFile As StreamDim MsgFile As Stream

Read = TrueRead = 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 FunctionEnd 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).

Page 36: VB.NET

36

Dziedziczenie w VB.NET

Definicja metody New ( ) ma postać:

Public Sub New ( ) Public Sub New ( )

MyBaseMyBase.New( ).New( )

......................................

Read ( )Read ( )

End SubEnd Sub

Wewnątrz podklasy odwołanie do klasy bazowej realizowane jest przy użyciu słowa kluczowego MyBaseMyBase

Formularz Windows jest modułem klas dziedziczącym cechy formularza z klasy bazowej System.Windows.FormsSystem.Windows.Forms platformy .NET lub z innego formularza.

Page 37: VB.NET

37

Budowa obiektu MsgReader

Definicja klasy MsgReader ma postać:

Class MsgReaderClass MsgReader

Inherits System.Windows.Forms.FormInherits System.Windows.Forms.Form

Public Sub New( )Public Sub New( )

MyBase.New() MyBase.New() //tworzenie obiektu formularza

MsgReader = MeMsgReader = Me

End SubEnd Sub

End ClassEnd Class

Utworzony formularz MsgReaderMsgReader służy do przeglądania i edycji wiadomości przechowywanych w obiekcie klasy Komunikat_1Msg

Page 38: VB.NET

38

Tworzenie okna formularza

Utworzony formularz MsgReaderMsgReader 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.

Page 39: VB.NET

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.

Page 40: VB.NET

40

Public Class FormularzVBPublic Class FormularzVB

Inherits System.Windows.Forms.FormInherits System.Windows.Forms.Form

................................................................................

Private Sub InitializeComponent()Private Sub InitializeComponent()

Me.TextBox = New System.Windows.Forms.TextBox()Me.TextBox = New System.Windows.Forms.TextBox()

Me.TextBox.AcceptsReturn = TrueMe.TextBox.AcceptsReturn = True

Me.TextBox.Multiline = TrueMe.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 SubEnd Sub

End ClassEnd Class

Page 41: VB.NET

41

Wyświetlanie pola tekstowego

Private Msg AS Komunikat_1MsgPrivate Msg AS Komunikat_1Msg

Public Sub New(ByRef Msg AS Public Sub New(ByRef Msg AS Komunikat_1Msg)Komunikat_1Msg)

MyBase.New() MyBase.New() //tworzenie obiektu formularza

MsgReader = MeMsgReader = 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 SubEnd Sub Do wyświetlenia zawartości pola tekstowego

wykorzystujemy właściwość Text kontrolki TextBox, zainicjalizowanej wartością MsgText obiektu klasy Komunikat_1Msg

Page 42: VB.NET

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_ClickbtnOK_Click(ByVal sender As Object, _ (ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnOK.ClickByVal 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 SubEnd Sub

Protected Sub btnCancel_Click(ByVal sender As Object, _Protected Sub btnCancel_Click(ByVal sender As Object, _

ByVal e As System.EventArgs) Handles btnCancel.ClickByVal e As System.EventArgs) Handles btnCancel.Click

..........................................................

End SubEnd Sub

Page 43: VB.NET

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 SubEnd Sub

Page 44: VB.NET

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.ComponentModelImports System.ComponentModelImports System.DrawingImports System.Drawing ’ dziedziczona z klasy Import System.WinFormsImport System.WinForms ‘ System.WinForms.Form

Public Class Form1Public Class Form1Inherits System.WinForms.FormInherits System.WinForms.Form

Imports System.ComponentModelImports System.ComponentModelImports System.DrawingImports System.Drawing ’ dziedziczona z klasy Import System.WinFormsImport System.WinForms ‘ System.WinForms.Form

Public Class Form1Public Class Form1Inherits System.WinForms.FormInherits System.WinForms.Form

Imports System.ComponentModelImports System.ComponentModelImports System.DrawingImports System.DrawingImport System.WinFormsImport System.WinForms

Public Class Form2Public Class Form2Inherits Form1Inherits Form1

Imports System.ComponentModelImports System.ComponentModelImports System.DrawingImports System.DrawingImport System.WinFormsImport System.WinForms

Public Class Form2Public Class Form2Inherits Form1Inherits Form1

Page 45: VB.NET

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.

Page 46: VB.NET

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 PracownicyDim objNowiPracownicy As New PracownicyobjNowiPracownicy.PracownicyID = (”125-55-2345”)objNowiPracownicy.PracownicyID = (”125-55-2345”)

Dim objNowiPracownicy As New PracownicyDim objNowiPracownicy As New PracownicyobjNowiPracownicy.PracownicyID = (”125-55-2345”)objNowiPracownicy.PracownicyID = (”125-55-2345”)

Page 47: VB.NET

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 Sub New,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 (”125-55-2345”)Dim objNowiPracownicy As New Pracownicy (”125-55-2345”)Dim objNowiPracownicy As New Pracownicy (”125-55-2345”)Dim objNowiPracownicy As New Pracownicy (”125-55-2345”)

Sub New (sPracownicyID AS String)Sub New (sPracownicyID AS String)kod konstruktoraSub New (sPracownicyID AS String)Sub New (sPracownicyID AS String)kod konstruktora

Page 48: VB.NET

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.

Page 49: VB.NET

49

Parametryzowane konstruktory

w VB.NET Domyślny konstruktor ma postać:

Zmieniamy kod konstruktora następująco:

Public Sub New ( )Public Sub New ( )MyBase.NewMyBase.NewForm2 = MeForm2 = Me

End SubEnd Sub

Public Sub New ( )Public Sub New ( )MyBase.NewMyBase.NewForm2 = MeForm2 = Me

End SubEnd Sub

Public Sub New (ByVal sTitlebarCaption As String )Public Sub New (ByVal sTitlebarCaption As String )MyBase.NewMyBase.NewForm2 = MeForm2 = Meme.Text = sTitlebarCaption me.Text = sTitlebarCaption

End SubEnd Sub

Public Sub New (ByVal sTitlebarCaption As String )Public Sub New (ByVal sTitlebarCaption As String )MyBase.NewMyBase.NewForm2 = MeForm2 = Meme.Text = sTitlebarCaption me.Text = sTitlebarCaption

End SubEnd Sub

Page 50: VB.NET

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 Form2(”Formularz drugi”)Dim frmNewForm As New Form2(”Formularz drugi”)frmNewForm.Show( )frmNewForm.Show( )

Dim frmNewForm As New Form2(”Formularz drugi”)Dim frmNewForm As New Form2(”Formularz drugi”)frmNewForm.Show( )frmNewForm.Show( )

Page 51: VB.NET

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

Page 52: VB.NET

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,

Page 53: VB.NET

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 (OverridableOverridable).

Page 54: VB.NET

54

Przesłanianie nazw w VB.NET

Domyślny konstruktor ma postać:

Public Class Public Class KlientKlientPublic Name As StringPublic Name As StringPublic Active As BooleanPublic Active As Boolean

Public Sub New (ByVal sName as String, ByVal bActive Public Sub New (ByVal sName as String, ByVal bActive As Boolean)As Boolean)

Name = sNameName = sNameActive = bActiveActive = bActive

End SubEnd 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 SubEnd SubEnd ClassEnd Class

Public Class Public Class KlientKlientPublic Name As StringPublic Name As StringPublic Active As BooleanPublic Active As Boolean

Public Sub New (ByVal sName as String, ByVal bActive Public Sub New (ByVal sName as String, ByVal bActive As Boolean)As Boolean)

Name = sNameName = sNameActive = bActiveActive = bActive

End SubEnd 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 SubEnd SubEnd ClassEnd Class

Page 55: VB.NET

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.

Page 56: VB.NET

56

Przesłanianie nazw w VB.NET

Domyślny konstruktor ma postać:

Public Class Public Class KlientDocelowyKlientDocelowyInherits Inherits KlientKlient

Public DateToContact As Date Public DateToContact As Date ‘deklaracja dodatkowaPublic Public SubSub New (ByVal sName as String, ByVal bActive As New (ByVal sName as String, ByVal bActive As Boolean, ByVal datDateToContact As Date ) Boolean, ByVal datDateToContact As Date ) ‘konstruktor podklasy

MyBase.New(sName, bActive) MyBase.New(sName, bActive) ‘konstruktor klasy bazowejDateToContact = datDateToContactDateToContact = datDateToContact ‘dodatkowa inicjalizacja End SubEnd Sub‘przesłonięcie metody klasy bazowejPublic Public OverridesOverrides Sub CheckStatus ( ) Sub CheckStatus ( )MyBase.CheckStatus ( ) MyBase.CheckStatus ( ) ‘wywołanie wersji metody klasy bazowej

Debug. WriteLine (”Kontakt: ” & DateToContact)Debug. WriteLine (”Kontakt: ” & DateToContact)End SubEnd SubEnd ClassEnd Class

Public Class Public Class KlientDocelowyKlientDocelowyInherits Inherits KlientKlient

Public DateToContact As Date Public DateToContact As Date ‘deklaracja dodatkowaPublic Public SubSub New (ByVal sName as String, ByVal bActive As New (ByVal sName as String, ByVal bActive As Boolean, ByVal datDateToContact As Date ) Boolean, ByVal datDateToContact As Date ) ‘konstruktor podklasy

MyBase.New(sName, bActive) MyBase.New(sName, bActive) ‘konstruktor klasy bazowejDateToContact = datDateToContactDateToContact = datDateToContact ‘dodatkowa inicjalizacja End SubEnd Sub‘przesłonięcie metody klasy bazowejPublic Public OverridesOverrides Sub CheckStatus ( ) Sub CheckStatus ( )MyBase.CheckStatus ( ) MyBase.CheckStatus ( ) ‘wywołanie wersji metody klasy bazowej

Debug. WriteLine (”Kontakt: ” & DateToContact)Debug. WriteLine (”Kontakt: ” & DateToContact)End SubEnd SubEnd ClassEnd Class

Page 57: VB.NET

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 KlientDocelowy Dim objNewKlientDocelowy As New KlientDocelowy (”Siemens”, True, #22/11/2003#)(”Siemens”, True, #22/11/2003#)

objNewKlientDocelowy. CheckStatusobjNewKlientDocelowy. CheckStatus

Dim objNewKlientDocelowy As New KlientDocelowy Dim objNewKlientDocelowy As New KlientDocelowy (”Siemens”, True, #22/11/2003#)(”Siemens”, True, #22/11/2003#)

objNewKlientDocelowy. CheckStatusobjNewKlientDocelowy. CheckStatus

DebugDebugName: Siemens Name: Siemens //generowane metodą klasy bazowejActive: TrueActive: True //generowane metodą klasy bazowejKontakt: 22/11/2003 Kontakt: 22/11/2003 //generowane metodą klasy potomnej

DebugDebugName: Siemens Name: Siemens //generowane metodą klasy bazowejActive: TrueActive: True //generowane metodą klasy bazowejKontakt: 22/11/2003 Kontakt: 22/11/2003 //generowane metodą klasy potomnej

Page 58: VB.NET

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 OverloadsOverloads, np.:

Overloads Sub Display (ByVal number as Integer)Overloads Sub Display (ByVal number as Integer)// ciało funkcjiEnd SubEnd Sub

Overloads Sub Display (ByVal aString as String)Overloads Sub Display (ByVal aString as String)// ciało funkcjiEnd SubEnd Sub

Overloads Sub Display (ByVal number as Integer)Overloads Sub Display (ByVal number as Integer)// ciało funkcjiEnd SubEnd Sub

Overloads Sub Display (ByVal aString as String)Overloads Sub Display (ByVal aString as String)// ciało funkcjiEnd SubEnd Sub

Page 59: VB.NET

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 SharedShared, 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 StringPublic Shared CommonName As StringPublic Shared CommonName As StringPublic Shared CommonName As String

Page 60: VB.NET

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.

Page 61: VB.NET

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ć:

TryTry// Kod programu CatchCatch// fragment kodu zawierający komunikat o błędzie, wykonywany, // gdy w kodzie po instrukcji Try wystąpił błądFinallyFinally// fragment kodu wykonywany niezależnie od tego czy po Try wystąpił błąd czy nieEnd TryEnd Try

TryTry// Kod programu CatchCatch// fragment kodu zawierający komunikat o błędzie, wykonywany, // gdy w kodzie po instrukcji Try wystąpił błądFinallyFinally// fragment kodu wykonywany niezależnie od tego czy po Try wystąpił błąd czy nieEnd TryEnd Try

Page 62: VB.NET

62

Strukturalna obsługa języka w VB.NET

Kod po instrukcji TryTry może zawierać instrukcję ThrowThrow, która wymusza błąd (i wykonanie sekcji kodu po CatchCatch)

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 ThreadThread, a podczas tworzenia instancji przekazywany jest adres, który ma być wykonany w wątku.

Klasa ThreadThread posiada różne metody wstrzymywania, zawieszania, przywracania, usuwania i innych operacji dokonywanych na wątku.

Page 63: VB.NET

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

Page 64: VB.NET

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 VB6.FixedLengthString (18)Dim sFixedLengthString As New VB6.FixedLengthString (18)Dim sFixedLengthString As New VB6.FixedLengthString (18)Dim sFixedLengthString As New VB6.FixedLengthString (18)

Page 65: VB.NET

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.TextstrName = txtName.Text ( w VB6 strName = txtName)( w VB6 strName = txtName)

strName = rsRecordSet.strName = rsRecordSet.Fields Fields (”Name”).(”Name”).ValueValue

strName = txtName.TextstrName = txtName.Text ( w VB6 strName = txtName)( w VB6 strName = txtName)

strName = rsRecordSet.strName = rsRecordSet.Fields Fields (”Name”).(”Name”).ValueValue

txtCity = txtNewCitytxtCity = txtNewCity ( w VB6 Set txtCity = txtNewCity( w VB6 Set txtCity = txtNewCitytxtCity = txtNewCitytxtCity = txtNewCity ( w VB6 Set txtCity = txtNewCity( w VB6 Set txtCity = txtNewCity

Page 66: VB.NET

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 ”Witaj”( w VB6 MsgBox ”Witaj” ))Dim sDate As StringDim sDate As StringsDate = Date( ) sDate = Date( ) ( w VB6 sDate = Date( w VB6 sDate = Date ) )

MsgBox (”Witaj”)MsgBox (”Witaj”) ( w VB6 MsgBox ”Witaj”( w VB6 MsgBox ”Witaj” ))Dim sDate As StringDim sDate As StringsDate = Date( ) sDate = Date( ) ( w VB6 sDate = Date( w VB6 sDate = Date ) )

Dim strImie, strNazwisko As StringDim strImie, strNazwisko As Stringw VB6 w VB6 Dim strImie As String, strNazwisko As String, wiek As IntegerDim strImie As String, strNazwisko As String, wiek As Integer

Dim strImie, strNazwisko As StringDim strImie, strNazwisko As Stringw VB6 w VB6 Dim strImie As String, strNazwisko As String, wiek As IntegerDim strImie As String, strNazwisko As String, wiek As Integer

Page 67: VB.NET

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 11

Dim strNazwisko As String = ”Kowalski”Dim strNazwisko As String = ”Kowalski”Dim strNazwisko As String = ”Kowalski”Dim strNazwisko As String = ”Kowalski”

Dim strNazwisko (10) As StringDim strNazwisko (10) As String tablica 11-elementowa (0 -10)Dim strNazwisko (10) As StringDim strNazwisko (10) As String tablica 11-elementowa (0 -10)

Dim strNazwisko (10) As StringDim strNazwisko (10) As String tablica 11-elementowa (0 - 10)Dim strNazwisko (10) As StringDim strNazwisko (10) As String tablica 11-elementowa (0 - 10)

Page 68: VB.NET

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”, ”Tomek”, ”Basia”)Dim strImie (2) As String = („”Ola”, ”Tomek”, ”Basia”)Dim strImie (2) As String = („”Ola”, ”Tomek”, ”Basia”)Dim strImie (2) As String = („”Ola”, ”Tomek”, ”Basia”)

Page 69: VB.NET

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, notand, or, xor, not są używane zarówno w

działaniach bitowych jak i w operacjach boolowskich W VB.NET operatory and, or, xor, notand, or, xor, not są zastrzeżone

wyłącznie do operacji boolowskich; w arytmetyce bitowej stosowane są operatory BitAnd, BitOr, BitXor, BitNoBitAnd, BitOr, BitXor, BitNo

Page 70: VB.NET

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 klientStructure klientpublic klientID As Integerpublic klientID As IntegerDim klientNazwisko As StringDim klientNazwisko As StringPrivate klientStatus As BooleanPrivate klientStatus As Boolean

End Structure End Structure

Structure klientStructure klientpublic klientID As Integerpublic klientID As IntegerDim klientNazwisko As StringDim klientNazwisko As StringPrivate klientStatus As BooleanPrivate klientStatus As Boolean

End Structure End Structure

Page 71: VB.NET

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.

Page 72: VB.NET

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 Print 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..

Page 73: VB.NET

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/vb6tovbdotnet.htmhttp://msdn.microsoft.com/library/techart/vb6tovbdotnet.htmhttp://msdn.microsoft.com/library/techart/vb6tovbdotnet.htmhttp://msdn.microsoft.com/library/techart/vb6tovbdotnet.htm

http://msdn.microsoft.com/xml/general/toolkit_intro.asphttp://msdn.microsoft.com/xml/general/toolkit_intro.asphttp://msdn.microsoft.com/xml/general/toolkit_intro.asphttp://msdn.microsoft.com/xml/general/toolkit_intro.asp

Page 74: VB.NET

74

Kontrolki VB.NET Po wygenerowaniu nowego projektu Windows Control Windows Control

LibraryLibrary 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 ClassPublic Class UserControl1 UserControl1

InheritsInherits System.Windows.Forms.UserControl System.Windows.Forms.UserControl

End ClassEnd Class

Public ClassPublic Class UserControl1 UserControl1

InheritsInherits System.Windows.Forms.UserControl System.Windows.Forms.UserControl

End ClassEnd Class

Page 75: VB.NET

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 ClassPublic Class UserControl1 UserControl1

InheritsInherits System.Windows.Forms.CheckBox System.Windows.Forms.CheckBox

End ClassEnd Class

Public ClassPublic Class UserControl1 UserControl1

InheritsInherits System.Windows.Forms.CheckBox System.Windows.Forms.CheckBox

End ClassEnd Class

Page 76: VB.NET

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 ClassPublic Class UserControl1 UserControl1 InheritsInherits System.Windows.Forms.CheckBox System.Windows.Forms.CheckBox Public Public EventEvent MojeZdarzenieKliknięcia() MojeZdarzenieKliknięcia()

ProtectedProtected OverridesOverrides SubSub OnClick( OnClick(ByValByVal e e AsAs System.EventArgs) System.EventArgs) RaiseEventRaiseEvent MojeZdarzenieKliknięcia() MojeZdarzenieKliknięcia() EndEnd Sub Sub

End ClassEnd Class

Public ClassPublic Class UserControl1 UserControl1 InheritsInherits System.Windows.Forms.CheckBox System.Windows.Forms.CheckBox Public Public EventEvent MojeZdarzenieKliknięcia() MojeZdarzenieKliknięcia()

ProtectedProtected OverridesOverrides SubSub OnClick( OnClick(ByValByVal e e AsAs System.EventArgs) System.EventArgs) RaiseEventRaiseEvent MojeZdarzenieKliknięcia() MojeZdarzenieKliknięcia() EndEnd Sub Sub

End ClassEnd Class

Page 77: VB.NET

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 OverridesProtected Overrides SubSub OnClick( OnClick(ByValByVal e e AsAs System.EventArgs) System.EventArgs) RaiseEventRaiseEvent MojeZdarzenieKliknięcia() MojeZdarzenieKliknięcia() MyBaseMyBase.OnClick(e) .OnClick(e) EndEnd Sub Sub

Protected OverridesProtected Overrides SubSub OnClick( OnClick(ByValByVal e e AsAs System.EventArgs) System.EventArgs) RaiseEventRaiseEvent MojeZdarzenieKliknięcia() MojeZdarzenieKliknięcia() MyBaseMyBase.OnClick(e) .OnClick(e) EndEnd Sub Sub

Page 78: VB.NET

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 SubPrivate Sub UserControl11_Click( UserControl11_Click(ByValByVal sender sender AsAs ObjectObject, , ByValByVal e e AsAs 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)

EndEnd SubSub

Private SubPrivate Sub UserControl11_Click( UserControl11_Click(ByValByVal sender sender AsAs ObjectObject, , ByValByVal e e AsAs 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)

EndEnd SubSub

Page 79: VB.NET

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 SubPublic Sub PodłaczObsZdarzenia() PodłaczObsZdarzenia() AddHandlerAddHandler UserControl11.Click, UserControl11.Click, AddressOfAddressOf MojaObsługakliknięcia MojaObsługakliknięcia

EndEnd SubSub PrivatePrivate SubSubMojaObsługakliknięcia(MojaObsługakliknięcia(ByValByVal obSend obSend AsAs ObjectObject, , ByValByVal e e AsAs System.EventArgs) System.EventArgs)

MsgBox("Nastąpiło kliknięcie!", MsgBoxStyle.Information) MsgBox("Nastąpiło kliknięcie!", MsgBoxStyle.Information) EndEnd SubSub Public SubPublic Sub OdlaczObsZdarzenia() OdlaczObsZdarzenia()

RemoveHandlerRemoveHandler UserControl11.Click, UserControl11.Click, AddressOfAddressOf MojaObsługakliknięcia MojaObsługakliknięcia

EndEnd SubSub

Public SubPublic Sub PodłaczObsZdarzenia() PodłaczObsZdarzenia() AddHandlerAddHandler UserControl11.Click, UserControl11.Click, AddressOfAddressOf MojaObsługakliknięcia MojaObsługakliknięcia

EndEnd SubSub PrivatePrivate SubSubMojaObsługakliknięcia(MojaObsługakliknięcia(ByValByVal obSend obSend AsAs ObjectObject, , ByValByVal e e AsAs System.EventArgs) System.EventArgs)

MsgBox("Nastąpiło kliknięcie!", MsgBoxStyle.Information) MsgBox("Nastąpiło kliknięcie!", MsgBoxStyle.Information) EndEnd SubSub Public SubPublic Sub OdlaczObsZdarzenia() OdlaczObsZdarzenia()

RemoveHandlerRemoveHandler UserControl11.Click, UserControl11.Click, AddressOfAddressOf MojaObsługakliknięcia MojaObsługakliknięcia

EndEnd SubSub

Page 80: VB.NET

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

Page 81: 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:

[<[<attrlistattrlist>] >] [{ Overloads | Overrides | Overridable |[{ Overloads | Overrides | Overridable |NotOverridable | MustOverride | Shadows | Shared }]NotOverridable | MustOverride | Shadows | Shared }][{Public | Protected | Friend | Protected Friend | Private }][{Public | Protected | Friend | Protected Friend | Private }]

Function Function nazwa {(arglist)] [ nazwa {(arglist)] [ As As typ ] [ typ ] [ Implements Implements interfejs.zdefiniowananazwa ]interfejs.zdefiniowananazwa ]

[ instrukcje ][ instrukcje ][[Exit FunctionExit Function ] ]

[instrukcje ][instrukcje ]End FunctionEnd Function

[<[<attrlistattrlist>] >] [{ Overloads | Overrides | Overridable |[{ Overloads | Overrides | Overridable |NotOverridable | MustOverride | Shadows | Shared }]NotOverridable | MustOverride | Shadows | Shared }][{Public | Protected | Friend | Protected Friend | Private }][{Public | Protected | Friend | Protected Friend | Private }]

Function Function nazwa {(arglist)] [ nazwa {(arglist)] [ As As typ ] [ typ ] [ Implements Implements interfejs.zdefiniowananazwa ]interfejs.zdefiniowananazwa ]

[ instrukcje ][ instrukcje ][[Exit FunctionExit Function ] ]

[instrukcje ][instrukcje ]End FunctionEnd Function

Page 82: VB.NET

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.

[<[<attrlistattrlist>] >] [{ Overloads | Overrides | Overridable |[{ Overloads | Overrides | Overridable |NotOverridable | MustOverride | Shadows | Shared }]NotOverridable | MustOverride | Shadows | Shared }]

[{Public | Protected | Friend | Protected Friend | Private }][{Public | Protected | Friend | Protected Friend | Private }]SubSub nazwa {(arglist)] [ nazwa {(arglist)] [ Implements Implements interfejs.zdefiniowananazwa ]interfejs.zdefiniowananazwa ]

[ instrukcje ][ instrukcje ][[Exit SubExit Sub ] ]

[instrukcje ][instrukcje ]End SubEnd Sub

[<[<attrlistattrlist>] >] [{ Overloads | Overrides | Overridable |[{ Overloads | Overrides | Overridable |NotOverridable | MustOverride | Shadows | Shared }]NotOverridable | MustOverride | Shadows | Shared }]

[{Public | Protected | Friend | Protected Friend | Private }][{Public | Protected | Friend | Protected Friend | Private }]SubSub nazwa {(arglist)] [ nazwa {(arglist)] [ Implements Implements interfejs.zdefiniowananazwa ]interfejs.zdefiniowananazwa ]

[ instrukcje ][ instrukcje ][[Exit SubExit Sub ] ]

[instrukcje ][instrukcje ]End SubEnd Sub

Page 83: VB.NET

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 ClassPublic Class CDllCDll<<DllImportDllImport("Kernel32", EntryPoint:="GetWindowsDirectory")> ("Kernel32", EntryPoint:="GetWindowsDirectory")> Public _ Public _ Shared FunctionShared Function GetWindowsDirectory( GetWindowsDirectory(ByValByVal lpBuffer lpBuffer AsAs StringBuilder, _ StringBuilder, _ ByVaByVal nSize l nSize AsAs Integer) As LongInteger) As Long

End FunctionEnd Function<<DllImportDllImport("Kernel32", EntryPoint:="GetSystemDirectory")> ("Kernel32", EntryPoint:="GetSystemDirectory")> Public _ Public _ Shared Function _Shared Function _GetSystemDirectory(GetSystemDirectory(ByValByVal lpBuffer lpBuffer AsAs StringBuilder, StringBuilder, ByValByVal nSize nSize As _ As _ Integer) As LongInteger) As Long

End FunctionEnd Function<<DllImportDllImport("Kernel32", EntryPoint:="GetCommandLine")> ("Kernel32", EntryPoint:="GetCommandLine")> Public _ Public _ Shared FunctionShared Function GetCommandLine() GetCommandLine() AsAs IntPtr IntPtr

End FunctionEnd FunctionEnd ClassEnd Class

Public ClassPublic Class CDllCDll<<DllImportDllImport("Kernel32", EntryPoint:="GetWindowsDirectory")> ("Kernel32", EntryPoint:="GetWindowsDirectory")> Public _ Public _ Shared FunctionShared Function GetWindowsDirectory( GetWindowsDirectory(ByValByVal lpBuffer lpBuffer AsAs StringBuilder, _ StringBuilder, _ ByVaByVal nSize l nSize AsAs Integer) As LongInteger) As Long

End FunctionEnd Function<<DllImportDllImport("Kernel32", EntryPoint:="GetSystemDirectory")> ("Kernel32", EntryPoint:="GetSystemDirectory")> Public _ Public _ Shared Function _Shared Function _GetSystemDirectory(GetSystemDirectory(ByValByVal lpBuffer lpBuffer AsAs StringBuilder, StringBuilder, ByValByVal nSize nSize As _ As _ Integer) As LongInteger) As Long

End FunctionEnd Function<<DllImportDllImport("Kernel32", EntryPoint:="GetCommandLine")> ("Kernel32", EntryPoint:="GetCommandLine")> Public _ Public _ Shared FunctionShared Function GetCommandLine() GetCommandLine() AsAs IntPtr IntPtr

End FunctionEnd FunctionEnd ClassEnd Class

Page 84: VB.NET

84

Z wykorzystaniem przeciążenia nazwy funkcji lub procedury z klasy bazowej - OverloadsOverloads.

Public ClassPublic Class CMojaKlasaBazowa CMojaKlasaBazowaPublic FunctionPublic Function MojaFunkcjaBazowa( MojaFunkcjaBazowa(ByValByVal x x As LongAs Long, , ByValByVal y y As_ As_ Long) As LongLong) As Long

MojaFunkcjaBazowa = x + yMojaFunkcjaBazowa = x + yEnd FunctionEnd Function

End ClassEnd ClassPublic ClassPublic Class CMojaKlasaDziedziczacaCMojaKlasaDziedziczacaInherits Inherits CMojaKlasaBazowaCMojaKlasaBazowaPublic Public OverloadsOverloads FunctionFunction MojaFunkcjaBazowa( MojaFunkcjaBazowa(ByValByVal x x As Long, _ As Long, _ ByValByVal y y As Long, ByValAs Long, ByVal z z As LongAs Long) ) As LongAs Long

MojaFunkcjaBazowa = x + y + zMojaFunkcjaBazowa = x + y + zEnd FunctionEnd Function

Public Function Public Function MojaFunkcjaBazowa(MojaFunkcjaBazowa(ByVal ByVal x x As LongAs Long, , ByVal ByVal y y As _ As _ LongLong, , ByVal ByVal z z As LongAs Long, , ByValByVal Mnoz Mnoz As LongAs Long) ) As LongAs Long „Błąd”

MojaFunkcjaBazowa = (x + y + z) * MnozMojaFunkcjaBazowa = (x + y + z) * MnozEnd FunctionEnd Function

End ClassEnd Class

Public ClassPublic Class CMojaKlasaBazowa CMojaKlasaBazowaPublic FunctionPublic Function MojaFunkcjaBazowa( MojaFunkcjaBazowa(ByValByVal x x As LongAs Long, , ByValByVal y y As_ As_ Long) As LongLong) As Long

MojaFunkcjaBazowa = x + yMojaFunkcjaBazowa = x + yEnd FunctionEnd Function

End ClassEnd ClassPublic ClassPublic Class CMojaKlasaDziedziczacaCMojaKlasaDziedziczacaInherits Inherits CMojaKlasaBazowaCMojaKlasaBazowaPublic Public OverloadsOverloads FunctionFunction MojaFunkcjaBazowa( MojaFunkcjaBazowa(ByValByVal x x As Long, _ As Long, _ ByValByVal y y As Long, ByValAs Long, ByVal z z As LongAs Long) ) As LongAs Long

MojaFunkcjaBazowa = x + y + zMojaFunkcjaBazowa = x + y + zEnd FunctionEnd Function

Public Function Public Function MojaFunkcjaBazowa(MojaFunkcjaBazowa(ByVal ByVal x x As LongAs Long, , ByVal ByVal y y As _ As _ LongLong, , ByVal ByVal z z As LongAs Long, , ByValByVal Mnoz Mnoz As LongAs Long) ) As LongAs Long „Błąd”

MojaFunkcjaBazowa = (x + y + z) * MnozMojaFunkcjaBazowa = (x + y + z) * MnozEnd FunctionEnd Function

End ClassEnd Class

Page 85: VB.NET

85

Nie można zastosować słowa OverloadsOverloads do przeciążania metod, które różnią się od siebie tylko wartością zwracaną:

Public ClassPublic Class CMojaKlasaBazowa CMojaKlasaBazowaPublic FunctionPublic Function MojaFunkcjaBazowa( MojaFunkcjaBazowa(ByValByVal x x As Long, ByValAs Long, ByVal y y As _ As _ LongLong) ) As LongAs Long

MojaFunkcjaBazowa = x + yMojaFunkcjaBazowa = x + yEnd FunctionEnd Function

End ClassEnd ClassPublic ClassPublic Class CMojaKlasaDziedziczaca CMojaKlasaDziedziczaca

Inherits Inherits CMojaKlasaBazowaCMojaKlasaBazowaPublic OverloadsPublic Overloads FunctionFunction MojaFunkcjaBazowa( MojaFunkcjaBazowa(ByVal ByVal x x As Long,As Long, _ _ ByValByVal y y As LongAs Long) ) As DoubleAs Double ’Błąd!!!

MojaFunkcjaBazowa = x + y MojaFunkcjaBazowa = x + y End FunctionEnd Function

Public Overloads FunctionPublic Overloads Function MojaFunkcjaBazowa( MojaFunkcjaBazowa(ByVal ByVal x x As Long, _ As Long, _ ByValByVal y y As LongAs Long,, ByVa ByVal z l z As LongAs Long, , ByValByVal Mnoz Mnoz As LongAs Long) ) As LongAs Long

MojaFunkcjaBazowa = (x + y + z) * MnozMojaFunkcjaBazowa = (x + y + z) * MnozEnd FunctionEnd Function

End ClassEnd Class

Public ClassPublic Class CMojaKlasaBazowa CMojaKlasaBazowaPublic FunctionPublic Function MojaFunkcjaBazowa( MojaFunkcjaBazowa(ByValByVal x x As Long, ByValAs Long, ByVal y y As _ As _ LongLong) ) As LongAs Long

MojaFunkcjaBazowa = x + yMojaFunkcjaBazowa = x + yEnd FunctionEnd Function

End ClassEnd ClassPublic ClassPublic Class CMojaKlasaDziedziczaca CMojaKlasaDziedziczaca

Inherits Inherits CMojaKlasaBazowaCMojaKlasaBazowaPublic OverloadsPublic Overloads FunctionFunction MojaFunkcjaBazowa( MojaFunkcjaBazowa(ByVal ByVal x x As Long,As Long, _ _ ByValByVal y y As LongAs Long) ) As DoubleAs Double ’Błąd!!!

MojaFunkcjaBazowa = x + y MojaFunkcjaBazowa = x + y End FunctionEnd Function

Public Overloads FunctionPublic Overloads Function MojaFunkcjaBazowa( MojaFunkcjaBazowa(ByVal ByVal x x As Long, _ As Long, _ ByValByVal y y As LongAs Long,, ByVa ByVal z l z As LongAs Long, , ByValByVal Mnoz Mnoz As LongAs Long) ) As LongAs Long

MojaFunkcjaBazowa = (x + y + z) * MnozMojaFunkcjaBazowa = (x + y + z) * MnozEnd FunctionEnd Function

End ClassEnd Class

Page 86: VB.NET

86

Z wykorzystaniem metody OverridesOverrides, 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 OverridableOverridable:

Public ClassPublic Class CMojaKlasaDziedziczaca CMojaKlasaDziedziczacaInherits Inherits CMojaKlasaBazowaCMojaKlasaBazowa

Public Public OverridableOverridable Overloads Function Overloads Function MojaFunkcjaBazowa(MojaFunkcjaBazowa(ByValByVal x x As Long, ByValAs Long, ByVal y y As Long, _ As Long, _ ByValByVal z z As LongAs Long) ) As LongAs Long

MojaFunkcjaBazowa = x + y + zMojaFunkcjaBazowa = x + y + zEnd FunctionEnd Function

Public Overloads FunctionPublic Overloads Function MojaFunkcjaBazowa( MojaFunkcjaBazowa(ByValByVal x x As _ As _ Long, ByValLong, ByVal y y As Long, ByValAs Long, ByVal z z As Long, ByValAs Long, ByVal Mnoz Mnoz As _ As _ LongLong) ) As LongAs Long

MojaFunkcjaBazowa = (x + y + z) * MnozMojaFunkcjaBazowa = (x + y + z) * MnozEnd FunctionEnd Function

End ClassEnd Class

Public ClassPublic Class CMojaKlasaDziedziczaca CMojaKlasaDziedziczacaInherits Inherits CMojaKlasaBazowaCMojaKlasaBazowa

Public Public OverridableOverridable Overloads Function Overloads Function MojaFunkcjaBazowa(MojaFunkcjaBazowa(ByValByVal x x As Long, ByValAs Long, ByVal y y As Long, _ As Long, _ ByValByVal z z As LongAs Long) ) As LongAs Long

MojaFunkcjaBazowa = x + y + zMojaFunkcjaBazowa = x + y + zEnd FunctionEnd Function

Public Overloads FunctionPublic Overloads Function MojaFunkcjaBazowa( MojaFunkcjaBazowa(ByValByVal x x As _ As _ Long, ByValLong, ByVal y y As Long, ByValAs Long, ByVal z z As Long, ByValAs Long, ByVal Mnoz Mnoz As _ As _ LongLong) ) As LongAs Long

MojaFunkcjaBazowa = (x + y + z) * MnozMojaFunkcjaBazowa = (x + y + z) * MnozEnd FunctionEnd Function

End ClassEnd Class

Page 87: VB.NET

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 NotOverridableNotOverridable, która oznacza, że ta metoda nie może być zastąpiona przez żadną inną metodę.

Public ClassPublic Class CMojaKlasaDziedziczaca2 CMojaKlasaDziedziczaca2Inherits Inherits CMojaKlasaDziedziczacaCMojaKlasaDziedziczaca

Public Overloads Public Overloads OverridesOverrides Function Function MojaFunkcjaBazowa(MojaFunkcjaBazowa(ByVal ByVal x x As LongAs Long, , ByValByVal y y As LongAs Long, _, _ByVal ByVal z z As LongAs Long) ) As LongAs Long

MojaFunkcjaBazowa = (x + y) * zMojaFunkcjaBazowa = (x + y) * zEnd FunctionEnd Function

End ClassEnd Class

Public ClassPublic Class CMojaKlasaDziedziczaca2 CMojaKlasaDziedziczaca2Inherits Inherits CMojaKlasaDziedziczacaCMojaKlasaDziedziczaca

Public Overloads Public Overloads OverridesOverrides Function Function MojaFunkcjaBazowa(MojaFunkcjaBazowa(ByVal ByVal x x As LongAs Long, , ByValByVal y y As LongAs Long, _, _ByVal ByVal z z As LongAs Long) ) As LongAs Long

MojaFunkcjaBazowa = (x + y) * zMojaFunkcjaBazowa = (x + y) * zEnd FunctionEnd Function

End ClassEnd Class

Deklaracje metod w VB.NET

Page 88: VB.NET

88

Funkcja typu NotOverridable musi sama zastępować taką samą metodę w klasie bazowej dla swej klasy.

Public ClassPublic Class CMojaKlasaBaza2 CMojaKlasaBaza2Inherits Inherits CMojaKlasaBazowaCMojaKlasaBazowa

Public Public NotOverridableNotOverridable Overrides Function Overrides Function MojaFunkcjaBazowa (MojaFunkcjaBazowa (ByValByVal x x As Long, ByValAs Long, ByVal y y As LongAs Long) ) AsAs _ _ LongLong

MojaFunkcjaBazowa = x + yMojaFunkcjaBazowa = x + yEnd FunctionEnd Function

End Class End Class Metoda w klasie bazowej musi być określona jako Overridable:

Public ClassPublic Class CMojaKlasaDziedziczaca3 CMojaKlasaDziedziczaca3Inherits Inherits CMojaKlasaBaza2CMojaKlasaBaza2

Public Public OverridesOverrides Function Function MojaFunkcjaBazowa _ MojaFunkcjaBazowa _ Błąd!!!((ByVal ByVal x x As LongAs Long, , ByValByVal y y As LongAs Long) ) As LongAs Long

MojaFunkcjaBazowa = x + yMojaFunkcjaBazowa = x + yEnd FunctionEnd Function

End ClassEnd Class

Public ClassPublic Class CMojaKlasaBaza2 CMojaKlasaBaza2Inherits Inherits CMojaKlasaBazowaCMojaKlasaBazowa

Public Public NotOverridableNotOverridable Overrides Function Overrides Function MojaFunkcjaBazowa (MojaFunkcjaBazowa (ByValByVal x x As Long, ByValAs Long, ByVal y y As LongAs Long) ) AsAs _ _ LongLong

MojaFunkcjaBazowa = x + yMojaFunkcjaBazowa = x + yEnd FunctionEnd Function

End Class End Class Metoda w klasie bazowej musi być określona jako Overridable:

Public ClassPublic Class CMojaKlasaDziedziczaca3 CMojaKlasaDziedziczaca3Inherits Inherits CMojaKlasaBaza2CMojaKlasaBaza2

Public Public OverridesOverrides Function Function MojaFunkcjaBazowa _ MojaFunkcjaBazowa _ Błąd!!!((ByVal ByVal x x As LongAs Long, , ByValByVal y y As LongAs Long) ) As LongAs Long

MojaFunkcjaBazowa = x + yMojaFunkcjaBazowa = x + yEnd FunctionEnd Function

End ClassEnd Class

Page 89: VB.NET

89

Z wykorzystaniem metody MustOverrideMustOverride, 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 MustInheritMustInherit.

Public Public MustInheritMustInherit Class Class CMojaKlasaBaza2 CMojaKlasaBaza2Public Public MustOverride MustOverride FunctionFunction MojaFunkcjaBazowa _ MojaFunkcjaBazowa _

((ByValByVal x x As Long, ByValAs Long, ByVal y y As LongAs Long) ) As LongAs LongEnd ClassEnd Class

Public ClassPublic Class CMojaKlasaDziedziczaca3 CMojaKlasaDziedziczaca3InheritsInherits CMojaKlasaBaza2 CMojaKlasaBaza2

Public Overrides FunctionPublic Overrides Function MojaFunkcjaBazowa _ MojaFunkcjaBazowa _((ByValByVal x x As LongAs Long, , ByValByVal y y As LongAs Long) ) As LongAs Long

MojaFunkcjaBazowa = x + yMojaFunkcjaBazowa = x + yEnd FunctionEnd Function

End ClassEnd Class

Public Public MustInheritMustInherit Class Class CMojaKlasaBaza2 CMojaKlasaBaza2Public Public MustOverride MustOverride FunctionFunction MojaFunkcjaBazowa _ MojaFunkcjaBazowa _

((ByValByVal x x As Long, ByValAs Long, ByVal y y As LongAs Long) ) As LongAs LongEnd ClassEnd Class

Public ClassPublic Class CMojaKlasaDziedziczaca3 CMojaKlasaDziedziczaca3InheritsInherits CMojaKlasaBaza2 CMojaKlasaBaza2

Public Overrides FunctionPublic Overrides Function MojaFunkcjaBazowa _ MojaFunkcjaBazowa _((ByValByVal x x As LongAs Long, , ByValByVal y y As LongAs Long) ) As LongAs Long

MojaFunkcjaBazowa = x + yMojaFunkcjaBazowa = x + yEnd FunctionEnd Function

End ClassEnd Class

Page 90: VB.NET

90

Z wykorzystaniem metody ShadowsShadows, która wskazuje, że metoda ta zakrywa identycznie nazwany element programistyczny lub zbiór przeciążonych elementów w klasie bazowej:

Public ClassPublic Class CMojaKlasaBazowa3 CMojaKlasaBazowa3PublicPublic i i As LongAs Long

End ClassEnd ClassPublic ClassPublic Class CMojaKlasaDziedziczaca4 CMojaKlasaDziedziczaca4

Inherits Inherits CMojaKlasaBazowa3CMojaKlasaBazowa3Public Public Shadows Shadows FunctionFunction i( i(ByValByVal e e As LongAs Long) ) As StringAs String

MsgBox(e, MsgBoxStyle.Information)MsgBox(e, MsgBoxStyle.Information)i = "Jest OK!"i = "Jest OK!"

End FunctionEnd FunctionEnd ClassEnd Class

Public ClassPublic Class CMojaKlasaBazowa3 CMojaKlasaBazowa3PublicPublic i i As LongAs Long

End ClassEnd ClassPublic ClassPublic Class CMojaKlasaDziedziczaca4 CMojaKlasaDziedziczaca4

Inherits Inherits CMojaKlasaBazowa3CMojaKlasaBazowa3Public Public Shadows Shadows FunctionFunction i( i(ByValByVal e e As LongAs Long) ) As StringAs String

MsgBox(e, MsgBoxStyle.Information)MsgBox(e, MsgBoxStyle.Information)i = "Jest OK!"i = "Jest OK!"

End FunctionEnd FunctionEnd ClassEnd Class

Deklaracje metod w VB.NET

Page 91: VB.NET

91

Z wykorzystaniem metody SharedShared , 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 ClassPublic Class CMojaKlasa1 CMojaKlasa1PublicPublic Shared Shared Function Function MojaFunkcjaBazowa _MojaFunkcjaBazowa _((ByValByVal x x As Long, ByValAs Long, ByVal y As Long, ByVal z y As Long, ByVal z As LongAs Long) ) As LongAs Long

MojaFunkcjaBazowa = (x + y) * zMojaFunkcjaBazowa = (x + y) * zEnd FunctionEnd Function

End ClassEnd ClassPublic ClassPublic Class CMojaKlasa2 CMojaKlasa2Public FunctionPublic Function MojaFunkcjaDziedzicaca( MojaFunkcjaDziedzicaca(ByValByVal i i As LongAs Long) ) As As StringString

i = CMojaKlasa1.MojaFunkcjaBazowa(2, 3, 4)i = CMojaKlasa1.MojaFunkcjaBazowa(2, 3, 4)End FunctionEnd Function

End ClassEnd Class

Public ClassPublic Class CMojaKlasa1 CMojaKlasa1PublicPublic Shared Shared Function Function MojaFunkcjaBazowa _MojaFunkcjaBazowa _((ByValByVal x x As Long, ByValAs Long, ByVal y As Long, ByVal z y As Long, ByVal z As LongAs Long) ) As LongAs Long

MojaFunkcjaBazowa = (x + y) * zMojaFunkcjaBazowa = (x + y) * zEnd FunctionEnd Function

End ClassEnd ClassPublic ClassPublic Class CMojaKlasa2 CMojaKlasa2Public FunctionPublic Function MojaFunkcjaDziedzicaca( MojaFunkcjaDziedzicaca(ByValByVal i i As LongAs Long) ) As As StringString

i = CMojaKlasa1.MojaFunkcjaBazowa(2, 3, 4)i = CMojaKlasa1.MojaFunkcjaBazowa(2, 3, 4)End FunctionEnd Function

End ClassEnd Class

Page 92: VB.NET

92

Z wykorzystaniem metody Public Public Z wykorzystaniem metody Protected Protected – dostępnej tylko z

poziomu własnej klasy lub dziedziczącej:

Public ClassPublic Class CMojaKlasaBazowa3 CMojaKlasaBazowa3ProtectedProtected Function Function MojaFunkcjaBazowa( MojaFunkcjaBazowa(ByValByVal x x As LongAs Long, _ , _ ByValByVal y y As LongAs Long) ) As LongAs Long

MojaFunkcjaBazowa = x + yMojaFunkcjaBazowa = x + yEnd FunctionEnd Function

End ClassEnd ClassPublic ClassPublic Class CMojaKlasaDziedziczaca4 CMojaKlasaDziedziczaca4

Inherits Inherits CMojaKlasaBazowa3CMojaKlasaBazowa3Public Shadows FunctionPublic Shadows Function MojaFunkcja( MojaFunkcja(ByVal ByVal e e As LongAs Long) ) As _ As _ StringString

Dim Dim Wynik Wynik As LongAs LongWynik = Me.MojaFunkcjaBazowa(1, 2)Wynik = Me.MojaFunkcjaBazowa(1, 2)

End FunctionEnd FunctionEnd Class End Class

Public ClassPublic Class CMojaKlasaBazowa3 CMojaKlasaBazowa3ProtectedProtected Function Function MojaFunkcjaBazowa( MojaFunkcjaBazowa(ByValByVal x x As LongAs Long, _ , _ ByValByVal y y As LongAs Long) ) As LongAs Long

MojaFunkcjaBazowa = x + yMojaFunkcjaBazowa = x + yEnd FunctionEnd Function

End ClassEnd ClassPublic ClassPublic Class CMojaKlasaDziedziczaca4 CMojaKlasaDziedziczaca4

Inherits Inherits CMojaKlasaBazowa3CMojaKlasaBazowa3Public Shadows FunctionPublic Shadows Function MojaFunkcja( MojaFunkcja(ByVal ByVal e e As LongAs Long) ) As _ As _ StringString

Dim Dim Wynik Wynik As LongAs LongWynik = Me.MojaFunkcjaBazowa(1, 2)Wynik = Me.MojaFunkcjaBazowa(1, 2)

End FunctionEnd FunctionEnd Class End Class

Page 93: VB.NET

93

Nie można wykonać następującej operacji:

Public ClassPublic Class CMojaKlasaDziedziczaca4 CMojaKlasaDziedziczaca4InheritsInherits CMojaKlasaBazowa3 CMojaKlasaBazowa3

Public FunctionPublic Function MojaFunkcja( MojaFunkcja(ByVal ByVal e e As LongAs Long) ) As StringAs StringDimDim InstancjaInstancja As NewAs New CMojaKlasaBazowa3() CMojaKlasaBazowa3()Dim Dim Wynik Wynik As LongAs Long

Wynik = Wynik = InstancjaInstancja.MojaFunkcjaBazowa(1, 2) .MojaFunkcjaBazowa(1, 2) ‘Błąd !!!‘Błąd !!!End FunctionEnd Function

End ClassEnd Class

Public ClassPublic Class CMojaKlasaDziedziczaca4 CMojaKlasaDziedziczaca4InheritsInherits CMojaKlasaBazowa3 CMojaKlasaBazowa3

Public FunctionPublic Function MojaFunkcja( MojaFunkcja(ByVal ByVal e e As LongAs Long) ) As StringAs StringDimDim InstancjaInstancja As NewAs New CMojaKlasaBazowa3() CMojaKlasaBazowa3()Dim Dim Wynik Wynik As LongAs Long

Wynik = Wynik = InstancjaInstancja.MojaFunkcjaBazowa(1, 2) .MojaFunkcjaBazowa(1, 2) ‘Błąd !!!‘Błąd !!!End FunctionEnd Function

End ClassEnd Class

Taka operacja jest możliwa dopiero po zadeklarowaniu metody jako Friend.Friend.

Deklaracje metod w VB.NET

Page 94: 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 ClassPublic Class CMojaKlasaBazowa3 CMojaKlasaBazowa3Friend Friend FunctionFunction MojaFunkcjaBazowa( MojaFunkcjaBazowa(ByVal ByVal x x As Long,As Long, _ _ ByVal ByVal y y As LongAs Long) ) As LongAs Long

MojaFunkcjaBazowa = x + yMojaFunkcjaBazowa = x + yEnd FunctionEnd Function

End ClassEnd ClassPublic ClassPublic Class CMojaKlasaDziedziczaca4 CMojaKlasaDziedziczaca4Public FunctionPublic Function MojaFunkcja( MojaFunkcja(ByValByVal e e As LongAs Long) ) As StringAs String

DimDim Instancja Instancja As NewAs New CMojaKlasaBazowa3() CMojaKlasaBazowa3()Dim Dim Wynik Wynik As LongAs LongWynik = Instancja.MojaFunkcjaBazowa(1, 2)Wynik = Instancja.MojaFunkcjaBazowa(1, 2)

End FunctionEnd FunctionEnd ClassEnd Class

Public ClassPublic Class CMojaKlasaBazowa3 CMojaKlasaBazowa3Friend Friend FunctionFunction MojaFunkcjaBazowa( MojaFunkcjaBazowa(ByVal ByVal x x As Long,As Long, _ _ ByVal ByVal y y As LongAs Long) ) As LongAs Long

MojaFunkcjaBazowa = x + yMojaFunkcjaBazowa = x + yEnd FunctionEnd Function

End ClassEnd ClassPublic ClassPublic Class CMojaKlasaDziedziczaca4 CMojaKlasaDziedziczaca4Public FunctionPublic Function MojaFunkcja( MojaFunkcja(ByValByVal e e As LongAs Long) ) As StringAs String

DimDim Instancja Instancja As NewAs New CMojaKlasaBazowa3() CMojaKlasaBazowa3()Dim Dim Wynik Wynik As LongAs LongWynik = Instancja.MojaFunkcjaBazowa(1, 2)Wynik = Instancja.MojaFunkcjaBazowa(1, 2)

End FunctionEnd FunctionEnd ClassEnd Class

Page 95: VB.NET

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 ClassPublic Class CMojaKlasa3 CMojaKlasa3PrivatePrivate FunctionFunction MojaFunkcja( MojaFunkcja(ByValByVal x x As LongAs Long, , ByVal ByVal y y As _ As _ LongLong) ) As LongAs Long

MojaFunkcja = x + yMojaFunkcja = x + yEnd FunctionEnd Function

Private Private FunctionFunction MojaFunkcja2() MojaFunkcja2()Dim Dim Wynik Wynik As LongAs LongWynik = Me.MojaFunkcja(1, 2)Wynik = Me.MojaFunkcja(1, 2)

End FunctionEnd FunctionEnd ClassEnd Class

Public ClassPublic Class CMojaKlasa3 CMojaKlasa3PrivatePrivate FunctionFunction MojaFunkcja( MojaFunkcja(ByValByVal x x As LongAs Long, , ByVal ByVal y y As _ As _ LongLong) ) As LongAs Long

MojaFunkcja = x + yMojaFunkcja = x + yEnd FunctionEnd Function

Private Private FunctionFunction MojaFunkcja2() MojaFunkcja2()Dim Dim Wynik Wynik As LongAs LongWynik = Me.MojaFunkcja(1, 2)Wynik = Me.MojaFunkcja(1, 2)

End FunctionEnd FunctionEnd ClassEnd Class

Page 96: VB.NET

96

Z wykorzystaniem metody Implements Implements , która implementuje metodę zdefiniowaną poprzez interfejs:

Interface Interface IMojInterfejsIMojInterfejsFunction Function MojaFunkcja(MojaFunkcja(ByValByVal x x As Long, ByValAs Long, ByVal y y As LongAs Long) _ ) _ As LongAs LongEnd InterfaceEnd Interface

Public ClassPublic Class CMojaKlasa4 CMojaKlasa4Implements Implements IMojInterfejsIMojInterfejs

Public FunctionPublic Function MojaFunkcja ( MojaFunkcja (ByVal ByVal x x As Long, ByValAs Long, ByVal y y As _ As _ LongLong) ) As LongAs Long Implements Implements IMojInterfejs.MojaFunkcjaIMojInterfejs.MojaFunkcja

MojaFunkcja = x + yMojaFunkcja = x + yEnd FunctionEnd Function

End ClassEnd Class

Interface Interface IMojInterfejsIMojInterfejsFunction Function MojaFunkcja(MojaFunkcja(ByValByVal x x As Long, ByValAs Long, ByVal y y As LongAs Long) _ ) _ As LongAs LongEnd InterfaceEnd Interface

Public ClassPublic Class CMojaKlasa4 CMojaKlasa4Implements Implements IMojInterfejsIMojInterfejs

Public FunctionPublic Function MojaFunkcja ( MojaFunkcja (ByVal ByVal x x As Long, ByValAs Long, ByVal y y As _ As _ LongLong) ) As LongAs Long Implements Implements IMojInterfejs.MojaFunkcjaIMojInterfejs.MojaFunkcja

MojaFunkcja = x + yMojaFunkcja = x + yEnd FunctionEnd Function

End ClassEnd Class

Deklaracje metod w VB.NET

Page 97: 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