Visual Basic .NET - Jezyki Programowania na Platformie .NET

Transkrypt

Visual Basic .NET - Jezyki Programowania na Platformie .NET
Visual Basic .NET
Języki Programowania na Platformie .NET (część 2)
Tomasz Goluch
http://www.kaims.pl/∼goluch/
[email protected]
Wersje VB, VS, .NET oraz C#
VB 1.0 (1991)
VB 1.0 for DOS (1992)
VB 2.0 (1992)
VB 3.0 (1993)
VB 4.0 (1995) 32-bit
VB 5.0/VS 97 (1997)
VB/VS 6.0 (1998)
VB/VS 7.0 .NET 1.0 (2002) / C#1.0
VB/VS 7.1 .NET 1.1 (2003) / C#1.2
VB/VS 8.0 .NET 2.0 (2005) / C#2.0
VB/VS 9.0 .NET 3.5 (2008) / C#3.0
VB/VS 10.0 .NET 4.0 (2010) / C#4.0
VB/VS 11.0 .NET 4.5 (2012) / C#5.0
VB/VS 14.0 .NET 4.6 (2015) / C#6.0
Tomasz Goluch
Visual Basic .NET
Wersje VB, VS, .NET oraz C#
VB/VS 7.0 .NET 1.0 (2002) / C#1.0
wprowadzenie platformy .NET Framework
wprowadzenie języka C#i J#podobnych w składni do języka
Java
VB/VS 7.1 .NET 1.1 (2003) / C#1.2
VB/VS 8.0 .NET 2.0 (2005) / C#2.0
Tomasz Goluch
Visual Basic .NET
Wersje VB, VS, .NET oraz C#
VB/VS 7.0 .NET 1.0 (2002) / C#1.0
wprowadzenie platformy .NET Framework
wprowadzenie języka C#i J#podobnych w składni do języka
Java
wprowadzenie rozszerzenia Managed C++obsługującego
platformę .NET
VB/VS 7.1 .NET 1.1 (2003) / C#1.2
VB/VS 8.0 .NET 2.0 (2005) / C#2.0
Tomasz Goluch
Visual Basic .NET
Wersje VB, VS, .NET oraz C#
VB/VS 7.0 .NET 1.0 (2002) / C#1.0
wprowadzenie platformy .NET Framework
wprowadzenie języka C#i J#podobnych w składni do języka
Java
wprowadzenie rozszerzenia Managed C++obsługującego
platformę .NET
VB/VS 7.1 .NET 1.1 (2003) / C#1.2
wsparcie w oprogramowywaniu i użytkowaniu urządzeń
mobilnych ASP.NET
VB/VS 8.0 .NET 2.0 (2005) / C#2.0
Tomasz Goluch
Visual Basic .NET
Wersje VB, VS, .NET oraz C#
VB/VS 7.0 .NET 1.0 (2002) / C#1.0
wprowadzenie platformy .NET Framework
wprowadzenie języka C#i J#podobnych w składni do języka
Java
wprowadzenie rozszerzenia Managed C++obsługującego
platformę .NET
VB/VS 7.1 .NET 1.1 (2003) / C#1.2
wsparcie w oprogramowywaniu i użytkowaniu urządzeń
mobilnych ASP.NET
VB/VS 8.0 .NET 2.0 (2005) / C#2.0
typy generyczne
Tomasz Goluch
Visual Basic .NET
Wersje VB, VS, .NET oraz C#
VB/VS 7.0 .NET 1.0 (2002) / C#1.0
wprowadzenie platformy .NET Framework
wprowadzenie języka C#i J#podobnych w składni do języka
Java
wprowadzenie rozszerzenia Managed C++obsługującego
platformę .NET
VB/VS 7.1 .NET 1.1 (2003) / C#1.2
wsparcie w oprogramowywaniu i użytkowaniu urządzeń
mobilnych ASP.NET
VB/VS 8.0 .NET 2.0 (2005) / C#2.0
typy generyczne
wprowadzenie języka C++/CLI w miejsce Managed C++
Tomasz Goluch
Visual Basic .NET
Wersje VB, VS, .NET oraz C#
VB/VS 7.0 .NET 1.0 (2002) / C#1.0
wprowadzenie platformy .NET Framework
wprowadzenie języka C#i J#podobnych w składni do języka
Java
wprowadzenie rozszerzenia Managed C++obsługującego
platformę .NET
VB/VS 7.1 .NET 1.1 (2003) / C#1.2
wsparcie w oprogramowywaniu i użytkowaniu urządzeń
mobilnych ASP.NET
VB/VS 8.0 .NET 2.0 (2005) / C#2.0
typy generyczne
wprowadzenie języka C++/CLI w miejsce Managed C++
Tomasz Goluch
Visual Basic .NET
Wersje VB, VS, .NET oraz C#
VB/VS 9.0 .NET 3.5 (2008) / C#3.0
rezygnacja z języka J#
LINQ, wyrażenia lambda
VB/VS 10.0 .NET 4.0 (2010) / C#4.0
Tomasz Goluch
Visual Basic .NET
Wersje VB, VS, .NET oraz C#
VB/VS 9.0 .NET 3.5 (2008) / C#3.0
rezygnacja z języka J#
LINQ, wyrażenia lambda
VB/VS 10.0 .NET 4.0 (2010) / C#4.0
słowo kluczowe „dynamic”
Tomasz Goluch
Visual Basic .NET
Wersje VB, VS, .NET oraz C#
VB/VS 9.0 .NET 3.5 (2008) / C#3.0
rezygnacja z języka J#
LINQ, wyrażenia lambda
VB/VS 10.0 .NET 4.0 (2010) / C#4.0
słowo kluczowe „dynamic”
wprowadzenie języka F#
Tomasz Goluch
Visual Basic .NET
Wersje VB, VS, .NET oraz C#
VB/VS 9.0 .NET 3.5 (2008) / C#3.0
rezygnacja z języka J#
LINQ, wyrażenia lambda
VB/VS 10.0 .NET 4.0 (2010) / C#4.0
słowo kluczowe „dynamic”
wprowadzenie języka F#
Tomasz Goluch
Visual Basic .NET
Wersje VB, VS, .NET oraz C#
VB/VS 11.0 .NET 4.5 (2012) / C#5.0
słowa kluczowe „async” i „await”
VB/VS 14.0 .NET 4.6 (2013) / C#6.0
Auto property initializer
Tomasz Goluch
Visual Basic .NET
Wersje VB, VS, .NET oraz C#
VB/VS 11.0 .NET 4.5 (2012) / C#5.0
słowa kluczowe „async” i „await”
VB/VS 14.0 .NET 4.6 (2013) / C#6.0
Auto property initializer
Primary constructors
Tomasz Goluch
Visual Basic .NET
Wersje VB, VS, .NET oraz C#
VB/VS 11.0 .NET 4.5 (2012) / C#5.0
słowa kluczowe „async” i „await”
VB/VS 14.0 .NET 4.6 (2013) / C#6.0
Auto property initializer
Primary constructors
Static typename
Tomasz Goluch
Visual Basic .NET
Wersje VB, VS, .NET oraz C#
VB/VS 11.0 .NET 4.5 (2012) / C#5.0
słowa kluczowe „async” i „await”
VB/VS 14.0 .NET 4.6 (2013) / C#6.0
Auto property initializer
Primary constructors
Static typename
New collection initializers
Tomasz Goluch
Visual Basic .NET
Wersje VB, VS, .NET oraz C#
VB/VS 11.0 .NET 4.5 (2012) / C#5.0
słowa kluczowe „async” i „await”
VB/VS 14.0 .NET 4.6 (2013) / C#6.0
Auto property initializer
Primary constructors
Static typename
New collection initializers
New numbers syntax
Tomasz Goluch
Visual Basic .NET
Wersje VB, VS, .NET oraz C#
VB/VS 11.0 .NET 4.5 (2012) / C#5.0
słowa kluczowe „async” i „await”
VB/VS 14.0 .NET 4.6 (2013) / C#6.0
Auto property initializer
Primary constructors
Static typename
New collection initializers
New numbers syntax
kompilator Rosyl – open source (np. można napisać
rozszerzenia by wyświetlać własne ostrzeżenia i błędy w
trakcie kompilowania kodu)
Tomasz Goluch
Visual Basic .NET
Wersje VB, VS, .NET oraz C#
VB/VS 11.0 .NET 4.5 (2012) / C#5.0
słowa kluczowe „async” i „await”
VB/VS 14.0 .NET 4.6 (2013) / C#6.0
Auto property initializer
Primary constructors
Static typename
New collection initializers
New numbers syntax
kompilator Rosyl – open source (np. można napisać
rozszerzenia by wyświetlać własne ostrzeżenia i błędy w
trakcie kompilowania kodu)
Tomasz Goluch
Visual Basic .NET
Visual Basic .NET? vs C#
VB nie jest case-sensitive (trudniej o błąd, ale mniejsza liczba
kombinacji nazw)
instrukcja Select Case odpowiednik Switch z
C#współpracuje z operatorami porównania: <,<=,>,>=,=,<>
Tomasz Goluch
Visual Basic .NET
Visual Basic .NET? vs C#
VB nie jest case-sensitive (trudniej o błąd, ale mniejsza liczba
kombinacji nazw)
instrukcja Select Case odpowiednik Switch z
C#współpracuje z operatorami porównania: <,<=,>,>=,=,<>
analogicznie typ wyliczeniowy Enum współpracuje z w/w
operatorami i to nawet przy włączonej opcji Strict
kompilatora
Tomasz Goluch
Visual Basic .NET
Visual Basic .NET? vs C#
VB nie jest case-sensitive (trudniej o błąd, ale mniejsza liczba
kombinacji nazw)
instrukcja Select Case odpowiednik Switch z
C#współpracuje z operatorami porównania: <,<=,>,>=,=,<>
analogicznie typ wyliczeniowy Enum współpracuje z w/w
operatorami i to nawet przy włączonej opcji Strict
kompilatora
słowo kluczowe WithEvents wraz z Handles pozwala na
deklaratywny sposób określania obsługi zdarzeń
Tomasz Goluch
Visual Basic .NET
Visual Basic .NET? vs C#
VB nie jest case-sensitive (trudniej o błąd, ale mniejsza liczba
kombinacji nazw)
instrukcja Select Case odpowiednik Switch z
C#współpracuje z operatorami porównania: <,<=,>,>=,=,<>
analogicznie typ wyliczeniowy Enum współpracuje z w/w
operatorami i to nawet przy włączonej opcji Strict
kompilatora
słowo kluczowe WithEvents wraz z Handles pozwala na
deklaratywny sposób określania obsługi zdarzeń
dzięki RaiseEvent istnieje możliwość wyświetlenia listy
dostępnych zdarzeń i dodawania obsługi nowego bez
opuszczania okna z kodem (doryczy równiez zmiennych
zadeklarowanych z WithEvents)
Tomasz Goluch
Visual Basic .NET
Visual Basic .NET? vs C#
VB nie jest case-sensitive (trudniej o błąd, ale mniejsza liczba
kombinacji nazw)
instrukcja Select Case odpowiednik Switch z
C#współpracuje z operatorami porównania: <,<=,>,>=,=,<>
analogicznie typ wyliczeniowy Enum współpracuje z w/w
operatorami i to nawet przy włączonej opcji Strict
kompilatora
słowo kluczowe WithEvents wraz z Handles pozwala na
deklaratywny sposób określania obsługi zdarzeń
dzięki RaiseEvent istnieje możliwość wyświetlenia listy
dostępnych zdarzeń i dodawania obsługi nowego bez
opuszczania okna z kodem (doryczy równiez zmiennych
zadeklarowanych z WithEvents)
w zasiegu składni: With objectExpression ... End With
– można wykonać szereg odwołań do określonego obiektu bez
podwania jego nazwy.
Tomasz Goluch
Visual Basic .NET
Visual Basic .NET? vs C#
VB nie jest case-sensitive (trudniej o błąd, ale mniejsza liczba
kombinacji nazw)
instrukcja Select Case odpowiednik Switch z
C#współpracuje z operatorami porównania: <,<=,>,>=,=,<>
analogicznie typ wyliczeniowy Enum współpracuje z w/w
operatorami i to nawet przy włączonej opcji Strict
kompilatora
słowo kluczowe WithEvents wraz z Handles pozwala na
deklaratywny sposób określania obsługi zdarzeń
dzięki RaiseEvent istnieje możliwość wyświetlenia listy
dostępnych zdarzeń i dodawania obsługi nowego bez
opuszczania okna z kodem (doryczy równiez zmiennych
zadeklarowanych z WithEvents)
w zasiegu składni: With objectExpression ... End With
– można wykonać szereg odwołań do określonego obiektu bez
podwania jego nazwy.
Tomasz Goluch
Visual Basic .NET
Visual Basic .NET? vs C#
bardziej intuicyjny, naturalny, np. operatory:
VB: and, or, not, &, =
C#: &&, ||,
!, +, ==
lub deklaracja zmiennych:
VB: Dim Name As String = "Tomek"
C#: string Name = "Tomek"
Tomasz Goluch
Visual Basic .NET
Visual Basic .NET? vs C#
bardziej intuicyjny, naturalny, np. operatory:
VB: and, or, not, &, =
C#: &&, ||,
!, +, ==
lub deklaracja zmiennych:
VB: Dim Name As String = "Tomek"
C#: string Name = "Tomek"
lepsza współpraca z Intellisens’em (np. automatyczne
dopisywanie kodu właściwości)
Tomasz Goluch
Visual Basic .NET
Visual Basic .NET? vs C#
bardziej intuicyjny, naturalny, np. operatory:
VB: and, or, not, &, =
C#: &&, ||,
!, +, ==
lub deklaracja zmiennych:
VB: Dim Name As String = "Tomek"
C#: string Name = "Tomek"
lepsza współpraca z Intellisens’em (np. automatyczne
dopisywanie kodu właściwości)
funkcje których nie ma w C#: IsNumeric, PMT
Dim s As String = "3"
If IsNumeric(s) Then
MessageBox.Show("numeric")
Else
MessageBox.Show("not numeric")
End If
Tomasz Goluch
Basicdodając
.NET
w C#można skorzystać
z w/w Visual
metod
referencję do
Visual Basic .NET? vs C#
bardziej intuicyjny, naturalny, np. operatory:
VB: and, or, not, &, =
C#: &&, ||,
!, +, ==
lub deklaracja zmiennych:
VB: Dim Name As String = "Tomek"
C#: string Name = "Tomek"
lepsza współpraca z Intellisens’em (np. automatyczne
dopisywanie kodu właściwości)
funkcje których nie ma w C#: IsNumeric, PMT
Dim s As String = "3"
If IsNumeric(s) Then
MessageBox.Show("numeric")
Else
MessageBox.Show("not numeric")
End If
Tomasz Goluch
Basicdodając
.NET
w C#można skorzystać
z w/w Visual
metod
referencję do
Visual Basic .NET? vs C#
przestrzeń nazw My zapewnia dostęp do informacji oraz
obiektów powiązanych z aplikacją i środowiskiem
wykonawczym.
możliwość dynamicznej zmiany ”ostatniego” rozmiaru tablicy
przy pomocy słowa kluczowego ReDim Preserve.
Tomasz Goluch
Visual Basic .NET
Visual Basic .NET? vs C#
przestrzeń nazw My zapewnia dostęp do informacji oraz
obiektów powiązanych z aplikacją i środowiskiem
wykonawczym.
możliwość dynamicznej zmiany ”ostatniego” rozmiaru tablicy
przy pomocy słowa kluczowego ReDim Preserve.
brak wsparcia dla kodu niebezpiecznego – odpowiedniki słów
kluczowych: unsafe i fixed
Tomasz Goluch
Visual Basic .NET
Visual Basic .NET? vs C#
przestrzeń nazw My zapewnia dostęp do informacji oraz
obiektów powiązanych z aplikacją i środowiskiem
wykonawczym.
możliwość dynamicznej zmiany ”ostatniego” rozmiaru tablicy
przy pomocy słowa kluczowego ReDim Preserve.
brak wsparcia dla kodu niebezpiecznego – odpowiedniki słów
kluczowych: unsafe i fixed
brak odpowiednika ++i, i++, w środowisku wielowątkowym
należy użyć (analogicznie jak w C#) metod: Increment ,
Decrement z przestrzeni nazw:
System.Threading.Interlocked
Tomasz Goluch
Visual Basic .NET
Visual Basic .NET? vs C#
przestrzeń nazw My zapewnia dostęp do informacji oraz
obiektów powiązanych z aplikacją i środowiskiem
wykonawczym.
możliwość dynamicznej zmiany ”ostatniego” rozmiaru tablicy
przy pomocy słowa kluczowego ReDim Preserve.
brak wsparcia dla kodu niebezpiecznego – odpowiedniki słów
kluczowych: unsafe i fixed
brak odpowiednika ++i, i++, w środowisku wielowątkowym
należy użyć (analogicznie jak w C#) metod: Increment ,
Decrement z przestrzeni nazw:
System.Threading.Interlocked
obsługa literałów XML (wiązanie jednego języka z innym – co
jeśli XML ewoluuje?)
Tomasz Goluch
Visual Basic .NET
Visual Basic .NET? vs C#
przestrzeń nazw My zapewnia dostęp do informacji oraz
obiektów powiązanych z aplikacją i środowiskiem
wykonawczym.
możliwość dynamicznej zmiany ”ostatniego” rozmiaru tablicy
przy pomocy słowa kluczowego ReDim Preserve.
brak wsparcia dla kodu niebezpiecznego – odpowiedniki słów
kluczowych: unsafe i fixed
brak odpowiednika ++i, i++, w środowisku wielowątkowym
należy użyć (analogicznie jak w C#) metod: Increment ,
Decrement z przestrzeni nazw:
System.Threading.Interlocked
obsługa literałów XML (wiązanie jednego języka z innym – co
jeśli XML ewoluuje?)
deklaracja daty w linii: Dim data As Date = #12/31/2000#
Tomasz Goluch
Visual Basic .NET
Visual Basic .NET? vs C#
przestrzeń nazw My zapewnia dostęp do informacji oraz
obiektów powiązanych z aplikacją i środowiskiem
wykonawczym.
możliwość dynamicznej zmiany ”ostatniego” rozmiaru tablicy
przy pomocy słowa kluczowego ReDim Preserve.
brak wsparcia dla kodu niebezpiecznego – odpowiedniki słów
kluczowych: unsafe i fixed
brak odpowiednika ++i, i++, w środowisku wielowątkowym
należy użyć (analogicznie jak w C#) metod: Increment ,
Decrement z przestrzeni nazw:
System.Threading.Interlocked
obsługa literałów XML (wiązanie jednego języka z innym – co
jeśli XML ewoluuje?)
deklaracja daty w linii: Dim data As Date = #12/31/2000#
moduły
Tomasz Goluch
Visual Basic .NET
Visual Basic .NET? vs C#
przestrzeń nazw My zapewnia dostęp do informacji oraz
obiektów powiązanych z aplikacją i środowiskiem
wykonawczym.
możliwość dynamicznej zmiany ”ostatniego” rozmiaru tablicy
przy pomocy słowa kluczowego ReDim Preserve.
brak wsparcia dla kodu niebezpiecznego – odpowiedniki słów
kluczowych: unsafe i fixed
brak odpowiednika ++i, i++, w środowisku wielowątkowym
należy użyć (analogicznie jak w C#) metod: Increment ,
Decrement z przestrzeni nazw:
System.Threading.Interlocked
obsługa literałów XML (wiązanie jednego języka z innym – co
jeśli XML ewoluuje?)
deklaracja daty w linii: Dim data As Date = #12/31/2000#
moduły
Tomasz Goluch
Visual Basic .NET
Podstawy
koniec linii = koniec instrukcji
znak oznacza kontynuację linii (musi być poprzedzony
przynajmniej jednym białym znakiem), np.:
Sub Print( _
x As Integer )
Tomasz Goluch
Visual Basic .NET
Podstawy
koniec linii = koniec instrukcji
znak oznacza kontynuację linii (musi być poprzedzony
przynajmniej jednym białym znakiem), np.:
Sub Print( _
x As Integer )
Instr1 : Instr2 - kilka instrukcji w jednym wierszu
Tomasz Goluch
Visual Basic .NET
Podstawy
koniec linii = koniec instrukcji
znak oznacza kontynuację linii (musi być poprzedzony
przynajmniej jednym białym znakiem), np.:
Sub Print( _
x As Integer )
Instr1 : Instr2 - kilka instrukcji w jednym wierszu
’, REM - początek komentarza liniowego (brak komentarza
blokowego)
Tomasz Goluch
Visual Basic .NET
Podstawy
koniec linii = koniec instrukcji
znak oznacza kontynuację linii (musi być poprzedzony
przynajmniej jednym białym znakiem), np.:
Sub Print( _
x As Integer )
Instr1 : Instr2 - kilka instrukcji w jednym wierszu
’, REM - początek komentarza liniowego (brak komentarza
blokowego)
Tomasz Goluch
Visual Basic .NET
Deklaracja zmiennej
[ <atrybuty> ] [ dostęp ]
[[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] lista_zmiennych
Public – element dostępny w zakresie całego projektu (nie
można deklarować elementów publicznych w procedurach)
Protected – element dostępny tylko wewnątrz klasy oraz w
klasach potomnych (można używać tylko na poziomie klas)
1
modułów, klas, struktur
Tomasz Goluch
Visual Basic .NET
Deklaracja zmiennej
[ <atrybuty> ] [ dostęp ]
[[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] lista_zmiennych
Public – element dostępny w zakresie całego projektu (nie
można deklarować elementów publicznych w procedurach)
Protected – element dostępny tylko wewnątrz klasy oraz w
klasach potomnych (można używać tylko na poziomie klas)
Friend – element dostępny wewnątrz podzespołu „assembly”
(można używać tylko na poziomie modułów1 , interfejsów lub
przestrzeni nazw)
1
modułów, klas, struktur
Tomasz Goluch
Visual Basic .NET
Deklaracja zmiennej
[ <atrybuty> ] [ dostęp ]
[[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] lista_zmiennych
Public – element dostępny w zakresie całego projektu (nie
można deklarować elementów publicznych w procedurach)
Protected – element dostępny tylko wewnątrz klasy oraz w
klasach potomnych (można używać tylko na poziomie klas)
Friend – element dostępny wewnątrz podzespołu „assembly”
(można używać tylko na poziomie modułów1 , interfejsów lub
przestrzeni nazw)
Protected Friend – suma powyższych dwóch
1
modułów, klas, struktur
Tomasz Goluch
Visual Basic .NET
Deklaracja zmiennej
[ <atrybuty> ] [ dostęp ]
[[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] lista_zmiennych
Public – element dostępny w zakresie całego projektu (nie
można deklarować elementów publicznych w procedurach)
Protected – element dostępny tylko wewnątrz klasy oraz w
klasach potomnych (można używać tylko na poziomie klas)
Friend – element dostępny wewnątrz podzespołu „assembly”
(można używać tylko na poziomie modułów1 , interfejsów lub
przestrzeni nazw)
Protected Friend – suma powyższych dwóch
Private – element dostępny jedynie wewnątrz tego samego
modułu, klasy lub struktury (można używać tylko na poziomie
modułów)
1
modułów, klas, struktur
Tomasz Goluch
Visual Basic .NET
Deklaracja zmiennej
[ <atrybuty> ] [ dostęp ]
[[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] lista_zmiennych
Public – element dostępny w zakresie całego projektu (nie
można deklarować elementów publicznych w procedurach)
Protected – element dostępny tylko wewnątrz klasy oraz w
klasach potomnych (można używać tylko na poziomie klas)
Friend – element dostępny wewnątrz podzespołu „assembly”
(można używać tylko na poziomie modułów1 , interfejsów lub
przestrzeni nazw)
Protected Friend – suma powyższych dwóch
Private – element dostępny jedynie wewnątrz tego samego
modułu, klasy lub struktury (można używać tylko na poziomie
modułów)
1
modułów, klas, struktur
Tomasz Goluch
Visual Basic .NET
Deklaracja zmiennej
[ <atrybuty> ] [ dostęp ]
[[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] lista_zmiennych
Shared: wszystkie instancje struktury lub klasy współdzielą
tą samą zmienną
Shadows: zmienna „ukrywa” zmienną o tej samej nazwie
w klasie bazowej
Tomasz Goluch
Visual Basic .NET
Deklaracja zmiennej
[ <atrybuty> ] [ dostęp ]
[[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] lista_zmiennych
Shared: wszystkie instancje struktury lub klasy współdzielą
tą samą zmienną
Shadows: zmienna „ukrywa” zmienną o tej samej nazwie
w klasie bazowej
Static: zmienna istnieje pomiędzy wywołaniami procedury
Tomasz Goluch
Visual Basic .NET
Deklaracja zmiennej
[ <atrybuty> ] [ dostęp ]
[[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] lista_zmiennych
Shared: wszystkie instancje struktury lub klasy współdzielą
tą samą zmienną
Shadows: zmienna „ukrywa” zmienną o tej samej nazwie
w klasie bazowej
Static: zmienna istnieje pomiędzy wywołaniami procedury
Dim: słowo kluczowe informujące o deklaracji zmiennej
Tomasz Goluch
Visual Basic .NET
Deklaracja zmiennej
[ <atrybuty> ] [ dostęp ]
[[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] lista_zmiennych
Shared: wszystkie instancje struktury lub klasy współdzielą
tą samą zmienną
Shadows: zmienna „ukrywa” zmienną o tej samej nazwie
w klasie bazowej
Static: zmienna istnieje pomiędzy wywołaniami procedury
Dim: słowo kluczowe informujące o deklaracji zmiennej
WithEvents: informuje, że zmienna jest obiektem typu, który
może generować zdarzenia, które można przechwycić
Tomasz Goluch
Visual Basic .NET
Deklaracja zmiennej
[ <atrybuty> ] [ dostęp ]
[[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] lista_zmiennych
Shared: wszystkie instancje struktury lub klasy współdzielą
tą samą zmienną
Shadows: zmienna „ukrywa” zmienną o tej samej nazwie
w klasie bazowej
Static: zmienna istnieje pomiędzy wywołaniami procedury
Dim: słowo kluczowe informujące o deklaracji zmiennej
WithEvents: informuje, że zmienna jest obiektem typu, który
może generować zdarzenia, które można przechwycić
Tomasz Goluch
Visual Basic .NET
Tablice
Deklaracja tablicy: Dim a(), b(,), c(,,) As Integer
Dim c(15) As String
Dim d(20,3) As Integer
Dim d(,) As Integer
d = New Integer(20,3) {}
Tablicę c indeksujemy 0, . . . , 15.
Pusta tablica (jeden z wymiarów -1): Dim tab(-1,5) As String
Zmiana rozmiaru: ReDim c(25)
Odwołanie d(5,1) = 3
Inicjalizacja: Dim e = New Integer() {1, 2, 3, 4}
Tomasz Goluch
Visual Basic .NET
Przykłady deklaracji
Dim napis As String = "Hello world."
Dim tablica(), liczba As Integer
Gdy użyjemy Public, Protected, Friend, Protected Friend,
Private, Shared, Shadows, Static, ReadOnly, lub
WithEvents, to możemy pominąć Dim
Dim a, b, c As Single, d, e, f As Double, g, h As Integer
Tomasz Goluch
Visual Basic .NET
Deklaracja stałej
[ <atrybuty> ] [ dostęp ] [ Shadows ]
Const lista_stałych
Const napis As String = "Hello world."
Dla każdej stałej wymagany jest inicjator.
Tomasz Goluch
Visual Basic .NET
Const czy Readonly?
Readonly:
ustalenie wartości na poziomie wykonania (podczas deklaracji
albo poprzez konstruktor), może zostać wyliczona
bardziej elastyczna – dowolny typ
Tomasz Goluch
Visual Basic .NET
Const czy Readonly?
Readonly:
ustalenie wartości na poziomie wykonania (podczas deklaracji
albo poprzez konstruktor), może zostać wyliczona
bardziej elastyczna – dowolny typ
nie gwarantuje niemożności zmiany wartości (reflection, kod
unsafe i wskaźniki)
Tomasz Goluch
Visual Basic .NET
Const czy Readonly?
Readonly:
ustalenie wartości na poziomie wykonania (podczas deklaracji
albo poprzez konstruktor), może zostać wyliczona
bardziej elastyczna – dowolny typ
nie gwarantuje niemożności zmiany wartości (reflection, kod
unsafe i wskaźniki)
Tomasz Goluch
Visual Basic .NET
Const czy Readonly?
Const:
ustalenie wartości na poziomie kompilacji kodu
można wykorzystać jedynie typy wbudowane
Tomasz Goluch
Visual Basic .NET
Const czy Readonly?
Const:
ustalenie wartości na poziomie kompilacji kodu
można wykorzystać jedynie typy wbudowane
szybsza – jako literał w kodzie (brak odwołań do źródłowych
bibliotek)
Tomasz Goluch
Visual Basic .NET
Const czy Readonly?
Const:
ustalenie wartości na poziomie kompilacji kodu
można wykorzystać jedynie typy wbudowane
szybsza – jako literał w kodzie (brak odwołań do źródłowych
bibliotek)
aktualizacja wartości może wymagać re-kompilacji kodu,
inaczej wartości w powiązanych podzespołach mogą być
nieaktualne
Tomasz Goluch
Visual Basic .NET
Const czy Readonly?
Const:
ustalenie wartości na poziomie kompilacji kodu
można wykorzystać jedynie typy wbudowane
szybsza – jako literał w kodzie (brak odwołań do źródłowych
bibliotek)
aktualizacja wartości może wymagać re-kompilacji kodu,
inaczej wartości w powiązanych podzespołach mogą być
nieaktualne
można stosować podczas definiowania wartości etykiet sekcji
Case.
Tomasz Goluch
Visual Basic .NET
Const czy Readonly?
Const:
ustalenie wartości na poziomie kompilacji kodu
można wykorzystać jedynie typy wbudowane
szybsza – jako literał w kodzie (brak odwołań do źródłowych
bibliotek)
aktualizacja wartości może wymagać re-kompilacji kodu,
inaczej wartości w powiązanych podzespołach mogą być
nieaktualne
można stosować podczas definiowania wartości etykiet sekcji
Case.
Tomasz Goluch
Visual Basic .NET
Deklaracja typu wyliczeniowego
[ <atrybuty> ] [ dostęp ]
Enum nazwa [ As typ ]
składowe
End Enum
[ Shadows ]
dostęp: Public, Protected, ...
przy braku inicjalizacji wartość jest równa 0 dla pierwszej
składowej lub jest o jeden większa od poprzednika na liście
Tomasz Goluch
Visual Basic .NET
Deklaracja typu wyliczeniowego
[ <atrybuty> ] [ dostęp ]
Enum nazwa [ As typ ]
składowe
End Enum
[ Shadows ]
dostęp: Public, Protected, ...
przy braku inicjalizacji wartość jest równa 0 dla pierwszej
składowej lub jest o jeden większa od poprzednika na liście
każda składowa ma postać:
[ <atrybuty> ] nazwa [ = inicjalizacja ]
Tomasz Goluch
Visual Basic .NET
Deklaracja typu wyliczeniowego
[ <atrybuty> ] [ dostęp ]
Enum nazwa [ As typ ]
składowe
End Enum
[ Shadows ]
dostęp: Public, Protected, ...
przy braku inicjalizacji wartość jest równa 0 dla pierwszej
składowej lub jest o jeden większa od poprzednika na liście
każda składowa ma postać:
[ <atrybuty> ] nazwa [ = inicjalizacja ]
Tomasz Goluch
Visual Basic .NET
Wybrane typy danych
Typ
Byte
SByte
Short
UShort
Integer
Rozm.
1
1
2
2
1
UInteger
4
Long
8
ULong
8
BigInteger
Complex
dyn.
dyn.
Wartości
0..255
−128..127
−32768..32767
0..65535
−2147483648..2147483647
−231 ..231 − 1
0..4294967295
0..232 − 1
−9223372036854775808..9223372036854775807
−263 ..263 − 1
18446744073709551615
0..264 − 1
−∞..∞ (OutOfMemoryException)
zal. od użytego typu (każdy z pow.)
Tomasz Goluch
Visual Basic .NET
Typ BigInteger
Dim b1 As BigInteger = 1, b2 As BigInteger = 1
Dim i As Integer = 1
While i Mod 1000 <> 0
Dim n As BigInteger = b1 + b2
b1 = b2
b2 = n
i += 1
End While
’wynik b2 = 7033036771142281582183525487718354977018
1269836358732742604905087154537118196933579742249494
5626117334877504492417659910881863632654502236471060
1205337412127386733911119813937312559876769009190224
5245323403501
Tomasz Goluch
Visual Basic .NET
Typ BigInteger
Dim b1 As BigInteger = 1, b2 As BigInteger = 1
Dim i As Integer = 1
While i Mod 1000 <> 0
Dim n As BigInteger = b1 + b2
b1 = b2
b2 = n
i += 1
End While
’wynik b2 = 7033036771142281582183525487718354977018
1269836358732742604905087154537118196933579742249494
5626117334877504492417659910881863632654502236471060
1205337412127386733911119813937312559876769009190224
5245323403501
Tomasz Goluch
Visual Basic .NET
Wybrane typy danych
Typ
Single
Double
Decimal
Char
Boolean
Object
Date
Rozmiar
4
8
16
2
1
4 albo 8
8
String
10+2·dł.
Wartości
≈ −1.5 · 10−45 ..3.4 · 1038 (precyzja 7 cyfr)
≈ −5.0 · 10−324 ..1.7 · 10308 (precyzja 15-16 cyfr)
≈ ±1.0 · 10−28 ..±7.9 · 1028 (28-29 cyfr znacz.)
0..65535
True lub False
wsk. każdy typ danych
Jan. 1, 0001 12:00:00 AM
Dec. 31, 9999 11:59:59 PM
0..2147483647 znaków Unicode
Tomasz Goluch
Visual Basic .NET
Typ Decimal
Dim f As Single = 0
For i As Integer = 0 To 8
f += 0.1F ’0.0(0011) - syst. bin.
Next
’wynik f = 0.9000001
Tomasz Goluch
Visual Basic .NET
Typ Decimal
Dim f As Single = 0
For i As Integer = 0 To 8
f += 0.1F ’0.0(0011) - syst. bin.
Next
’wynik f = 0.9000001
Dim f As Decimal = 0
For i As Integer = 0 To 8
f += 0.1D
Next
Tomasz Goluch
Visual Basic .NET
Typ Decimal
Dim f As Single = 0
For i As Integer = 0 To 8
f += 0.1F ’0.0(0011) - syst. bin.
Next
’wynik f = 0.9000001
Dim f As Decimal = 0
For i As Integer = 0 To 8
f += 0.1D
Next
’wynik f = 0.9
Tomasz Goluch
Visual Basic .NET
Typ Decimal
Dim f As Single = 0
For i As Integer = 0 To 8
f += 0.1F ’0.0(0011) - syst. bin.
Next
’wynik f = 0.9000001
Dim f As Decimal = 0
For i As Integer = 0 To 8
f += 0.1D
Next
’wynik f = 0.9
Tomasz Goluch
Visual Basic .NET
Typ Anonimowy
Dim x = New With {
.Title = "Lord",
.Surname = "Voldemort"
}
Console.WriteLine("To przecież " _
+ x.Title + " " _
+ x.Surname + "!")
’To przecież Lord Voldemort !
Tomasz Goluch
Visual Basic .NET
Typy CLS
Typ .Net
System.Byte
System.SByte
System.Int16
System.UInt16
System.Int32
System.UInt32
System.Int64
System.UInt64
System.Single
System.Double
System.Decimal
System.Char
System.String
System.Boolean
System.Object
Typ VB
Byte
SByte
Short
UShort
Integer
UInteger
Long
ULong
Single
Double
Decimal
Char
String
Boolean
Object
C#
byte
sbyte
short
ushort
int
uint
long
ulong
float
double
decimal
char
string
bool
object
Tomasz Goluch
zakres
0..255
-128..127
-32 768..32 767
0..65 535
-231 ..231 − 1
0..232 − 1
-263 ..263 − 1
0..264 − 1
32 bity
64 bity
128 bitów
unicode
16· dł.
True,False
32 bity
Visual Basic .NET
Funkcje konwersji typu
Funkcja
CBool
CByte
CChar
CDate
CDbl
CDec
CInt
CLng
Konwersja do
Boolean
Byte
Char
Date
Double
Decimal
Integer
Long
Funkcja
CObj
CSByte
CShort
CSgn
CStr
CUInt
CULng
CUShort
Tomasz Goluch
Konwersja do
Object
SByte
Short
Single
String
UInteger
ULong
Ushort
Visual Basic .NET
Funkcje konwersji typu
różną się od rzutowania możliwością konwersji literałów
sprawdzają przekroczenie zakresu – odpowiednik słowa
kluczowego checked z C#.
Tomasz Goluch
Visual Basic .NET
Funkcje konwersji typu
różną się od rzutowania możliwością konwersji literałów
sprawdzają przekroczenie zakresu – odpowiednik słowa
kluczowego checked z C#.
tak jak niejawna konwersja typów, nie gwarantują braku
utraty informacji:
Dim ui As UInteger = 3000000001
Dim s1 As Single = ui
’3.0E+9
Dim s2 As Single = CSng(ui) ’3.0E+9
Tomasz Goluch
Visual Basic .NET
Funkcje konwersji typu
różną się od rzutowania możliwością konwersji literałów
sprawdzają przekroczenie zakresu – odpowiednik słowa
kluczowego checked z C#.
tak jak niejawna konwersja typów, nie gwarantują braku
utraty informacji:
Dim ui As UInteger = 3000000001
Dim s1 As Single = ui
’3.0E+9
Dim s2 As Single = CSng(ui) ’3.0E+9
Tomasz Goluch
Visual Basic .NET
Wybrane instrukcje sterujące
If ... Then
...
End If
For i=0 To 10 Step 1
For i As Double=2 To 0 Step -0.25
...
Next [i]
If ... Then
...
[ ElseIf ... Then
... ]
Else
...
End If
While ...
...
End While
Select x
Case 1
...
Case 2,3
...
Case Is < 20
...
Case Else
...
End Select
Tomasz Goluch
Visual Basic .NET
Wybrane operatory
If( [arg1,] arg2, arg3 ) – dla trzech argumentów
wartość logiczna pierwszego określa, która wartość, jednego z
dwóch kolejnych argumentów, zostanie zwrócona
– odpowiednik operatora warunkowego: ? w C#.
If( div <> 0, num \ div, 0 ) – jeśli div=0 to drugi
argument nie będzie oceniany zatem, nie wywoła wyjątku.
Tomasz Goluch
Visual Basic .NET
Wybrane operatory
If( [arg1,] arg2, arg3 ) – dla trzech argumentów
wartość logiczna pierwszego określa, która wartość, jednego z
dwóch kolejnych argumentów, zostanie zwrócona
– odpowiednik operatora warunkowego: ? w C#.
If( div <> 0, num \ div, 0 ) – jeśli div=0 to drugi
argument nie będzie oceniany zatem, nie wywoła wyjątku.
dla dwóch argumentów wartość pierwszego zostanie zwrócona
jeśli będzie różna od Nothing, w przeciwnym razie zostanie
zwrócona wartość drugiego argumentu – odpowiednik
operatora: ?? (null coalescing) w C#
Tomasz Goluch
Visual Basic .NET
Wybrane operatory
If( [arg1,] arg2, arg3 ) – dla trzech argumentów
wartość logiczna pierwszego określa, która wartość, jednego z
dwóch kolejnych argumentów, zostanie zwrócona
– odpowiednik operatora warunkowego: ? w C#.
If( div <> 0, num \ div, 0 ) – jeśli div=0 to drugi
argument nie będzie oceniany zatem, nie wywoła wyjątku.
dla dwóch argumentów wartość pierwszego zostanie zwrócona
jeśli będzie różna od Nothing, w przeciwnym razie zostanie
zwrócona wartość drugiego argumentu – odpowiednik
operatora: ?? (null coalescing) w C#
If( out, "" )
Tomasz Goluch
Visual Basic .NET
Wybrane operatory
If( [arg1,] arg2, arg3 ) – dla trzech argumentów
wartość logiczna pierwszego określa, która wartość, jednego z
dwóch kolejnych argumentów, zostanie zwrócona
– odpowiednik operatora warunkowego: ? w C#.
If( div <> 0, num \ div, 0 ) – jeśli div=0 to drugi
argument nie będzie oceniany zatem, nie wywoła wyjątku.
dla dwóch argumentów wartość pierwszego zostanie zwrócona
jeśli będzie różna od Nothing, w przeciwnym razie zostanie
zwrócona wartość drugiego argumentu – odpowiednik
operatora: ?? (null coalescing) w C#
If( out, "" )
Tomasz Goluch
Visual Basic .NET
Wybrane operatory
Is – czy dwie referencje wskazują na ten sam obiekt.
if a Is b Then ...
IsNot – negacja powyższego.
Tomasz Goluch
Visual Basic .NET
Wybrane operatory
Is – czy dwie referencje wskazują na ten sam obiekt.
if a Is b Then ...
IsNot – negacja powyższego.
TypeOf ... Is ... – czy obiekt jest określonego typu.
If TypeOf a Is String Then
Tomasz Goluch
Visual Basic .NET
Wybrane operatory
Is – czy dwie referencje wskazują na ten sam obiekt.
if a Is b Then ...
IsNot – negacja powyższego.
TypeOf ... Is ... – czy obiekt jest określonego typu.
If TypeOf a Is String Then
Tomasz Goluch
Visual Basic .NET
Operator Like
Dim a As String
...
If a Like "?*@?*.?*" Then
...
Znak(i)
?
*
#
[...]
[!...]
A-Z
Znaczenie
pasuje do pojedynczego znaku
zero lub więcej znaków
pojedyncza cyfra
pasuje do dowolnego znaku podanego w nawiasach,
np. [a-z] lub [a-dg-p]
pasuje do dowolnego znaku nie wyst. na liście
użyte w nawiasach pasuje do każdego znaku z zakresu A..Z
Tomasz Goluch
Visual Basic .NET
Deklaracja procedur i funkcji
[ <atrybuty> ] [ Partial ] [ dostęp ] [ modyfikatory ]
[ Shared ] [ Shadows ] [ Async ]
Sub
nazwa [(Of lista_typ._param.)] [(lista param.)]
[ Implements lista_implementacji | Handles lista_zdarzeń ]
[ wyrażenia ] [ Return | Exit Sub ]
[ wyrażenia ]
End Sub
Partial – pozwala na deklarację i definicję metody w
różnych plikach. Niezdefiniowane metody częściowe są
całkowicie ignorowane podczas kompilacji (znajduje
zastosowanie podczas generowania kodu GUI przez VS)
metoda musi być procedurą (Sub), nie może być funkcją
(Function)
Tomasz Goluch
Visual Basic .NET
Deklaracja procedur i funkcji
[ <atrybuty> ] [ Partial ] [ dostęp ] [ modyfikatory ]
[ Shared ] [ Shadows ] [ Async ]
Sub
nazwa [(Of lista_typ._param.)] [(lista param.)]
[ Implements lista_implementacji | Handles lista_zdarzeń ]
[ wyrażenia ] [ Return | Exit Sub ]
[ wyrażenia ]
End Sub
Partial – pozwala na deklarację i definicję metody w
różnych plikach. Niezdefiniowane metody częściowe są
całkowicie ignorowane podczas kompilacji (znajduje
zastosowanie podczas generowania kodu GUI przez VS)
metoda musi być procedurą (Sub), nie może być funkcją
(Function)
ciało metody musi pozostać puste
Tomasz Goluch
Visual Basic .NET
Deklaracja procedur i funkcji
[ <atrybuty> ] [ Partial ] [ dostęp ] [ modyfikatory ]
[ Shared ] [ Shadows ] [ Async ]
Sub
nazwa [(Of lista_typ._param.)] [(lista param.)]
[ Implements lista_implementacji | Handles lista_zdarzeń ]
[ wyrażenia ] [ Return | Exit Sub ]
[ wyrażenia ]
End Sub
Partial – pozwala na deklarację i definicję metody w
różnych plikach. Niezdefiniowane metody częściowe są
całkowicie ignorowane podczas kompilacji (znajduje
zastosowanie podczas generowania kodu GUI przez VS)
metoda musi być procedurą (Sub), nie może być funkcją
(Function)
ciało metody musi pozostać puste
modyfikator dostępu musi być prywatny (Private)
Tomasz Goluch
Visual Basic .NET
Deklaracja procedur i funkcji
[ <atrybuty> ] [ Partial ] [ dostęp ] [ modyfikatory ]
[ Shared ] [ Shadows ] [ Async ]
Sub
nazwa [(Of lista_typ._param.)] [(lista param.)]
[ Implements lista_implementacji | Handles lista_zdarzeń ]
[ wyrażenia ] [ Return | Exit Sub ]
[ wyrażenia ]
End Sub
Partial – pozwala na deklarację i definicję metody w
różnych plikach. Niezdefiniowane metody częściowe są
całkowicie ignorowane podczas kompilacji (znajduje
zastosowanie podczas generowania kodu GUI przez VS)
metoda musi być procedurą (Sub), nie może być funkcją
(Function)
ciało metody musi pozostać puste
modyfikator dostępu musi być prywatny (Private)
dostęp: Public, Protected, ...
Tomasz Goluch
Visual Basic .NET
Deklaracja procedur i funkcji
[ <atrybuty> ] [ Partial ] [ dostęp ] [ modyfikatory ]
[ Shared ] [ Shadows ] [ Async ]
Sub
nazwa [(Of lista_typ._param.)] [(lista param.)]
[ Implements lista_implementacji | Handles lista_zdarzeń ]
[ wyrażenia ] [ Return | Exit Sub ]
[ wyrażenia ]
End Sub
Partial – pozwala na deklarację i definicję metody w
różnych plikach. Niezdefiniowane metody częściowe są
całkowicie ignorowane podczas kompilacji (znajduje
zastosowanie podczas generowania kodu GUI przez VS)
metoda musi być procedurą (Sub), nie może być funkcją
(Function)
ciało metody musi pozostać puste
modyfikator dostępu musi być prywatny (Private)
dostęp: Public, Protected, ...
Tomasz Goluch
Visual Basic .NET
Deklaracja procedur i funkcji
[ <atrybuty> ] [ Partial ] [ dostęp ] [ modyfikatory ]
[ Shared ] [ Shadows ] [ Async ]
Sub
nazwa [(Of lista_typ._param.)] [(lista param.)]
[ Implements lista_implementacji | Handles lista_zdarzeń ]
[ wyrażenia ] [ Return | Exit Sub ]
[ wyrażenia ]
End Sub
modyfikatory:
Overloads – ponowna deklaracja (domyślne działanie w C#)
Overrides – przesłonienie metody bazowej (override w C#)
Tomasz Goluch
Visual Basic .NET
Deklaracja procedur i funkcji
[ <atrybuty> ] [ Partial ] [ dostęp ] [ modyfikatory ]
[ Shared ] [ Shadows ] [ Async ]
Sub
nazwa [(Of lista_typ._param.)] [(lista param.)]
[ Implements lista_implementacji | Handles lista_zdarzeń ]
[ wyrażenia ] [ Return | Exit Sub ]
[ wyrażenia ]
End Sub
modyfikatory:
Overloads – ponowna deklaracja (domyślne działanie w C#)
Overrides – przesłonienie metody bazowej (override w C#)
Overridable – może być przesłonięta w klasie pochodnej
(virtual w C#)
Tomasz Goluch
Visual Basic .NET
Deklaracja procedur i funkcji
[ <atrybuty> ] [ Partial ] [ dostęp ] [ modyfikatory ]
[ Shared ] [ Shadows ] [ Async ]
Sub
nazwa [(Of lista_typ._param.)] [(lista param.)]
[ Implements lista_implementacji | Handles lista_zdarzeń ]
[ wyrażenia ] [ Return | Exit Sub ]
[ wyrażenia ]
End Sub
modyfikatory:
Overloads – ponowna deklaracja (domyślne działanie w C#)
Overrides – przesłonienie metody bazowej (override w C#)
Overridable – może być przesłonięta w klasie pochodnej
(virtual w C#)
Tomasz Goluch
Visual Basic .NET
Deklaracja procedur i funkcji
[ <atrybuty> ] [ Partial ] [ dostęp ] [ modyfikatory ]
[ Shared ] [ Shadows ] [ Async ]
Sub
nazwa [(Of lista_typ._param.)] [(lista param.)]
[ Implements lista_implementacji | Handles lista_zdarzeń ]
[ wyrażenia ] [ Return | Exit Sub ]
[ wyrażenia ]
End Sub
modyfikatory:
NotOverridable – nie może być przesłonięta w klasie
pochodnej (sealed w C#)
MustOverride – nie zaimplementowana i przed użyciem musi
zostać przesłonięta w klasie pochodnej (abstract w C#)
Tomasz Goluch
Visual Basic .NET
Deklaracja procedur i funkcji
[ <atrybuty> ] [ Partial ] [ dostęp ] [ modyfikatory ]
[ Shared ] [ Shadows ] [ Async ]
Sub
nazwa [(Of lista_typ._param.)] [(lista param.)]
[ Implements lista_implementacji | Handles lista_zdarzeń ]
[ wyrażenia ] [ Return | Exit Sub ]
[ wyrażenia ]
End Sub
modyfikatory:
NotOverridable – nie może być przesłonięta w klasie
pochodnej (sealed w C#)
MustOverride – nie zaimplementowana i przed użyciem musi
zostać przesłonięta w klasie pochodnej (abstract w C#)
Tomasz Goluch
Visual Basic .NET
Deklaracja procedur i funkcji
[ <atrybuty> ] [ Partial ] [ dostęp ] [ modyfikatory ]
[ Shared ] [ Shadows ] [ Async ]
Sub
nazwa [(Of lista_typ._param.)] [(lista param.)]
[ Implements lista_implementacji | Handles lista_zdarzeń ]
[ wyrażenia ] [ Return | Exit Sub ]
[ wyrażenia ]
End Sub
Shared – powiązanie metody z klasą albo strukturą zamiast z
konkretną instancją (static w C#)
Shadows – ponowna deklaracja i ukrcie metody w klasie
bazowej bądź wszystkich przeciążonych metod w hierarchii
dziedziczenia (new w C#)
Tomasz Goluch
Visual Basic .NET
Deklaracja procedur i funkcji
[ <atrybuty> ] [ Partial ] [ dostęp ] [ modyfikatory ]
[ Shared ] [ Shadows ] [ Async ]
Sub
nazwa [(Of lista_typ._param.)] [(lista param.)]
[ Implements lista_implementacji | Handles lista_zdarzeń ]
[ wyrażenia ] [ Return | Exit Sub ]
[ wyrażenia ]
End Sub
Shared – powiązanie metody z klasą albo strukturą zamiast z
konkretną instancją (static w C#)
Shadows – ponowna deklaracja i ukrcie metody w klasie
bazowej bądź wszystkich przeciążonych metod w hierarchii
dziedziczenia (new w C#)
Async – informacja dla kompilatora że w metodzie będą
używane mozliwości asynchroniczne (async w C#)
Tomasz Goluch
Visual Basic .NET
Deklaracja procedur i funkcji
[ <atrybuty> ] [ Partial ] [ dostęp ] [ modyfikatory ]
[ Shared ] [ Shadows ] [ Async ]
Sub
nazwa [(Of lista_typ._param.)] [(lista param.)]
[ Implements lista_implementacji | Handles lista_zdarzeń ]
[ wyrażenia ] [ Return | Exit Sub ]
[ wyrażenia ]
End Sub
Shared – powiązanie metody z klasą albo strukturą zamiast z
konkretną instancją (static w C#)
Shadows – ponowna deklaracja i ukrcie metody w klasie
bazowej bądź wszystkich przeciążonych metod w hierarchii
dziedziczenia (new w C#)
Async – informacja dla kompilatora że w metodzie będą
używane mozliwości asynchroniczne (async w C#)
Tomasz Goluch
Visual Basic .NET
Deklaracja procedur i funkcji
[ <atrybuty> ] [ Partial ] [ dostęp ] [ modyfikatory ]
[ Shared ] [ Shadows ] [ Async ]
Sub
nazwa [(Of lista_typ._param.)] [(lista param.)]
[ Implements lista_implementacji | Handles lista_zdarzeń ]
[ wyrażenia ] [ Return | Exit Sub ]
[ wyrażenia ]
End Sub
lista typów parametrów: dla procedur generycznych (generic)
element listy implementacji ma postać:
interfejs.nazwa_procedury,. . . (brak odpowiednika w
C#, wymaga przeciążenia osobno każdej metody interfejsu)
Tomasz Goluch
Visual Basic .NET
Deklaracja procedur i funkcji
[ <atrybuty> ] [ Partial ] [ dostęp ] [ modyfikatory ]
[ Shared ] [ Shadows ] [ Async ]
Sub
nazwa [(Of lista_typ._param.)] [(lista param.)]
[ Implements lista_implementacji | Handles lista_zdarzeń ]
[ wyrażenia ] [ Return | Exit Sub ]
[ wyrażenia ]
End Sub
lista typów parametrów: dla procedur generycznych (generic)
element listy implementacji ma postać:
interfejs.nazwa_procedury,. . . (brak odpowiednika w
C#, wymaga przeciążenia osobno każdej metody interfejsu)
element listy zdarzeń ma postać: obiekt.zdarzenie,. . . np.:
button.Click (brak odpowiednika w C#)
Tomasz Goluch
Visual Basic .NET
Deklaracja procedur i funkcji
[ <atrybuty> ] [ Partial ] [ dostęp ] [ modyfikatory ]
[ Shared ] [ Shadows ] [ Async ]
Sub
nazwa [(Of lista_typ._param.)] [(lista param.)]
[ Implements lista_implementacji | Handles lista_zdarzeń ]
[ wyrażenia ] [ Return | Exit Sub ]
[ wyrażenia ]
End Sub
lista typów parametrów: dla procedur generycznych (generic)
element listy implementacji ma postać:
interfejs.nazwa_procedury,. . . (brak odpowiednika w
C#, wymaga przeciążenia osobno każdej metody interfejsu)
element listy zdarzeń ma postać: obiekt.zdarzenie,. . . np.:
button.Click (brak odpowiednika w C#)
Tomasz Goluch
Visual Basic .NET
Deklaracja procedur i funkcji
[ <atrybuty> ]
[ dostęp ] [ modyfikatory ]
[ Shared ] [ Shadows ] [ Async | Iterator ]
Function nazwa [(Of lista_typ._param.)] [(lista param.)]
[ As typ_zwracany ]
[ Implements lista_implementacji | Handles lista_zdarzeń ]
[ wyrażenia ] [ Return | Exit Function ]
[ wyrażenia ]
End Function
Iterator – Iterator, wykorzystuje instrukcje yield do
zwracania elementów kolekcji (brak odpowiednika w C#)
Tomasz Goluch
Visual Basic .NET
Deklaracja procedur i funkcji
Function myFunction(ByVal j As Integer) As Double
Return 3.87 * j
End Function
Function myFunction(ByVal j As Integer) As Double
myFunction = 3.87 * j
Exit Function
End Function
Tomasz Goluch
Visual Basic .NET
Metody Rozszerzeń
Imports System.Runtime.CompilerServices
Module StringExtensions
<Extension()>
Public Sub Print(ByVal aString As String)
Console.WriteLine(aString)
End Sub
End Module
Tomasz Goluch
Visual Basic .NET
Przekazywanie parametrów
Przez wartość – procedura lub funkcja
otrzymuje kopię zmiennej.
Public Sub A(ByVal i As Integer)
i += 1 ’ nie zmienia wart.
’ org. zmiennej
End Sub
Tomasz Goluch
Przez referencję – procedura
lub funkcja otrzymuje wskaźnik
do zmiennej.
Public Sub A(ByRef i As Integer)
i += 1 ’ inkrementacja
’ org. zmiennej
End Sub
Visual Basic .NET
Przekazywanie parametrów
[ <atrybuty> ] [ Optional ] [ { ByVal | ByRef } ] [ ParamArray ]
nazwa_parametru[ ( ) ] [ As typ_param. ] [ = wartosc_domyślna ]
jeśli parametr jest Optional, to wszystkie pozostałe też
muszą takie być,
parametr Optional musi mieć podaną wartość domyślną
Tomasz Goluch
Visual Basic .NET
Przekazywanie parametrów
[ <atrybuty> ] [ Optional ] [ { ByVal | ByRef } ] [ ParamArray ]
nazwa_parametru[ ( ) ] [ As typ_param. ] [ = wartosc_domyślna ]
jeśli parametr jest Optional, to wszystkie pozostałe też
muszą takie być,
parametr Optional musi mieć podaną wartość domyślną
ParamArray jest używany w połączeniu z ByVal (opcjonalna
tablica elementów określonego typu)
Tomasz Goluch
Visual Basic .NET
Przekazywanie parametrów
[ <atrybuty> ] [ Optional ] [ { ByVal | ByRef } ] [ ParamArray ]
nazwa_parametru[ ( ) ] [ As typ_param. ] [ = wartosc_domyślna ]
jeśli parametr jest Optional, to wszystkie pozostałe też
muszą takie być,
parametr Optional musi mieć podaną wartość domyślną
ParamArray jest używany w połączeniu z ByVal (opcjonalna
tablica elementów określonego typu)
nie można używać Optional i ParamArray jednocześnie
Tomasz Goluch
Visual Basic .NET
Przekazywanie parametrów
[ <atrybuty> ] [ Optional ] [ { ByVal | ByRef } ] [ ParamArray ]
nazwa_parametru[ ( ) ] [ As typ_param. ] [ = wartosc_domyślna ]
jeśli parametr jest Optional, to wszystkie pozostałe też
muszą takie być,
parametr Optional musi mieć podaną wartość domyślną
ParamArray jest używany w połączeniu z ByVal (opcjonalna
tablica elementów określonego typu)
nie można używać Optional i ParamArray jednocześnie
ByVal jest domyślnym mechanizmem; jeśli parametr jest
referencją, to procedura może modyfikować wskazywany
obiekt (choć nie może zmienić wartości samej referencji)
Tomasz Goluch
Visual Basic .NET
Przekazywanie parametrów
[ <atrybuty> ] [ Optional ] [ { ByVal | ByRef } ] [ ParamArray ]
nazwa_parametru[ ( ) ] [ As typ_param. ] [ = wartosc_domyślna ]
jeśli parametr jest Optional, to wszystkie pozostałe też
muszą takie być,
parametr Optional musi mieć podaną wartość domyślną
ParamArray jest używany w połączeniu z ByVal (opcjonalna
tablica elementów określonego typu)
nie można używać Optional i ParamArray jednocześnie
ByVal jest domyślnym mechanizmem; jeśli parametr jest
referencją, to procedura może modyfikować wskazywany
obiekt (choć nie może zmienić wartości samej referencji)
Tomasz Goluch
Visual Basic .NET
Definicja klasy
[ <atrybuty> ] [ dostęp ] [ Shadows ] _
[ MustInherit | NotInheritable ] [ Partial ] _
Class nazwa [ ( Of lista_typów ) ]
[ Inherits nazwa_klasy ]
[ Implements nazwa_interfejsów ]
[ zawartość ]
End Class
po klasach dziedziczymy, interfejsy implementujemy (jawne
rozgraniczenie)
Tomasz Goluch
Visual Basic .NET
Definicja klasy
[ <atrybuty> ] [ dostęp ] [ Shadows ] _
[ MustInherit | NotInheritable ] [ Partial ] _
Class nazwa [ ( Of lista_typów ) ]
[ Inherits nazwa_klasy ]
[ Implements nazwa_interfejsów ]
[ zawartość ]
End Class
po klasach dziedziczymy, interfejsy implementujemy (jawne
rozgraniczenie)
można definiować klasy zagnieżdżone
Tomasz Goluch
Visual Basic .NET
Definicja klasy
[ <atrybuty> ] [ dostęp ] [ Shadows ] _
[ MustInherit | NotInheritable ] [ Partial ] _
Class nazwa [ ( Of lista_typów ) ]
[ Inherits nazwa_klasy ]
[ Implements nazwa_interfejsów ]
[ zawartość ]
End Class
po klasach dziedziczymy, interfejsy implementujemy (jawne
rozgraniczenie)
można definiować klasy zagnieżdżone
Tomasz Goluch
Visual Basic .NET
Słowa kluczowe Async i Await
Async – umieszczane w deklaracjach metod, metod
anonimowych oraz wyrażeń lambda. Informuje kompilator, że
w metodzie będą wykorzystywane możliwości asynchroniczne
(pozwala na użycie słowa kluczowego Await, inaczej będzie
ono traktowane jako zwykły identyfikator)
Await – powoduje uruchomienie oznaczonej nim metody w
trybie asynchronicznym wraz z obsługą powinowactwa do
wątku
Tomasz Goluch
Visual Basic .NET
Słowa kluczowe Async i Await
Async – umieszczane w deklaracjach metod, metod
anonimowych oraz wyrażeń lambda. Informuje kompilator, że
w metodzie będą wykorzystywane możliwości asynchroniczne
(pozwala na użycie słowa kluczowego Await, inaczej będzie
ono traktowane jako zwykły identyfikator)
Await – powoduje uruchomienie oznaczonej nim metody w
trybie asynchronicznym wraz z obsługą powinowactwa do
wątku
Tomasz Goluch
Visual Basic .NET
Słowa kluczowe Async i Await
Private Async Sub Button1_Click(sender As Object, _
e As EventArgs) Handles Button1.Click
Dim result As String = Await WaitAsynchAsynchr()
TextBox1.Text &= result
End Sub
Public Async Function WaitAsynchAsynchr() _
As Task(Of String)
Await Task.Delay(10000)
Return "Finished"
End Function
Public Async Function WaitSynchr() As Task(Of String)
Thread.Sleep(10000)
Return "Finished"
End Function
Tomasz Goluch
Visual Basic .NET
Słowa kluczowe Async i Await
Async Function AccessTheWebAsync() As Task(Of Integer)
Dim client As HttpClient = New HttpClient()
Dim getStringTask As Task(Of String) = _
client.GetStringAsync("http://msdn.microsoft.com")
DoIndependentWork()
Dim urlContents As String = Await getStringTask
Return urlContents.Length
End Function
http://msdn.microsoft.com/en-us/library/hh191443.aspx
Tomasz Goluch
Visual Basic .NET
Słowo kluczowe Global
Namespace SpecialSpace
Namespace System
Class abc
Function getValue() As System.Int32
Dim n As System.Int32
Return n
End Function
End Class
End Namespace
End Namespace
http://msdn.microsoft.com/en-us/library/zt9tafza.aspx
Tomasz Goluch
Visual Basic .NET
Słowo kluczowe Global
Namespace SpecialSpace
Namespace System
Class abc
Function getValue() As Global.System.Int32
Dim n As Global.System.Int32
Return n
End Function
End Class
End Namespace
End Namespace
http://msdn.microsoft.com/en-us/library/zt9tafza.aspx
Tomasz Goluch
Visual Basic .NET
Słowa kluczowe Iterator i Yield
Sub Main()
For Each number As Integer In SomeNumbers()
Console.Write(number & " ")
Next
’ Output: 3 5 8
Console.ReadKey()
End Sub
Private Iterator Function _
SomeNumbers() As System.Collections.IEnumerable
Yield 3
Yield 5
Yield 8
End Function
Tomasz Goluch
Visual Basic .NET
Częściowe klasy i procedury
pozwala umieścić
fragmenty kodu klasy
w różnych fragmentach
pliku lub w różnych
modułach,
co najmniej jeden z
fragmentów musi być
poprzedzony słowem
Partial, ale dla
przejrzystości kodu
sugeruje się używać przy
każdym fragmencie
Tomasz Goluch
Partial Public Class A
Public x As Integer
End Class
... inny kod ...
Partial Public Class A
Public y As Double
End Class
Visual Basic .NET
Częściowe klasy i procedury
pozwala umieścić
fragmenty kodu klasy
w różnych fragmentach
pliku lub w różnych
modułach,
co najmniej jeden z
fragmentów musi być
poprzedzony słowem
Partial, ale dla
przejrzystości kodu
sugeruje się używać przy
każdym fragmencie
Partial Public Class A
Public x As Integer
End Class
... inny kod ...
Partial Public Class A
Public y As Double
End Class
przydatne, gdy kilka osób
pracuje nad różnymi
fragmentami jednej klasy.
Tomasz Goluch
Visual Basic .NET
Częściowe klasy i procedury
pozwala umieścić
fragmenty kodu klasy
w różnych fragmentach
pliku lub w różnych
modułach,
co najmniej jeden z
fragmentów musi być
poprzedzony słowem
Partial, ale dla
przejrzystości kodu
sugeruje się używać przy
każdym fragmencie
Partial Public Class A
Public x As Integer
End Class
... inny kod ...
Partial Public Class A
Public y As Double
End Class
przydatne, gdy kilka osób
pracuje nad różnymi
fragmentami jednej klasy.
Tomasz Goluch
Visual Basic .NET
Częściowe klasy i procedury
częściowa procedura
pozwala na oddzielenie jej
deklaracji od
implementacji
używamy wraz
z częściową klasą:
w jednej części klasy
umieszczamy deklarację,
natomiast w drugiej
implementację
Partial Class A
Private x As Integer
’ deklaracja:
Partial Private Sub powieksz()
End Sub
End Class
...
Partial Class Product
’ implementacja:
Private Sub powieksz()
x = x+1
End Sub
End Class
Tomasz Goluch
Visual Basic .NET
Częściowe klasy i procedury
częściowa procedura
pozwala na oddzielenie jej
deklaracji od
implementacji
używamy wraz
z częściową klasą:
w jednej części klasy
umieszczamy deklarację,
natomiast w drugiej
implementację
Partial Class A
Private x As Integer
’ deklaracja:
Partial Private Sub powieksz()
End Sub
End Class
...
Partial Class Product
’ implementacja:
Private Sub powieksz()
x = x+1
End Sub
End Class
Tomasz Goluch
Visual Basic .NET
Dostępność
Public – klasa dostępna dla całego kodu, również poza
modułem
Protected – stosowane tylko w odniesieniu do klas; dostęp
tylko w obrębie klasy i klas pochodnych
Tomasz Goluch
Visual Basic .NET
Dostępność
Public – klasa dostępna dla całego kodu, również poza
modułem
Protected – stosowane tylko w odniesieniu do klas; dostęp
tylko w obrębie klasy i klas pochodnych
Friend (domyślne) – klasa dostępna dla całego kodu
w module oraz poza modułem wewnątrz tego samego
projektu. Różnice w stosunku do Public są przy tworzeniu
bibliotek.
Tomasz Goluch
Visual Basic .NET
Dostępność
Public – klasa dostępna dla całego kodu, również poza
modułem
Protected – stosowane tylko w odniesieniu do klas; dostęp
tylko w obrębie klasy i klas pochodnych
Friend (domyślne) – klasa dostępna dla całego kodu
w module oraz poza modułem wewnątrz tego samego
projektu. Różnice w stosunku do Public są przy tworzeniu
bibliotek.
Protected Friend – suma dwóch powyższych.
Tomasz Goluch
Visual Basic .NET
Dostępność
Public – klasa dostępna dla całego kodu, również poza
modułem
Protected – stosowane tylko w odniesieniu do klas; dostęp
tylko w obrębie klasy i klas pochodnych
Friend (domyślne) – klasa dostępna dla całego kodu
w module oraz poza modułem wewnątrz tego samego
projektu. Różnice w stosunku do Public są przy tworzeniu
bibliotek.
Protected Friend – suma dwóch powyższych.
Private – klasa dostępna tylko wewnątrz modułu.
Tomasz Goluch
Visual Basic .NET
Dostępność
Public – klasa dostępna dla całego kodu, również poza
modułem
Protected – stosowane tylko w odniesieniu do klas; dostęp
tylko w obrębie klasy i klas pochodnych
Friend (domyślne) – klasa dostępna dla całego kodu
w module oraz poza modułem wewnątrz tego samego
projektu. Różnice w stosunku do Public są przy tworzeniu
bibliotek.
Protected Friend – suma dwóch powyższych.
Private – klasa dostępna tylko wewnątrz modułu.
Tomasz Goluch
Visual Basic .NET
Dziedziczenie
brak klas statycznych, można symulować ich zachowanie na
dwa sposoby:
“zwykłe klasy” ze współdzieloną (Shared) zawartością
Tomasz Goluch
Visual Basic .NET
Dziedziczenie
brak klas statycznych, można symulować ich zachowanie na
dwa sposoby:
“zwykłe klasy” ze współdzieloną (Shared) zawartością
moduły – słowo kluczowe: Module
Tomasz Goluch
Visual Basic .NET
Dziedziczenie
brak klas statycznych, można symulować ich zachowanie na
dwa sposoby:
“zwykłe klasy” ze współdzieloną (Shared) zawartością
moduły – słowo kluczowe: Module
MustInherit – nie można tworzyć instancji takiej klasy
(klasa abstrakcyjna).
Tomasz Goluch
Visual Basic .NET
Dziedziczenie
brak klas statycznych, można symulować ich zachowanie na
dwa sposoby:
“zwykłe klasy” ze współdzieloną (Shared) zawartością
moduły – słowo kluczowe: Module
MustInherit – nie można tworzyć instancji takiej klasy
(klasa abstrakcyjna).
NotInheritable – nie można dziedziczyć.
Tomasz Goluch
Visual Basic .NET
Dziedziczenie
brak klas statycznych, można symulować ich zachowanie na
dwa sposoby:
“zwykłe klasy” ze współdzieloną (Shared) zawartością
moduły – słowo kluczowe: Module
MustInherit – nie można tworzyć instancji takiej klasy
(klasa abstrakcyjna).
NotInheritable – nie można dziedziczyć.
Tomasz Goluch
Visual Basic .NET
Dziedziczenie
Public MustInherit Class Figura
Public MustOverride Sub Pole()
End Class
Public Class Kwadrat
Inherits Figura
Public Overrides Sub Pole()
...
End Sub
End Class
Tomasz Goluch
Visual Basic .NET
Dziedziczenie – przykład
Private MustInherit Class A
Public x As Integer
Public Sub f(ByVal x As Integer)
Me.x = x
End Sub
End Class
Private Class B
Inherits A
Public Overloads Sub f(ByVal x _
As Integer)
Me.x = 2 * x
End Sub
End Class
Tomasz Goluch
Visual Basic .NET
Dim a As A
a = New B
a.f(5) ’ a.x = 5
Dim b As B
b = New B
b.f(5) ’ b.x = 10
Dziedziczenie – przykład
Private MustInherit Class A
Public x As Integer
Public Overridable Sub f(ByVal x As Integer)
Me.x = x
Dim a As A
End Sub
a = New B
End Class
a.f(5) ’ a.x = 10
Private Class B
Inherits A
Public Overrides Sub f(ByVal x _
As Integer)
Me.x = 2 * x
End Sub
End Class
Tomasz Goluch
Visual Basic .NET
Dim b As B
b = New B
b.f(5) ’ b.x = 10
Dziedziczenie – przykład
Private MustInherit Class A
Public x As Integer
Public Sub New()
x = 1
End Sub
End Class
Private Class B
Inherits A
Public Shadows x As Integer
Public Sub New()
x = 2
End Sub
End Class
Tomasz Goluch
Dim a As A
Dim b As B
a = New B
b = New B
Console.WriteLine(a.x)
Console.WriteLine(b.x)
Visual Basic .NET
’1
’2
Tworzenie obiektu
deklaracja zmiennej dowolnej klasy to alokacja 4 bajtów
pamięci i przypisanie jej domyślnej wartości Nothing
przy braku konstruktorów, przy tworzeniu obiektu używamy
słowa New bez parametrów
Tomasz Goluch
Visual Basic .NET
Tworzenie obiektu
deklaracja zmiennej dowolnej klasy to alokacja 4 bajtów
pamięci i przypisanie jej domyślnej wartości Nothing
przy braku konstruktorów, przy tworzeniu obiektu używamy
słowa New bez parametrów
konstruktor to procedura o nazwie New (zwykle kilka
i z parametrami).
Tomasz Goluch
Visual Basic .NET
Tworzenie obiektu
deklaracja zmiennej dowolnej klasy to alokacja 4 bajtów
pamięci i przypisanie jej domyślnej wartości Nothing
przy braku konstruktorów, przy tworzeniu obiektu używamy
słowa New bez parametrów
konstruktor to procedura o nazwie New (zwykle kilka
i z parametrami).
pierwsza linia konstruktora powinna być wywołaniem
konstruktora w klasie bazowej, co realizujemy poprzez
MyBase.New(parametry)
Tomasz Goluch
Visual Basic .NET
Tworzenie obiektu
deklaracja zmiennej dowolnej klasy to alokacja 4 bajtów
pamięci i przypisanie jej domyślnej wartości Nothing
przy braku konstruktorów, przy tworzeniu obiektu używamy
słowa New bez parametrów
konstruktor to procedura o nazwie New (zwykle kilka
i z parametrami).
pierwsza linia konstruktora powinna być wywołaniem
konstruktora w klasie bazowej, co realizujemy poprzez
MyBase.New(parametry)
powyższe można pominąć jeśli klasa bazowa posiada
konstruktor bez parametrów i wówczas zostanie on wywołany
domyślnie
Tomasz Goluch
Visual Basic .NET
Tworzenie obiektu
deklaracja zmiennej dowolnej klasy to alokacja 4 bajtów
pamięci i przypisanie jej domyślnej wartości Nothing
przy braku konstruktorów, przy tworzeniu obiektu używamy
słowa New bez parametrów
konstruktor to procedura o nazwie New (zwykle kilka
i z parametrami).
pierwsza linia konstruktora powinna być wywołaniem
konstruktora w klasie bazowej, co realizujemy poprzez
MyBase.New(parametry)
powyższe można pominąć jeśli klasa bazowa posiada
konstruktor bez parametrów i wówczas zostanie on wywołany
domyślnie
Tomasz Goluch
Visual Basic .NET
Konstruktory – przykład
Public Class Osoba
Public imie As String
Public nazw As String
Public Sub New(ByVal i As String, ByVal n As String)
imie = i
nazw = n
End Sub
Public Sub New()
Me.New("-", "-")
End Sub
End Class
Tomasz Goluch
Visual Basic .NET
Tworzenie obiektu – przykład
Public Class Osoba
Public imie As String
Public nazw As String
Public Sub New(Optional ByVal i As String = "-", _
Optional ByVal n As String = "=")
imie = i
nazw = n
End Sub
End Class
Dim a As Osoba = New Osoba
Dim b As Osoba = New Osoba("Jan")
Dim b As Osoba = New Osoba("Jan", "K")
Tomasz Goluch
Visual Basic .NET
’ -,=
’ Jan,=
’ Jan,K
Uwaga o składowych Private
Jeśli składowa klasy (np. zmienna) jest zadeklarowana jako
Private, to obiekt danej klasy ma również dostęp do tej składowej
w innej instancji tej samej klasy.
Public Class Punkt
Private x As Double
Public Function Porownaj(ByVal inny_punkt As Punkt) _
As Boolean
If x > inny_punkt.x Then
return True
Else
return False
End If
End Function
End Class
Tomasz Goluch
Visual Basic .NET
Metoda Finalize
Garbage collector zwalnia pamięć przydzieloną obiektom, do
których nie ma referencji w programie. Możemy zlecić
wykonanie kodu tuż przed zwolnieniem pamięci przesłaniając
metodę Finalize zdefiniowaną w Object.
metoda Finalize nie musi być wywołana bezpośrednio po
tym, gdy przestaną istnieć w programie referencje do obiektu
Public Class A
...
Protected Overrides Sub Finalize()
...
End Sub
End Class
Tomasz Goluch
Visual Basic .NET
Metoda Finalize
Garbage collector zwalnia pamięć przydzieloną obiektom, do
których nie ma referencji w programie. Możemy zlecić
wykonanie kodu tuż przed zwolnieniem pamięci przesłaniając
metodę Finalize zdefiniowaną w Object.
metoda Finalize nie musi być wywołana bezpośrednio po
tym, gdy przestaną istnieć w programie referencje do obiektu
w celu natychmiastowego zwalniania zasobów używamy
Dispose
Public Class A
...
Protected Overrides Sub Finalize()
...
End Sub
End Class
Tomasz Goluch
Visual Basic .NET
Metoda Finalize
Garbage collector zwalnia pamięć przydzieloną obiektom, do
których nie ma referencji w programie. Możemy zlecić
wykonanie kodu tuż przed zwolnieniem pamięci przesłaniając
metodę Finalize zdefiniowaną w Object.
metoda Finalize nie musi być wywołana bezpośrednio po
tym, gdy przestaną istnieć w programie referencje do obiektu
w celu natychmiastowego zwalniania zasobów używamy
Dispose
Public Class A
...
Protected Overrides Sub Finalize()
...
End Sub
End Class
Tomasz Goluch
Visual Basic .NET
Przeciążanie operatorów
można przeciążać następujące operatory: +,-,*,/,\,^,&,
<<,>>,=,<>,<,>,<=,>=,Mod,Not,And,Or,Xor,Like,
IsTrue,IsFalse,CType
pewne operatory tworzą pary – trzeba przeciążać również
drugi. Pary: =,<>; <,>; <=,>= oraz IsTrue,IsFalse.
Tomasz Goluch
Visual Basic .NET
Przeciążanie operatorów
można przeciążać następujące operatory: +,-,*,/,\,^,&,
<<,>>,=,<>,<,>,<=,>=,Mod,Not,And,Or,Xor,Like,
IsTrue,IsFalse,CType
pewne operatory tworzą pary – trzeba przeciążać również
drugi. Pary: =,<>; <,>; <=,>= oraz IsTrue,IsFalse.
nie można przeciążać:
AndAlso,OrElse,New,TypeOf ... Is,Is,IsNot,
AddressOf,GetType,AsType
Tomasz Goluch
Visual Basic .NET
Przeciążanie operatorów
można przeciążać następujące operatory: +,-,*,/,\,^,&,
<<,>>,=,<>,<,>,<=,>=,Mod,Not,And,Or,Xor,Like,
IsTrue,IsFalse,CType
pewne operatory tworzą pary – trzeba przeciążać również
drugi. Pary: =,<>; <,>; <=,>= oraz IsTrue,IsFalse.
nie można przeciążać:
AndAlso,OrElse,New,TypeOf ... Is,Is,IsNot,
AddressOf,GetType,AsType
definiujemy podobnie jak procedury/funkcje, przy czym
Sub/Function używamy słowa kluczowego Operator,
a nazwą metody jest przeciążany operator
Tomasz Goluch
Visual Basic .NET
Przeciążanie operatorów
można przeciążać następujące operatory: +,-,*,/,\,^,&,
<<,>>,=,<>,<,>,<=,>=,Mod,Not,And,Or,Xor,Like,
IsTrue,IsFalse,CType
pewne operatory tworzą pary – trzeba przeciążać również
drugi. Pary: =,<>; <,>; <=,>= oraz IsTrue,IsFalse.
nie można przeciążać:
AndAlso,OrElse,New,TypeOf ... Is,Is,IsNot,
AddressOf,GetType,AsType
definiujemy podobnie jak procedury/funkcje, przy czym
Sub/Function używamy słowa kluczowego Operator,
a nazwą metody jest przeciążany operator
Tomasz Goluch
Visual Basic .NET
Przeciążanie operatorów
Class Punkt
Private x,
Public Sub
Me.x =
Me.y =
End Sub
y As Double
New(ByVal x As Double, ByVal y As Double)
x
y
Public Shared Operator +(ByVal a As Punkt,
ByVal b As Punkt) As Punkt
Dim r As New Punkt( a.x + b.x, a.y + b.y )
Return r
End Operator
End Class
Tomasz Goluch
Visual Basic .NET
Przeciążanie operatorów – przykład
Private Class A
Public x As Integer
Public Sub New()
x = 1
End Sub
Public Shared Widening Operator CType(ByVal x As Integer) As A
Dim r As A = New A
r.x = x
Return r
End Operator
End Class
...
Dim a As A = New A
a = 101
Uwaga: musimy użyć:
Widening – gdy rzutowanie zawsze się powiedzie
Tomasz Goluch
Visual Basic .NET
Przeciążanie operatorów – przykład
Private Class A
Public x As Integer
Public Sub New()
x = 1
End Sub
Public Shared Widening Operator CType(ByVal x As Integer) As A
Dim r As A = New A
r.x = x
Return r
End Operator
End Class
...
Dim a As A = New A
a = 101
Uwaga: musimy użyć:
Widening – gdy rzutowanie zawsze się powiedzie
Narrowing – gdy możliwy jest błąd rzutowania (zgłosimy wyjątek)
Tomasz Goluch
Visual Basic .NET
Przeciążanie operatorów – przykład
Private Class A
Public x As Integer
Public Sub New()
x = 1
End Sub
Public Shared Widening Operator CType(ByVal x As Integer) As A
Dim r As A = New A
r.x = x
Return r
End Operator
End Class
...
Dim a As A = New A
a = 101
Uwaga: musimy użyć:
Widening – gdy rzutowanie zawsze się powiedzie
Narrowing – gdy możliwy jest błąd rzutowania (zgłosimy wyjątek)
Tomasz Goluch
Visual Basic .NET
Definicja modułu
[ <atrybuty> ] [ dostęp ] Module nazwa
[ zawartość ]
End Module
typ referencyjny, może być zdefiniowany jedynie wewnątrz
pliku lub przestrzeni nazw
Tomasz Goluch
Visual Basic .NET
Definicja modułu
[ <atrybuty> ] [ dostęp ] Module nazwa
[ zawartość ]
End Module
typ referencyjny, może być zdefiniowany jedynie wewnątrz
pliku lub przestrzeni nazw
czas życia identyczny jak czas życia programu
Tomasz Goluch
Visual Basic .NET
Definicja modułu
[ <atrybuty> ] [ dostęp ] Module nazwa
[ zawartość ]
End Module
typ referencyjny, może być zdefiniowany jedynie wewnątrz
pliku lub przestrzeni nazw
czas życia identyczny jak czas życia programu
dostęp jedynie Friend (domyslny) i Public
Tomasz Goluch
Visual Basic .NET
Definicja modułu
[ <atrybuty> ] [ dostęp ] Module nazwa
[ zawartość ]
End Module
typ referencyjny, może być zdefiniowany jedynie wewnątrz
pliku lub przestrzeni nazw
czas życia identyczny jak czas życia programu
dostęp jedynie Friend (domyslny) i Public
wewnątrz modułu można definiować: zmienne, właściwości,
zdarzenia, procedury oraz typy zagnieżdżone
Tomasz Goluch
Visual Basic .NET
Definicja modułu
[ <atrybuty> ] [ dostęp ] Module nazwa
[ zawartość ]
End Module
typ referencyjny, może być zdefiniowany jedynie wewnątrz
pliku lub przestrzeni nazw
czas życia identyczny jak czas życia programu
dostęp jedynie Friend (domyslny) i Public
wewnątrz modułu można definiować: zmienne, właściwości,
zdarzenia, procedury oraz typy zagnieżdżone
Tomasz Goluch
Visual Basic .NET
Definicja modułu
[ <atrybuty> ] [ dostęp ] Module nazwa
[ zawartość ]
End Module
składowe modułu widoczne są bezpośrednio w przestrzeni
nazw w którym jest on zdefiniowany (promocja typu)
nie można dziedziczyć, implementować oraz tworzyć obiektów
modułu.
Tomasz Goluch
Visual Basic .NET
Definicja modułu
[ <atrybuty> ] [ dostęp ] Module nazwa
[ zawartość ]
End Module
składowe modułu widoczne są bezpośrednio w przestrzeni
nazw w którym jest on zdefiniowany (promocja typu)
nie można dziedziczyć, implementować oraz tworzyć obiektów
modułu.
wszystkie składowe modułu są współdzielone – Shared,
(static w C#)
Tomasz Goluch
Visual Basic .NET
Definicja modułu
[ <atrybuty> ] [ dostęp ] Module nazwa
[ zawartość ]
End Module
składowe modułu widoczne są bezpośrednio w przestrzeni
nazw w którym jest on zdefiniowany (promocja typu)
nie można dziedziczyć, implementować oraz tworzyć obiektów
modułu.
wszystkie składowe modułu są współdzielone – Shared,
(static w C#)
odpowiednik klasy statycznej i zamkniętej jednocześnie
(static i sealed z C#) ?
Tomasz Goluch
Visual Basic .NET
Definicja modułu
[ <atrybuty> ] [ dostęp ] Module nazwa
[ zawartość ]
End Module
składowe modułu widoczne są bezpośrednio w przestrzeni
nazw w którym jest on zdefiniowany (promocja typu)
nie można dziedziczyć, implementować oraz tworzyć obiektów
modułu.
wszystkie składowe modułu są współdzielone – Shared,
(static w C#)
odpowiednik klasy statycznej i zamkniętej jednocześnie
(static i sealed z C#) ?
Tomasz Goluch
Visual Basic .NET
Moduły – przykład
Public Module thisModule
Sub Main()
Dim userName As String = _
InputBox("What is your name?")
MsgBox("User name is" & userName)
End Sub
’ Insert variable, property, procedure,
’ and event declarations.
End Module
Tomasz Goluch
Visual Basic .NET
Delegaty
Public Shared Function GetIndexOfFirstNonEmptyBin _
(ByVal bins As Integer()) As Integer
Dim num As Integer = Array.FindIndex( _
bins, AddressOf IsGreaterThanZero)
Return num
End Function
Private Shared Function IsGreaterThanZero _
(ByVal value As Integer) As Boolean
Return value > 0
End Function
operator AddressOf zwraca adres procedury/funkcji
Tomasz Goluch
Visual Basic .NET
Delegaty
Public Delegate Function Predicate _
(Of In T)(ByVal obj As T) As Boolean
Public Shared Function FindIndex _
(Of T)(ByVal array As T(), _
ByVal match As Predicate(Of T)) As Integer
’ ...
ElseIf (Not match(array(i))) Then
’ ...
End Function
typ Predicate(Of T) pozwala na przekazanie procedury/funkcji
jest on definiowany przy pomocy słowa kluczowego Delegate
Tomasz Goluch
Visual Basic .NET
Delegaty
Public Delegate Function Predicate _
(Of In T)(ByVal obj As T) As Boolean
Public Shared Function FindIndex _
(Of T)(ByVal array As T(), _
ByVal match As Predicate(Of T)) As Integer
’ ...
ElseIf (Not match(array(i))) Then
’ ...
End Function
typ Predicate(Of T) pozwala na przekazanie procedury/funkcji
jest on definiowany przy pomocy słowa kluczowego Delegate
w celu dopasowywania metody do typu delegata możliwa jest
niejawna konwersja parametrów metody do parametrów delegata
Tomasz Goluch
Visual Basic .NET
Delegaty
Public Delegate Function Predicate _
(Of In T)(ByVal obj As T) As Boolean
Public Shared Function FindIndex _
(Of T)(ByVal array As T(), _
ByVal match As Predicate(Of T)) As Integer
’ ...
ElseIf (Not match(array(i))) Then
’ ...
End Function
typ Predicate(Of T) pozwala na przekazanie procedury/funkcji
jest on definiowany przy pomocy słowa kluczowego Delegate
w celu dopasowywania metody do typu delegata możliwa jest
niejawna konwersja parametrów metody do parametrów delegata
Tomasz Goluch
Visual Basic .NET
Tworzenie delegatów
Dim p = New Predicate(Of Integer)(AddressOf IsGreaterThanZero)
Dim p As Predicate(Of Integer) = AddressOf IsGreaterThanZero
wyrażenie IsGreaterThanZero nie ma własnego typu i może
pasować do różnych typów delegatów zatem musimy podać
jawnie, którego typu delegatów chcemy użyć
wyrażenie IsGreaterThanZero reprezentuje grupę metod
(możliwe przeciażenie)
Tomasz Goluch
Visual Basic .NET
Tworzenie delegatów
Dim p = New Predicate(Of Integer)(AddressOf IsGreaterThanZero)
Dim p As Predicate(Of Integer) = AddressOf IsGreaterThanZero
wyrażenie IsGreaterThanZero nie ma własnego typu i może
pasować do różnych typów delegatów zatem musimy podać
jawnie, którego typu delegatów chcemy użyć
wyrażenie IsGreaterThanZero reprezentuje grupę metod
(możliwe przeciażenie)
Tomasz Goluch
Visual Basic .NET
Tworzenie delegatów
Public Class ThresholdComparer
Public Property Threshold As Integer
Public Function IsGreaterThan(ByVal value As Integer) _
As Boolean
Return value > Threshold
End Function
Public Function GetIsGreaterThanPredicate() _
As Predicate(Of Integer)
Return New Predicate(Of Integer) _
(AddressOf IsGreaterThan)
End Function
End Class
Tomasz Goluch
Visual Basic .NET
Tworzenie delegatów
Dim zeroThreshold As ThresholdComparer = _
New ThresholdComparer() With {.Threshold = 0}
Dim tenThreshold As ThresholdComparer = _
New ThresholdComparer() With {.Threshold = 10}
Dim hundredThreshold As ThresholdComparer = _
New ThresholdComparer() With {.Threshold = 100}
Tomasz Goluch
Visual Basic .NET
Tworzenie delegatów
Jeśli nie wiadomo jaka metoda bądź obiekt zostaną użyte w trakcie
wykonywania programu możemy – w celu utworzenia delegata –
posłużyć się metodą statyczną CreateDelegate klasy Delegate.
Tomasz Goluch
Visual Basic .NET
Tworzenie delegatów
Dim greaterThanZero As Predicate(Of Integer) _
= [Delegate].CreateDelegate( _
GetType(Predicate(Of Integer)), _
zeroThreshold, "IsGreaterThan")
Dim greaterThanTen As Predicate(Of Integer) _
= [Delegate].CreateDelegate( _
GetType(Predicate(Of Integer)), _
tenThreshold, "IsGreaterThan")
Dim greaterThanHundred As Predicate(Of Integer) _
= [Delegate].CreateDelegate( _
GetType(Predicate(Of Integer)), _
hundredThreshold, "IsGreaterThan")
nawiasy kwadratowe mówią kompilatorowi, że chodzi o nazwę
klasy a nie słowo kluczowe
Tomasz Goluch
Visual Basic .NET
Tworzenie delegatów zbiorowych
Dim multicastDelegate = [Delegate].Combine( _
greaterThanZero, _
greaterThanTen, _
New Predicate(Of Integer)( _
AddressOf hundredThreshold.IsGreaterThan))
multicastDelegate = [Delegate].Combine( _
multicastDelegate, _
greaterThanHundred)
w VB nie ma przeciążonych operatorów: +, +=, -, -= dla
delegatów
Tomasz Goluch
Visual Basic .NET
Wywoływanie delegatów
Dim trueCount As Integer = 0, falseCount As Integer = 0
For Each p As Predicate(Of Integer) In _
multicastDelegate.GetInvocationList()
If (p(42) = True) Then
falseCount = falseCount + 1
Else
trueCount = trueCount + 1
End If
Next
zmienne trueCount i falseCount przyjmą wartość 2
metoda na którą wskazuje delegat greaterThanHundred
zostanie wywołana dwa razy
Tomasz Goluch
Visual Basic .NET
Wywoływanie delegatów
Dim trueCount As Integer = 0, falseCount As Integer = 0
For Each p As Predicate(Of Integer) In _
multicastDelegate.GetInvocationList()
If (p(42) = True) Then
falseCount = falseCount + 1
Else
trueCount = trueCount + 1
End If
Next
zmienne trueCount i falseCount przyjmą wartość 2
metoda na którą wskazuje delegat greaterThanHundred
zostanie wywołana dwa razy
Tomasz Goluch
Visual Basic .NET
Predefiniowane delegaty
.NET definiuje sporą liczbę specjalizowanych delegatów np.
Predicate(Of Integer)
Jeśli istnieje niejawna konwersja referencji pomiędzy typami A
i B to istnieje również niejawna konwersja pomiędzy typami
Predicate(Of A) i Predicate(Of B)
Tomasz Goluch
Visual Basic .NET
Predefiniowane delegaty
.NET definiuje sporą liczbę specjalizowanych delegatów np.
Predicate(Of Integer)
Jeśli istnieje niejawna konwersja referencji pomiędzy typami A
i B to istnieje również niejawna konwersja pomiędzy typami
Predicate(Of A) i Predicate(Of B)
Tomasz Goluch
Visual Basic .NET
Delegaty Action<T>i Func<T, TResult>
Public Delegate Sub Action(Of In T)
’...
Public Delegate Sub Action _
(Of In T1, In T2, In T3, In T4,
In T5, In T6, In T7, In T8,
In T9, In T10, In T11, In T12,
In T13, In T14, In T15, In T16) _
(arg1 As T1, arg2 As T2, arg3 As T3, arg4 As T4, _
arg5 As T5, arg6 As T6, arg7 As T7, arg8 As T8, _
arg9 As T9, arg10 As T10, arg11 As T11, arg12 As T12, _
arg13 As T13, arg14 As T14, arg15 As T15, arg16 As T16 )
Tomasz Goluch
Visual Basic .NET
Delegaty Action<T>i Func<T, TResult>
Public Delegate Function Func(Of Out TResult) As TResult
’...
Public Delegate Function _
Func(Of In T1, In T2, In T3, In T4,
In T5, In T6, In T7, In T8,
In T9, In T10, In T11, In T12,
In T13, In T14, In T15, In T16,
Out TResult) _
(arg1 As T1, arg2 As T2,
arg3 As T3, arg4 As T4,
arg5 As T5, arg6 As T6,
arg7 As T7, arg8 As T8,
arg9 As T9, arg10 As T10,
arg11 As T11, arg12 As T12,
arg13 As T13, arg14 As T14,
arg15 As T15, arg16 As T16) _
As TResult
Tomasz Goluch
Visual Basic .NET
Właściwości
Private Class B
Private x As Integer
Public Property x_pr()
Get
Return x
End Get
Set(ByVal value)
x = value
End Set
End Property
End Class
Tomasz Goluch
Visual Basic .NET
Obsługa błędów
Try
[ kod ]
[ Exit Try ]
[ Catch [ wyjątek [ As typ ] ] [ When wyrażenie ]
[ kod ]
[ Exit Try ] ]
[ Catch ... ]
[ Finally
[ kod ] ]
End Try
Tomasz Goluch
Visual Basic .NET
Obsługa błędów
gdy pojawi się błąd podczas wykonywania bloku Try,
poszukiwany jest blok Catch, którego typ wyjątku ”pasuje”
do błędu
kod w bloku Finally wykonywany jest po tym, gdy kod
bloku try wykona się bezbłędnie lub gdy zakończy się obsługa
błędu w bloku Catch
Tomasz Goluch
Visual Basic .NET
Obsługa błędów
gdy pojawi się błąd podczas wykonywania bloku Try,
poszukiwany jest blok Catch, którego typ wyjątku ”pasuje”
do błędu
kod w bloku Finally wykonywany jest po tym, gdy kod
bloku try wykona się bezbłędnie lub gdy zakończy się obsługa
błędu w bloku Catch
wyjątki od powyższego, to napotkanie wyrażenia End lub
pojawił się wyjątek StackOverflowException w bloku Try
lub Catch
Tomasz Goluch
Visual Basic .NET
Obsługa błędów
gdy pojawi się błąd podczas wykonywania bloku Try,
poszukiwany jest blok Catch, którego typ wyjątku ”pasuje”
do błędu
kod w bloku Finally wykonywany jest po tym, gdy kod
bloku try wykona się bezbłędnie lub gdy zakończy się obsługa
błędu w bloku Catch
wyjątki od powyższego, to napotkanie wyrażenia End lub
pojawił się wyjątek StackOverflowException w bloku Try
lub Catch
Tomasz Goluch
Visual Basic .NET
Interfejsy
nie ma możliwości wielokrotnego dziedziczenia w VB,
klasa może implementować wiele interfejsów.
[ <atrybuty> ] [ dostęp ] [ Shadows ] _
Interface nazwa [ ( Of lista_typów ) ]
...
End Interface
Public Interface IFigura
Function pole() As Double
Property X() As Double
Property Y() As Double
End Interface
Tomasz Goluch
Visual Basic .NET
Interfejsy
nie ma możliwości wielokrotnego dziedziczenia w VB,
klasa może implementować wiele interfejsów.
[ <atrybuty> ] [ dostęp ] [ Shadows ] _
Interface nazwa [ ( Of lista_typów ) ]
...
End Interface
Public Interface IFigura
Function pole() As Double
Property X() As Double
Property Y() As Double
End Interface
Tomasz Goluch
Visual Basic .NET
Interfejsy
Public Class Kwadrat
Implements IFigura
Public Function pole() As Double _
Implements IFigura.pole
End Function
Property X() As Double Implements IFigura.X
Get
End Get
Set(ByVal a As Double)
End Set
End Property
...
End Class
Tomasz Goluch
Visual Basic .NET
Struktury
[ <atrybuty> ] [ dostęp ] [ Shadows ] [ Partial ] _
Structure nazwa [ ( Of lista_typów ) ]
[ Implements nazwy_interfejsów ]
...
End Structure
Różnice w stosunku do klasy:
struktury nie mogą dziedziczyć,
zmienna będąca strukturą przechowuje całą zawartość
struktury (value type), natomiast zmienna obiektowa jest
referencją (4 bajty).
Tomasz Goluch
Visual Basic .NET
Struktury
[ <atrybuty> ] [ dostęp ] [ Shadows ] [ Partial ] _
Structure nazwa [ ( Of lista_typów ) ]
[ Implements nazwy_interfejsów ]
...
End Structure
Różnice w stosunku do klasy:
struktury nie mogą dziedziczyć,
zmienna będąca strukturą przechowuje całą zawartość
struktury (value type), natomiast zmienna obiektowa jest
referencją (4 bajty).
przypisanie w przypadku struktury kopiuje całą jej zawartość;
w przypadku obiektów - przypisanie powoduje, że obie
zmienne wskazują ten sam obiekt.
Tomasz Goluch
Visual Basic .NET
Struktury
[ <atrybuty> ] [ dostęp ] [ Shadows ] [ Partial ] _
Structure nazwa [ ( Of lista_typów ) ]
[ Implements nazwy_interfejsów ]
...
End Structure
Różnice w stosunku do klasy:
struktury nie mogą dziedziczyć,
zmienna będąca strukturą przechowuje całą zawartość
struktury (value type), natomiast zmienna obiektowa jest
referencją (4 bajty).
przypisanie w przypadku struktury kopiuje całą jej zawartość;
w przypadku obiektów - przypisanie powoduje, że obie
zmienne wskazują ten sam obiekt.
Tomasz Goluch
Visual Basic .NET
Generics – deklaracje generyczne
Pubilc Class Lista(Of t [As IComparable])
...
End Class
...
Dim l As Lista(Of String)
kontrola typów na etapie kompilacji
Tomasz Goluch
Visual Basic .NET
Przestrzenie nazw (Namespaces)
przestrzenie nazw pozwalają rozwiązywać problemy związane
z jednakowymi nazwami, np. klas.
przestrzenie nazw mogą tworzyć hierarchiczną strukturę
Dim a As Siec.Polaczenie
Dim b As Zasoby.Polaczenie
Tomasz Goluch
Visual Basic .NET
Przestrzenie nazw (Namespaces)
przestrzenie nazw pozwalają rozwiązywać problemy związane
z jednakowymi nazwami, np. klas.
przestrzenie nazw mogą tworzyć hierarchiczną strukturę
nie są typami, służą do organizacji kodu
Dim a As Siec.Polaczenie
Dim b As Zasoby.Polaczenie
Tomasz Goluch
Visual Basic .NET
Przestrzenie nazw (Namespaces)
przestrzenie nazw pozwalają rozwiązywać problemy związane
z jednakowymi nazwami, np. klas.
przestrzenie nazw mogą tworzyć hierarchiczną strukturę
nie są typami, służą do organizacji kodu
Dim a As Siec.Polaczenie
Dim b As Zasoby.Polaczenie
Tomasz Goluch
Visual Basic .NET
Namespaces – Imports
wyrażenia typu System.Drawing.Rectangle nie są wygodne
i utrudniają czytanie kodu.
umieszczamy na początku pliku Imports System.Drawing
i wówczas w kodzie wcześniejsze wyrażenie zastępujemy
Rectangle
Tomasz Goluch
Visual Basic .NET
Namespaces – Imports
wyrażenia typu System.Drawing.Rectangle nie są wygodne
i utrudniają czytanie kodu.
umieszczamy na początku pliku Imports System.Drawing
i wówczas w kodzie wcześniejsze wyrażenie zastępujemy
Rectangle
plik może zawierać (zawsze podane na początku) dowolną
liczbę instrukcji Imports
Tomasz Goluch
Visual Basic .NET
Namespaces – Imports
wyrażenia typu System.Drawing.Rectangle nie są wygodne
i utrudniają czytanie kodu.
umieszczamy na początku pliku Imports System.Drawing
i wówczas w kodzie wcześniejsze wyrażenie zastępujemy
Rectangle
plik może zawierać (zawsze podane na początku) dowolną
liczbę instrukcji Imports
jeśli chcemy importować różne moduły dla różnych
fragmentów kodu, to trzeba kod podzielić pomiędzy kilka
plików.
Tomasz Goluch
Visual Basic .NET
Namespaces – Imports
wyrażenia typu System.Drawing.Rectangle nie są wygodne
i utrudniają czytanie kodu.
umieszczamy na początku pliku Imports System.Drawing
i wówczas w kodzie wcześniejsze wyrażenie zastępujemy
Rectangle
plik może zawierać (zawsze podane na początku) dowolną
liczbę instrukcji Imports
jeśli chcemy importować różne moduły dla różnych
fragmentów kodu, to trzeba kod podzielić pomiędzy kilka
plików.
Tomasz Goluch
Visual Basic .NET
Namespaces – aliasy
Pełna składnia: Imports [alias =] namespace[.element] Np:
Imports D2 = System.Drawing.Drawing2D
...
Dim dash_style As D2.DashStyle = D2.DashStyle.DashDotDot
Jeżli zdefiniowaliśmy alias, to trzeba go użyć, aby się odwołać
do elementu przestrzeni nazw.
aliasy są potrzebne, gdy importujemy dwie przestrzenie nazw,
które zawierają definicje jednakowo nazwanych elementów
(np. klas)
Tomasz Goluch
Visual Basic .NET
Namespaces – aliasy
Pełna składnia: Imports [alias =] namespace[.element] Np:
Imports D2 = System.Drawing.Drawing2D
...
Dim dash_style As D2.DashStyle = D2.DashStyle.DashDotDot
Jeżli zdefiniowaliśmy alias, to trzeba go użyć, aby się odwołać
do elementu przestrzeni nazw.
aliasy są potrzebne, gdy importujemy dwie przestrzenie nazw,
które zawierają definicje jednakowo nazwanych elementów
(np. klas)
Tomasz Goluch
Visual Basic .NET
Namespaces – importowanie elementu
Oprócz importowania przestrzeni nazw można importować jej
element.
Imports AliasDoListBox = ListBoxProject.Form1.ListBox
...
Dim x As AliasDoListBox
Tomasz Goluch
Visual Basic .NET
Namespaces – definiowanie własnych
Każdy projekt posiada swoją przestrzeń nazw – każdy element
w nim zdefiniowany do niej należy (bezpośrednio lub
pośrednio).
Można definiować własną przestrzeń nazw (wewnątrz
przestrzeni nazw projektu):
Namespace StrukturyDanych
Public Class Lista
...
End Class
End Namespace
Tomasz Goluch
Visual Basic .NET
Namespaces – definiowanie własnych
Każdy projekt posiada swoją przestrzeń nazw – każdy element
w nim zdefiniowany do niej należy (bezpośrednio lub
pośrednio).
Można definiować własną przestrzeń nazw (wewnątrz
przestrzeni nazw projektu):
Namespace StrukturyDanych
Public Class Lista
...
End Class
End Namespace
Tomasz Goluch
Visual Basic .NET
Namespaces – definiowanie własnych
Do powyżej zdefiniowanej klasy Lista kod wewnątrz
przestrzeni StrukturyDanych odwołuje się poprzez samą
nazwę Lista
Kod poza tą przestrzenią odwołuje się następująco:
Dim l As New MyApplication.StrukturyDanych.Lista
zakładając, że MyApplication jest przestrzenią nazw projektu.
Tomasz Goluch
Visual Basic .NET
Namespaces – definiowanie własnych
Do powyżej zdefiniowanej klasy Lista kod wewnątrz
przestrzeni StrukturyDanych odwołuje się poprzez samą
nazwę Lista
Kod poza tą przestrzenią odwołuje się następująco:
Dim l As New MyApplication.StrukturyDanych.Lista
zakładając, że MyApplication jest przestrzenią nazw projektu.
Tomasz Goluch
Visual Basic .NET
Namespaces – definiowanie własnych
wewnątrz przestrzeni nazw można definiować inne przestrzenie
nazw, klasy, struktury, moduły, typy wyliczeniowe, interfejsy.
wewnątrz przestrzeni nazw nie można definiować bezpośrednio
zmiennych, właściwości (properties), procedur, zdarzeń
(events).
Tomasz Goluch
Visual Basic .NET
Namespaces – definiowanie własnych
wewnątrz przestrzeni nazw można definiować inne przestrzenie
nazw, klasy, struktury, moduły, typy wyliczeniowe, interfejsy.
wewnątrz przestrzeni nazw nie można definiować bezpośrednio
zmiennych, właściwości (properties), procedur, zdarzeń
(events).
można jedną przestrzeń nazw definiować w kilku fragmentach.
Przydatne, gdy:
Tomasz Goluch
Visual Basic .NET
Namespaces – definiowanie własnych
wewnątrz przestrzeni nazw można definiować inne przestrzenie
nazw, klasy, struktury, moduły, typy wyliczeniowe, interfejsy.
wewnątrz przestrzeni nazw nie można definiować bezpośrednio
zmiennych, właściwości (properties), procedur, zdarzeń
(events).
można jedną przestrzeń nazw definiować w kilku fragmentach.
Przydatne, gdy:
chcemy definicje klas umieszczać w osobnych plikach,
Tomasz Goluch
Visual Basic .NET
Namespaces – definiowanie własnych
wewnątrz przestrzeni nazw można definiować inne przestrzenie
nazw, klasy, struktury, moduły, typy wyliczeniowe, interfejsy.
wewnątrz przestrzeni nazw nie można definiować bezpośrednio
zmiennych, właściwości (properties), procedur, zdarzeń
(events).
można jedną przestrzeń nazw definiować w kilku fragmentach.
Przydatne, gdy:
chcemy definicje klas umieszczać w osobnych plikach,
różne osoby pracują nad różnymi fragmentami kodu,
Tomasz Goluch
Visual Basic .NET
Namespaces – definiowanie własnych
wewnątrz przestrzeni nazw można definiować inne przestrzenie
nazw, klasy, struktury, moduły, typy wyliczeniowe, interfejsy.
wewnątrz przestrzeni nazw nie można definiować bezpośrednio
zmiennych, właściwości (properties), procedur, zdarzeń
(events).
można jedną przestrzeń nazw definiować w kilku fragmentach.
Przydatne, gdy:
chcemy definicje klas umieszczać w osobnych plikach,
różne osoby pracują nad różnymi fragmentami kodu,
chcemy rozszerzyć istniejące przestrzenie nazw.
Tomasz Goluch
Visual Basic .NET
Namespaces – definiowanie własnych
wewnątrz przestrzeni nazw można definiować inne przestrzenie
nazw, klasy, struktury, moduły, typy wyliczeniowe, interfejsy.
wewnątrz przestrzeni nazw nie można definiować bezpośrednio
zmiennych, właściwości (properties), procedur, zdarzeń
(events).
można jedną przestrzeń nazw definiować w kilku fragmentach.
Przydatne, gdy:
chcemy definicje klas umieszczać w osobnych plikach,
różne osoby pracują nad różnymi fragmentami kodu,
chcemy rozszerzyć istniejące przestrzenie nazw.
Tomasz Goluch
Visual Basic .NET
XML w Visual Basic .NET
Dim o As XElement =
<osoba>
<name>Kowalski</name>
<tel type="domowy">581234567</phone>
<tel type="praca">587654321</phone>
</osoba>
Tomasz Goluch
Visual Basic .NET
Nowości w VB 14.0 i C#6.0
Auto property initializer:
public class Person
{
public int Id { get; } = -1;
}
Tomasz Goluch
Visual Basic .NET
Nowości w VB 14.0 i C#6.0
Primary constructors:
public class Ruler(string unitsName,decimal value)
{
public string UnitsName { get; } = unitsName;
public decimal Value { get; } = value;
}
Składnia klasyczna:
public class Ruler
{
public Ruler(string unitName,decimal value)
{
UnitsName = unitName;
Value = value;
}
public string UnitsName { get; private set; }
public decimal Value { get; private set; }
}
Tomasz Goluch
Visual Basic .NET
Nowości w VB 14.0 i C#6.0
Wartość domyślna w konstruktorze:
public class Ruler(string unitsName, decimal value)
{
public string UnitsName { get; } = unitsName ?? "cm";
public decimal Value { get; } = value;
}
Tomasz Goluch
Visual Basic .NET
Nowości w VB 14.0 i C#6.0
Static typename:
using System.Console;
namespace CSharp6Example
{
class Program
{
static void Main(string[] args)
{
WriteLine("Hello");
}
}
}
Tomasz Goluch
Visual Basic .NET
Nowości w VB 14.0 i C#6.0
New dictionary initializer:
Dictionary<string, Person> _persons =
new Dictionary<string, Person>()
{
["programista"] = new Person(),
["grafik"] = new Person()
};
Składnia klasyczna:
Dictionary<string, Person> _persons =
new Dictionary<string, Person>()
{
{ "programista", new Person() },
{ "grafik", new Person() }
}
Tomasz Goluch
Visual Basic .NET
Nowości w VB 14.0 i C#6.0
Działanie kompilarora C#6.0:
Dictionary<string, Person> _persons =
new Dictionary<string, Person>();
_persons["programista"] = new Person());
_persons["grafik"] = new Person());
Działanie kompilarora C#3.0:
Dictionary<string, Person> _persons =
new Dictionary<string, Person>();
_persons.Add("programista", new Person());
_persons.Add("grafik", new Person());
Tomasz Goluch
Visual Basic .NET
Nowości w VB 14.0 i C#6.0
New numbers syntax:
public class NumbersSixCSharp
{
public long MyCash { get; } = 1_500_000_000;
public byte SecretCode { get; } = 0b1100;
}
Tomasz Goluch
Visual Basic .NET
Nowości w VB 14.0 i C#6.0
Operator ?.:
If customer IsNot Nothing AndAlso customer.Age >= 100 Then
Console.WriteLine("send telegram")
End If
If customer?.Age >= 100 Then
Console.WriteLine("send telegram")
End If
Tomasz Goluch
Visual Basic .NET
Nowości w VB 14.0 i C#6.0
String Interpolation:
Dim url = String.Format( _
"http://{0}/{1}?query={2}" site, path, g)
Dim url = $"http://{site}/{path}?query={g}"
Tomasz Goluch
Visual Basic .NET
Nowości w VB 14.0 i C#6.0
Multiline Strings:
Dim multiline = vbCrLf &
"[configuration]" & vbCrLf &
"name=freud" & vbCrLf &
"age=40"
Dim multiline = "
[configuration]
name=freud
age=40"
Tomasz Goluch
Visual Basic .NET
Nowości w VB 14.0 i C#6.0
Komentarze w zapytaniach LINQ:
Dim addr = From i In invitees
’go through the list
Let address = Lookup(i) ’look up name
Select i, address
Wcześniej komentarze wewnątrz zapytań były traktowane jako błąd
Tomasz Goluch
Visual Basic .NET
Dziękuje za uwagę
Tomasz Goluch
Visual Basic .NET

Podobne dokumenty