Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

VB.NET Maria DEMS. 2 Podstawy Visual Basic.NET Visual Basic.NET jest jednym z podstawowych języków programowania stosowanych na platformie.NET Deklaracja.

Podobne prezentacje


Prezentacja na temat: "VB.NET Maria DEMS. 2 Podstawy Visual Basic.NET Visual Basic.NET jest jednym z podstawowych języków programowania stosowanych na platformie.NET Deklaracja."— Zapis prezentacji:

1 VB.NET Maria DEMS

2 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 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 4 Operatory w Visual Basic.NET Operatory VB.NET

5 5 Konwersja typów w VB.NET W VB.NET argumentem konwersji (rzutowania) typu jest typ Object

6 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 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 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 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 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 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 12 Instrukcje sterujące 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 27 Przystosowanie projektów do VB.NET

28 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żytkownikBaza danych

29 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 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 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 Private strKomunikat as String Public Property MsgText( ) As String Get MsgText = strKomunikat End Get

32 32 Tworzenie projektu w środowisku VB.NET Set(ByVal Value As String) strKomunikat = Value End Set End Property Class End Class KomunikatMsg W celu odczytania wartości strKomunikat z obiektu MyKomunikat klasy 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 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. Inherits Klasa pochodna wskazuje używaną przez siebie klasę bazową słowem Inherits Public Class Komunikat_1Msg Inherits KomunikatMsg End Class

34 34 Tworzenie projektu w środowisku VB.NET Do zapisywania danych klasy do pliku służy metoda Write( ) Public Function Write ( ) As Boolean Dim MsgFile As Stream Write = True Write = True MsgFile = File.Open(msg.bin, FileMode.Create) MsgFile = File.Open(msg.bin, FileMode.Create) MsgFile.Close( ) MsgFile.Close( ) //zamknięcie utworzonego pliku End Function Do automatycznego zapisywania stanu obiektu przed jego zniknięciem służy metoda Dispose ( ) Public Sub Dispose ( ) Write ( ) End Sub End Sub

35 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 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 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 36 Dziedziczenie w VB.NET Definicja metody New ( ) ma postać: Public Sub New ( ) MyBase.New( ) Read ( ) End Sub End Sub MyBase Wewnątrz podklasy odwołanie do klasy bazowej realizowane jest przy użyciu słowa kluczowego MyBase System.Windows.Forms Formularz Windows jest modułem klas dziedziczącym cechy formularza z klasy bazowej System.Windows.Forms platformy.NET lub z innego formularza.

37 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 MsgReader Utworzony formularz MsgReader służy do przeglądania i edycji wiadomości przechowywanych w obiekcie klasy Komunikat_1Msg

38 38 Tworzenie okna formularza MsgReader Utworzony formularz 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 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 40 Public Class FormularzVB Inherits System.Windows.Forms.Form Inherits System.Windows.Forms.Form Private Sub InitializeComponent() Me.TextBox = New System.Windows.Forms.TextBox() Me.TextBox = New System.Windows.Forms.TextBox() 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 System.Windows.Forms.Control() {Me.TextBox}) Me.Text = "Zadanie" End Sub End Class

41 41 Wyświetlanie pola tekstowego Private Msg AS Komunikat_1Msg Private 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 InitializeComponent( ) // MsgReader referencji do zmiennej Msg klasy Komunikat_1Msg InitializeComponent( ) TextBox.Text = Msg.MsgText( ) 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 42 Zdarzenia OK i Anuluj Zdarzenia obsługują procedury zdarzeniowe zawarte w klasie MsgReader Protected Sub btnOK_Click(ByVal sender As Object, _ 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 Object, _ ByVal e As System.EventArgs) Handles btnCancel.Click ByVal e As System.EventArgs) Handles btnCancel.Click End Sub End Sub

43 43 Uruchamianie aplikacji w Visual Basic.NET MsgReader) Domyślnie aplikacje Visual Basic.NET uruchamiane są przez wywołanie instancji domyślnego formularza (np. 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 ( ) System.Windows.Forms.Application.Run (New MsgReader(New ( ) ) ) (New MsgReader(New Komunikat_1Msg ( ) ) ) End Sub End Sub

44 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.Drawing Imports System.Drawing dziedziczona z klasy Import System.WinForms Import System.WinForms System.WinForms.Form Public Class Form1 Inherits System.WinForms.Form Imports System.ComponentModel Imports System.Drawing Imports System.Drawing dziedziczona z klasy Import System.WinForms Import System.WinForms System.WinForms.Form Public Class Form1 Inherits System.WinForms.Form Imports System.ComponentModel Imports System.Drawing Import System.WinForms Public Class Form2 Inherits Form1 Imports System.ComponentModel Imports System.Drawing Import System.WinForms Public Class Form2 Inherits Form1

45 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 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 Pracownicy objNowiPracownicy.PracownicyID = ( ) Dim objNowiPracownicy As New Pracownicy objNowiPracownicy.PracownicyID = ( )

47 47 Parametryzowane konstruktory w VB.NET Przykładowy kod w VB.NET będzie miał postać: Sub New, Konstruktor w VB.NET nie jest zdarzeniem, ale procedurą, więc jest określany poprzez instrukcję 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 ( ) Sub New (sPracownicyID AS String) kod konstruktora Sub New (sPracownicyID AS String) kod konstruktora

48 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 49 Parametryzowane konstruktory w VB.NET Domyślny konstruktor ma postać: Zmieniamy kod konstruktora następująco: Public Sub New ( ) MyBase.New Form2 = Me End Sub Public Sub New ( ) MyBase.New Form2 = Me End Sub Public Sub New (ByVal sTitlebarCaption As String ) MyBase.New Form2 = Me me.Text = sTitlebarCaption End Sub Public Sub New (ByVal sTitlebarCaption As String ) MyBase.New Form2 = Me me.Text = sTitlebarCaption End Sub

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

51 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 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 53 Przesłanianie nazw w VB.NET MustOverride MustInherit. MustOverride - dostepne jedynie dla klas zadeklarowanych jako 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, Overridable klasy potomne mogą implementować własne wersje elementów (Overridable).

54 54 Przesłanianie nazw w VB.NET Domyślny konstruktor ma postać: Public Class Klient Public Name As String Public Active As Boolean Public Sub New (ByVal sName as String, ByVal bActive As Boolean) Name = sName Active = bActive End Sub klasa potomna może zaimplementować własną wersję Public Overridable Sub CheckStatus ( ) Debug. WriteLine (Name: & Name) Debug. WriteLine (Active: & Active) End Sub End Class Public Class Klient Public Name As String Public Active As Boolean Public Sub New (ByVal sName as String, ByVal bActive As Boolean) Name = sName Active = bActive End Sub klasa potomna może zaimplementować własną wersję Public Overridable Sub CheckStatus ( ) Debug. WriteLine (Name: & Name) Debug. WriteLine (Active: & Active) End Sub End Class

55 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 56 Przesłanianie nazw w VB.NET Domyślny konstruktor ma postać: Public Class KlientDocelowy Inherits Klient Public DateToContact As Date Public DateToContact As Date deklaracja dodatkowa Public Sub New (ByVal sName as String, ByVal bActive As Boolean, ByVal datDateToContact As Date ) MyBase.New(sName, bActive) Public Sub New (ByVal sName as String, ByVal bActive As Boolean, ByVal datDateToContact As Date ) konstruktor podklasy MyBase.New(sName, bActive) konstruktor klasy bazowej DateToContact = datDateToContact DateToContact = datDateToContact dodatkowa inicjalizacja End Sub przesłonięcie metody klasy bazowej Public Overrides Sub CheckStatus ( ) MyBase.CheckStatus ( ) MyBase.CheckStatus ( ) wywołanie wersji metody klasy bazowej Debug. WriteLine (Kontakt: & DateToContact) End Sub End Class Public Class KlientDocelowy Inherits Klient Public DateToContact As Date Public DateToContact As Date deklaracja dodatkowa Public Sub New (ByVal sName as String, ByVal bActive As Boolean, ByVal datDateToContact As Date ) MyBase.New(sName, bActive) Public Sub New (ByVal sName as String, ByVal bActive As Boolean, ByVal datDateToContact As Date ) konstruktor podklasy MyBase.New(sName, bActive) konstruktor klasy bazowej DateToContact = datDateToContact DateToContact = datDateToContact dodatkowa inicjalizacja End Sub przesłonięcie metody klasy bazowej Public Overrides Sub CheckStatus ( ) MyBase.CheckStatus ( ) MyBase.CheckStatus ( ) wywołanie wersji metody klasy bazowej Debug. WriteLine (Kontakt: & DateToContact) End Sub End Class

57 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 (Siemens, True, #22/11/2003#) (Siemens, True, #22/11/2003#) objNewKlientDocelowy. CheckStatus Dim objNewKlientDocelowy As New KlientDocelowy (Siemens, True, #22/11/2003#) (Siemens, True, #22/11/2003#) objNewKlientDocelowy. CheckStatus 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 potomnejDebug 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 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 Overloads W VB.NET realizowane to jest za pomocą słowa kluczowego Overloads, np.: Overloads Sub Display (ByVal number as Integer) // ciało funkcji End Sub Overloads Sub Display (ByVal aString as String) // ciało funkcji End Sub Overloads Sub Display (ByVal number as Integer) // ciało funkcji End Sub Overloads Sub Display (ByVal aString as String) // ciało funkcji End Sub

59 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++ Shared Do tworzenia elementów współdzielonych wykorzystuje się słowo kluczowe 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 String

60 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 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 // Kod programuCatch // fragment kodu zawierający komunikat o błędzie, wykonywany, // gdy w kodzie po instrukcji Try wystąpił błądFinally // fragment kodu wykonywany niezależnie od tego czy po Try wystąpił błąd czy nie End Try Try // Kod programuCatch // fragment kodu zawierający komunikat o błędzie, wykonywany, // gdy w kodzie po instrukcji Try wystąpił błądFinally // fragment kodu wykonywany niezależnie od tego czy po Try wystąpił błąd czy nie End Try

62 62 Strukturalna obsługa języka w VB.NET TryThrow Catch Kod po instrukcji Try może zawierać instrukcję Throw, która wymusza błąd (i wykonanie sekcji kodu po Catch) VB.NET obsługuje również instrukcje On Error oraz obiekt Err. VB. NET obsługuje swobodne tworzenie wątków. Thread W celu rozpoczęcia nowego wątku typ obiektu deklarowany jest jako Thread, a podczas tworzenia instancji przekazywany jest adres, który ma być wykonany w wątku. Thread Klasa Thread posiada różne metody wstrzymywania, zawieszania, przywracania, usuwania i innych operacji dokonywanych na wątku.

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

65 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( w VB6 strName = txtName) strName = rsRecordSet.Fields (Name).Value strName = txtName.Text( w VB6 strName = txtName) strName = rsRecordSet.Fields (Name).Value txtCity = txtNewCity ( w VB6 Set txtCity = txtNewCity

66 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)( w VB6 MsgBox Witaj ) Dim sDate As String sDate = Date( ) ( w VB6 sDate = Date ) MsgBox (Witaj)( w VB6 MsgBox Witaj ) Dim sDate As String sDate = Date( ) ( w VB6 sDate = Date ) Dim strImie, strNazwisko As String w VB6 Dim strImie As String, strNazwisko As String, wiek As Integer Dim strImie, strNazwisko As String w VB6 Dim strImie As String, strNazwisko As String, wiek As Integer

67 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 1 W VB.NET nie stosuje się tablic zaczynających od indeksu 1 Dim strNazwisko As String = Kowalski Dim strNazwisko (10) As String Dim strNazwisko (10) As Stringtablica 11-elementowa (0 -10)

68 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 ( ) frmNewForm.Show ( ) Dim frmNewForm As New Form2 ( ) frmNewForm.Show ( ) Dim strImie (2) As String = (Ola, Tomek, Basia)

69 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 and, or, xor, not W VB6 operatory and, or, xor, not są używane zarówno w działaniach bitowych jak i w operacjach boolowskich and, or, xor, not BitAnd, BitOr, BitXor, BitNo W VB.NET operatory and, or, xor, not są zastrzeżone wyłącznie do operacji boolowskich; w arytmetyce bitowej stosowane są operatory BitAnd, BitOr, BitXor, BitNo

70 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 public klientID As Integer Dim klientNazwisko As String Private klientStatus As Boolean End Structure Structure klient public klientID As Integer Dim klientNazwisko As String Private klientStatus As Boolean End Structure

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

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

74 74 Kontrolki VB.NET Windows Control Library Po wygenerowaniu nowego projektu Windows Control Library kontrolki ActiveX automatycznie dziedziczą własności po klasieSystem.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 UserControl1 Inherits System.Windows.Forms.UserControl End Class Public Class UserControl1 Inherits System.Windows.Forms.UserControl End Class

75 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 UserControl1 Inherits System.Windows.Forms.CheckBox End Class Public Class UserControl1 Inherits System.Windows.Forms.CheckBox End Class

76 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 UserControl1 Inherits System.Windows.Forms.CheckBox Public Event MojeZdarzenieKliknięcia() Protected Overrides Sub OnClick(ByVal e As System.EventArgs) RaiseEvent MojeZdarzenieKliknięcia() End Sub End Class Public Class UserControl1 Inherits System.Windows.Forms.CheckBox Public Event MojeZdarzenieKliknięcia() Protected Overrides Sub OnClick(ByVal e As System.EventArgs) RaiseEvent MojeZdarzenieKliknięcia() End Sub End Class

77 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: MyBase.OnClick(e) Można najpierw wywołać metodę MyBase.OnClick(e) a później napisać obsługę zdarzenia, ale zmienia to wynik działania procedury. Protected Overrides Sub OnClick(ByVal e As System.EventArgs) RaiseEvent MojeZdarzenieKliknięcia() MyBase.OnClick(e) End Sub Protected Overrides Sub OnClick(ByVal e As System.EventArgs) RaiseEvent MojeZdarzenieKliknięcia() MyBase.OnClick(e) End Sub

78 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 UserControl11_Click(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles UserControl11.Click MsgBox("Nastąpiło kliknięcie!", MsgBoxStyle.Information) End Sub Private Sub UserControl11_Click(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles UserControl11.Click MsgBox("Nastąpiło kliknięcie!", MsgBoxStyle.Information) End Sub

79 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 PodłaczObsZdarzenia() AddHandler UserControl11.Click, AddressOf MojaObsługakliknięcia End Sub Private SubMojaObsługakliknięcia(ByVal obSend As Object, ByVal e As System.EventArgs) MsgBox("Nastąpiło kliknięcie!", MsgBoxStyle.Information) End Sub Public Sub OdlaczObsZdarzenia() RemoveHandler UserControl11.Click, AddressOf MojaObsługakliknięcia End Sub Public Sub PodłaczObsZdarzenia() AddHandler UserControl11.Click, AddressOf MojaObsługakliknięcia End Sub Private SubMojaObsługakliknięcia(ByVal obSend As Object, ByVal e As System.EventArgs) MsgBox("Nastąpiło kliknięcie!", MsgBoxStyle.Information) End Sub Public Sub OdlaczObsZdarzenia() RemoveHandler UserControl11.Click, AddressOf MojaObsługakliknięcia End Sub

80 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 81 Deklaracje metod w VB.NET attrlist. Z wykorzystaniem listy atrybutów attrlist. Definicja funkcji w VB.NET wygląda w tym przypadku następująco: [ ] [{ Overloads | Overrides | Overridable | NotOverridable | MustOverride | Shadows | Shared }] [{Public | Protected | Friend | Protected Friend | Private }] Function nazwa {(arglist)] [ As typ ] [ Implements interfejs.zdefiniowananazwa ] [ instrukcje ] [Exit Function ] [instrukcje ] End Function [ ] [{ Overloads | Overrides | Overridable | NotOverridable | MustOverride | Shadows | Shared }] [{Public | Protected | Friend | Protected Friend | Private }] Function nazwa {(arglist)] [ As typ ] [ Implements interfejs.zdefiniowananazwa ] [ instrukcje ] [Exit Function ] [instrukcje ] End Function

82 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. [ ] [{ Overloads | Overrides | Overridable | NotOverridable | MustOverride | Shadows | Shared }] [{Public | Protected | Friend | Protected Friend | Private }] Sub nazwa {(arglist)] [ Implements interfejs.zdefiniowananazwa ] [ instrukcje ] [Exit Sub ] [instrukcje ] End Sub [ ] [{ Overloads | Overrides | Overridable | NotOverridable | MustOverride | Shadows | Shared }] [{Public | Protected | Friend | Protected Friend | Private }] Sub nazwa {(arglist)] [ Implements interfejs.zdefiniowananazwa ] [ instrukcje ] [Exit Sub ] [instrukcje ] End Sub

83 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 CDll Public _ Shared Function GetWindowsDirectory(ByVal lpBuffer As StringBuilder, _ ByVal nSize As Integer) As Long Public _ Shared Function GetWindowsDirectory(ByVal lpBuffer As StringBuilder, _ ByVal nSize As Integer) As Long End Function Public _ Shared Function _ Public _ Shared Function _ GetSystemDirectory(ByVal lpBuffer As StringBuilder, ByVal nSize As _ Integer) As Long End Function Public _ Shared Function GetCommandLine() As IntPtr Public _ Shared Function GetCommandLine() As IntPtr End Function End Class Public Class CDll Public _ Shared Function GetWindowsDirectory(ByVal lpBuffer As StringBuilder, _ ByVal nSize As Integer) As Long Public _ Shared Function GetWindowsDirectory(ByVal lpBuffer As StringBuilder, _ ByVal nSize As Integer) As Long End Function Public _ Shared Function _ Public _ Shared Function _ GetSystemDirectory(ByVal lpBuffer As StringBuilder, ByVal nSize As _ Integer) As Long End Function Public _ Shared Function GetCommandLine() As IntPtr Public _ Shared Function GetCommandLine() As IntPtr End Function End Class

84 84 Overloads Z wykorzystaniem przeciążenia nazwy funkcji lub procedury z klasy bazowej - Overloads. Public Class CMojaKlasaBazowa Public Function MojaFunkcjaBazowa(ByVal x As Long, ByVal y As_ Long) As Long MojaFunkcjaBazowa = x + y End Function End Class Public Class CMojaKlasaDziedziczaca Inherits CMojaKlasaBazowa Public Overloads Function MojaFunkcjaBazowa(ByVal x As Long, _ ByVal y As Long, ByVal z As Long) As Long MojaFunkcjaBazowa = x + y + z End Function Public Function MojaFunkcjaBazowa(ByVal x As Long, ByVal y As _ Long, ByVal z As Long, ByVal Mnoz As Long) As Long Public Function MojaFunkcjaBazowa(ByVal x As Long, ByVal y As _ Long, ByVal z As Long, ByVal Mnoz As Long) As Long Błąd MojaFunkcjaBazowa = (x + y + z) * Mnoz End Function End Class Public Class CMojaKlasaBazowa Public Function MojaFunkcjaBazowa(ByVal x As Long, ByVal y As_ Long) As Long MojaFunkcjaBazowa = x + y End Function End Class Public Class CMojaKlasaDziedziczaca Inherits CMojaKlasaBazowa Public Overloads Function MojaFunkcjaBazowa(ByVal x As Long, _ ByVal y As Long, ByVal z As Long) As Long MojaFunkcjaBazowa = x + y + z End Function Public Function MojaFunkcjaBazowa(ByVal x As Long, ByVal y As _ Long, ByVal z As Long, ByVal Mnoz As Long) As Long Public Function MojaFunkcjaBazowa(ByVal x As Long, ByVal y As _ Long, ByVal z As Long, ByVal Mnoz As Long) As Long Błąd MojaFunkcjaBazowa = (x + y + z) * Mnoz End Function End Class

85 85 Overloads Nie można zastosować słowa Overloads do przeciążania metod, które różnią się od siebie tylko wartością zwracaną: Public Class CMojaKlasaBazowa Public Function MojaFunkcjaBazowa(ByVal x As Long, ByVal y As _ Long) As Long MojaFunkcjaBazowa = x + y End Function End Class Public Class CMojaKlasaDziedziczaca Inherits CMojaKlasaBazowa Public Overloads Function MojaFunkcjaBazowa(ByVal x As Long, _ ByVal y As Long) As Double Public Overloads Function MojaFunkcjaBazowa(ByVal x As Long, _ ByVal y As Long) As Double Błąd!!! MojaFunkcjaBazowa = x + y End Function Public Overloads Function MojaFunkcjaBazowa(ByVal x As Long, _ ByVal y As Long, ByVal z As Long, ByVal Mnoz As Long) As Long MojaFunkcjaBazowa = (x + y + z) * Mnoz End Function End Class Public Class CMojaKlasaBazowa Public Function MojaFunkcjaBazowa(ByVal x As Long, ByVal y As _ Long) As Long MojaFunkcjaBazowa = x + y End Function End Class Public Class CMojaKlasaDziedziczaca Inherits CMojaKlasaBazowa Public Overloads Function MojaFunkcjaBazowa(ByVal x As Long, _ ByVal y As Long) As Double Public Overloads Function MojaFunkcjaBazowa(ByVal x As Long, _ ByVal y As Long) As Double Błąd!!! MojaFunkcjaBazowa = x + y End Function Public Overloads Function MojaFunkcjaBazowa(ByVal x As Long, _ ByVal y As Long, ByVal z As Long, ByVal Mnoz As Long) As Long MojaFunkcjaBazowa = (x + y + z) * Mnoz End Function End Class

86 86 Overrides Overridable Z wykorzystaniem metody 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: Public Class CMojaKlasaDziedziczaca Inherits CMojaKlasaBazowa Public Overridable Overloads Function MojaFunkcjaBazowa(ByVal x As Long, ByVal y As Long, _ ByVal z As Long) As Long MojaFunkcjaBazowa = x + y + z End Function Public Overloads Function MojaFunkcjaBazowa(ByVal x As _ Long, ByVal y As Long, ByVal z As Long, ByVal Mnoz As _ Long) As Long MojaFunkcjaBazowa = (x + y + z) * Mnoz End Function End Class Public Class CMojaKlasaDziedziczaca Inherits CMojaKlasaBazowa Public Overridable Overloads Function MojaFunkcjaBazowa(ByVal x As Long, ByVal y As Long, _ ByVal z As Long) As Long MojaFunkcjaBazowa = x + y + z End Function Public Overloads Function MojaFunkcjaBazowa(ByVal x As _ Long, ByVal y As Long, ByVal z As Long, ByVal Mnoz As _ Long) As Long MojaFunkcjaBazowa = (x + y + z) * Mnoz End Function End Class

87 87 Overridable, Z wykorzystaniem metody Overridable, która wskazuje, że metoda z klasy bazowej może być nadpisana przez identyczną metodę w klasie dziedziczącej, lub NotOverridable Z wykorzystaniem metody NotOverridable, która oznacza, że ta metoda nie może być zastąpiona przez żadną inną metodę. Public Class CMojaKlasaDziedziczaca2 Inherits CMojaKlasaDziedziczaca Public Overloads Overrides Function MojaFunkcjaBazowa(ByVal x As Long, ByVal y As Long, _ ByVal z As Long) As Long MojaFunkcjaBazowa = (x + y) * z End Function End Class Public Class CMojaKlasaDziedziczaca2 Inherits CMojaKlasaDziedziczaca Public Overloads Overrides Function MojaFunkcjaBazowa(ByVal x As Long, ByVal y As Long, _ ByVal z As Long) As Long MojaFunkcjaBazowa = (x + y) * z End Function End Class Deklaracje metod w VB.NET

88 88 Funkcja typu NotOverridable musi sama zastępować taką samą metodę w klasie bazowej dla swej klasy. Public Class CMojaKlasaBaza2 Inherits CMojaKlasaBazowa Public NotOverridable Overrides Function MojaFunkcjaBazowa (ByVal x As Long, ByVal y As Long) As _ Long MojaFunkcjaBazowa = x + y End Function End Class End Class Metoda w klasie bazowej musi być określona jako Overridable: Public Class CMojaKlasaDziedziczaca3 Inherits CMojaKlasaBaza2 Public Overrides Function MojaFunkcjaBazowa _ Public Overrides Function MojaFunkcjaBazowa _ Błąd!!! (ByVal x As Long, ByVal y As Long) As Long MojaFunkcjaBazowa = x + y End Function End Class Public Class CMojaKlasaBaza2 Inherits CMojaKlasaBazowa Public NotOverridable Overrides Function MojaFunkcjaBazowa (ByVal x As Long, ByVal y As Long) As _ Long MojaFunkcjaBazowa = x + y End Function End Class End Class Metoda w klasie bazowej musi być określona jako Overridable: Public Class CMojaKlasaDziedziczaca3 Inherits CMojaKlasaBaza2 Public Overrides Function MojaFunkcjaBazowa _ Public Overrides Function MojaFunkcjaBazowa _ Błąd!!! (ByVal x As Long, ByVal y As Long) As Long MojaFunkcjaBazowa = x + y End Function End Class

89 89 MustOverride MustInherit Z wykorzystaniem metody 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. Public MustInherit Class CMojaKlasaBaza2 Public MustOverride Function MojaFunkcjaBazowa _ (ByVal x As Long, ByVal y As Long) As Long End Class Public Class CMojaKlasaDziedziczaca3 Inherits CMojaKlasaBaza2 Public Overrides Function MojaFunkcjaBazowa _ (ByVal x As Long, ByVal y As Long) As Long MojaFunkcjaBazowa = x + y End Function End Class Public MustInherit Class CMojaKlasaBaza2 Public MustOverride Function MojaFunkcjaBazowa _ (ByVal x As Long, ByVal y As Long) As Long End Class Public Class CMojaKlasaDziedziczaca3 Inherits CMojaKlasaBaza2 Public Overrides Function MojaFunkcjaBazowa _ (ByVal x As Long, ByVal y As Long) As Long MojaFunkcjaBazowa = x + y End Function End Class

90 90 Shadows Z wykorzystaniem metody Shadows, która wskazuje, że metoda ta zakrywa identycznie nazwany element programistyczny lub zbiór przeciążonych elementów w klasie bazowej: Public Class CMojaKlasaBazowa3 Public i As Long End Class Public Class CMojaKlasaDziedziczaca4 Inherits CMojaKlasaBazowa3 Public Shadows Function i(ByVal e As Long) As String MsgBox(e, MsgBoxStyle.Information) i = "Jest OK!" End Function End Class Public Class CMojaKlasaBazowa3 Public i As Long End Class Public Class CMojaKlasaDziedziczaca4 Inherits CMojaKlasaBazowa3 Public Shadows Function i(ByVal e As Long) As String MsgBox(e, MsgBoxStyle.Information) i = "Jest OK!" End Function End Class Deklaracje metod w VB.NET

91 91 Shared Z wykorzystaniem metody 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 CMojaKlasa1 Public Shared Function MojaFunkcjaBazowa _ (ByVal x As Long, ByVal y As Long, ByVal z As Long) As Long MojaFunkcjaBazowa = (x + y) * z End Function End Class Public Class CMojaKlasa2 Public Function MojaFunkcjaDziedzicaca(ByVal i As Long) As String i = CMojaKlasa1.MojaFunkcjaBazowa(2, 3, 4) End Function End Class Public Class CMojaKlasa1 Public Shared Function MojaFunkcjaBazowa _ (ByVal x As Long, ByVal y As Long, ByVal z As Long) As Long MojaFunkcjaBazowa = (x + y) * z End Function End Class Public Class CMojaKlasa2 Public Function MojaFunkcjaDziedzicaca(ByVal i As Long) As String i = CMojaKlasa1.MojaFunkcjaBazowa(2, 3, 4) End Function End Class

92 92 Public Z wykorzystaniem metody Public Protected Z wykorzystaniem metody Protected – dostępnej tylko z poziomu własnej klasy lub dziedziczącej: Public Class CMojaKlasaBazowa3 Protected Function MojaFunkcjaBazowa(ByVal x As Long, _ ByVal y As Long) As Long MojaFunkcjaBazowa = x + y End Function End Class Public Class CMojaKlasaDziedziczaca4 Inherits CMojaKlasaBazowa3 Public Shadows Function MojaFunkcja(ByVal e As Long) As _ String Dim Wynik As Long Wynik = Me.MojaFunkcjaBazowa(1, 2) End Function End Class Public Class CMojaKlasaBazowa3 Protected Function MojaFunkcjaBazowa(ByVal x As Long, _ ByVal y As Long) As Long MojaFunkcjaBazowa = x + y End Function End Class Public Class CMojaKlasaDziedziczaca4 Inherits CMojaKlasaBazowa3 Public Shadows Function MojaFunkcja(ByVal e As Long) As _ String Dim Wynik As Long Wynik = Me.MojaFunkcjaBazowa(1, 2) End Function End Class

93 93 Nie można wykonać następującej operacji: Public Class CMojaKlasaDziedziczaca4 Inherits CMojaKlasaBazowa3 Public Function MojaFunkcja(ByVal e As Long) As String Dim Instancja As New CMojaKlasaBazowa3() Dim Wynik As Long Wynik = Instancja.MojaFunkcjaBazowa(1, 2) Błąd !!! End Function End Class Public Class CMojaKlasaDziedziczaca4 Inherits CMojaKlasaBazowa3 Public Function MojaFunkcja(ByVal e As Long) As String Dim Instancja As New CMojaKlasaBazowa3() Dim Wynik As Long Wynik = Instancja.MojaFunkcjaBazowa(1, 2) Błąd !!! End Function End Class Friend. Taka operacja jest możliwa dopiero po zadeklarowaniu metody jako Friend. Deklaracje metod w VB.NET

94 94 Friend Z wykorzystaniem metody 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 CMojaKlasaBazowa3 Friend Function MojaFunkcjaBazowa(ByVal x As Long, _ ByVal y As Long) As Long MojaFunkcjaBazowa = x + y End Function End Class Public Class CMojaKlasaDziedziczaca4 Public Function MojaFunkcja(ByVal e As Long) As String Dim Instancja As New CMojaKlasaBazowa3() Dim Wynik As Long Wynik = Instancja.MojaFunkcjaBazowa(1, 2) End Function End Class Public Class CMojaKlasaBazowa3 Friend Function MojaFunkcjaBazowa(ByVal x As Long, _ ByVal y As Long) As Long MojaFunkcjaBazowa = x + y End Function End Class Public Class CMojaKlasaDziedziczaca4 Public Function MojaFunkcja(ByVal e As Long) As String Dim Instancja As New CMojaKlasaBazowa3() Dim Wynik As Long Wynik = Instancja.MojaFunkcjaBazowa(1, 2) End Function End Class

95 95 Protected Friend Z wykorzystaniem metody Protected Friend – dostęp do metody zadeklarowanej w ten sposób jest taki sam jak do metod zadeklarowanych jako Protected i Friend. Private Z wykorzystaniem metody Private – metoda zadeklarowana w ten sposób jest dostępna tylko w tym kontekście gdzie została zadeklarowana. Public Class CMojaKlasa3 Private Function MojaFunkcja(ByVal x As Long, ByVal y As _ Long) As Long MojaFunkcja = x + y End Function Private Function MojaFunkcja2() Dim Wynik As Long Wynik = Me.MojaFunkcja(1, 2) End Function End Class Public Class CMojaKlasa3 Private Function MojaFunkcja(ByVal x As Long, ByVal y As _ Long) As Long MojaFunkcja = x + y End Function Private Function MojaFunkcja2() Dim Wynik As Long Wynik = Me.MojaFunkcja(1, 2) End Function End Class

96 96 Implements Z wykorzystaniem metody Implements, która implementuje metodę zdefiniowaną poprzez interfejs: Interface IMojInterfejs Function MojaFunkcja(ByVal x As Long, ByVal y As Long) _ As Long End Interface Public Class CMojaKlasa4 Implements IMojInterfejs Public Function MojaFunkcja (ByVal x As Long, ByVal y As _ Long) As Long Implements IMojInterfejs.MojaFunkcja MojaFunkcja = x + y End Function End Class Interface IMojInterfejs Function MojaFunkcja(ByVal x As Long, ByVal y As Long) _ As Long End Interface Public Class CMojaKlasa4 Implements IMojInterfejs Public Function MojaFunkcja (ByVal x As Long, ByVal y As _ Long) As Long Implements IMojInterfejs.MojaFunkcja MojaFunkcja = x + y End Function End Class Deklaracje metod w VB.NET

97 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) / Literatura


Pobierz ppt "VB.NET Maria DEMS. 2 Podstawy Visual Basic.NET Visual Basic.NET jest jednym z podstawowych języków programowania stosowanych na platformie.NET Deklaracja."

Podobne prezentacje


Reklamy Google