Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0...

256
Visual Basic .NET Języki Programowania na Platformie .NET Tomasz Goluch http://kaims.eti.pg.gda.pl/goluch/ [email protected]

Transcript of Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0...

Page 1: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Visual Basic .NETJęzyki Programowania na Platformie .NET

Tomasz Goluch

http://kaims.eti.pg.gda.pl/∼goluch/[email protected]

Page 2: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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-bitVB 5.0/VS 97 (1997)VB/VS 6.0 (1998)VB/VS 7.0 .NET 1.0 (2002) / C#1.0VB/VS 7.1 .NET 1.1 (2003) / C#1.2VB/VS 8.0 .NET 2.0 (2005) / C#2.0VB/VS 9.0 .NET 3.5 (2008) / C#3.0VB/VS 10.0 .NET 4.0 (2010) / C#4.0VB/VS 11.0 .NET 4.5 (2012) / C#5.0VB/VS 14.0 .NET 4.6 (2015) / C#6.0VB/VS 15.0 .NET 4.7 (2017) / C#7.0

Tomasz Goluch Visual Basic .NET

Page 3: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

wprowadzenie rozszerzenia Managed C++obsługującegoplatformę .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

Page 4: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

wprowadzenie rozszerzenia Managed C++obsługującegoplatformę .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

Page 5: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

wprowadzenie rozszerzenia Managed C++obsługującegoplatformę .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

Page 6: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

wprowadzenie rozszerzenia Managed C++obsługującegoplatformę .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

Page 7: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

wprowadzenie rozszerzenia Managed C++obsługującegoplatformę .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

Page 8: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

wprowadzenie rozszerzenia Managed C++obsługującegoplatformę .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

Page 9: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 10: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 11: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 12: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 13: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 Roslyn – open source (np. można napisaćrozszerzenia by wyświetlać własne ostrzeżenia i błędy wtrakcie kompilowania kodu)

Tomasz Goluch Visual Basic .NET

Page 14: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 Roslyn – open source (np. można napisaćrozszerzenia by wyświetlać własne ostrzeżenia i błędy wtrakcie kompilowania kodu)

Tomasz Goluch Visual Basic .NET

Page 15: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 Roslyn – open source (np. można napisaćrozszerzenia by wyświetlać własne ostrzeżenia i błędy wtrakcie kompilowania kodu)

Tomasz Goluch Visual Basic .NET

Page 16: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 Roslyn – open source (np. można napisaćrozszerzenia by wyświetlać własne ostrzeżenia i błędy wtrakcie kompilowania kodu)

Tomasz Goluch Visual Basic .NET

Page 17: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 Roslyn – open source (np. można napisaćrozszerzenia by wyświetlać własne ostrzeżenia i błędy wtrakcie kompilowania kodu)

Tomasz Goluch Visual Basic .NET

Page 18: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 Roslyn – open source (np. można napisaćrozszerzenia by wyświetlać własne ostrzeżenia i błędy wtrakcie kompilowania kodu)

Tomasz Goluch Visual Basic .NET

Page 19: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 Roslyn – open source (np. można napisaćrozszerzenia by wyświetlać własne ostrzeżenia i błędy wtrakcie kompilowania kodu)

Tomasz Goluch Visual Basic .NET

Page 20: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Wersje VB, VS, .NET oraz C#

VB/VS 15.0 .NET 4.7 (2015) / C#7.0

ValueTuple

Poprawa czytelności literałów

Typ zwracany przez referencję – tylko wykorzystanie funkcji zC#

Tomasz Goluch Visual Basic .NET

Page 21: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Wersje VB, VS, .NET oraz C#

VB/VS 15.0 .NET 4.7 (2015) / C#7.0

ValueTuple

Poprawa czytelności literałów

Typ zwracany przez referencję – tylko wykorzystanie funkcji zC#

Tomasz Goluch Visual Basic .NET

Page 22: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Wersje VB, VS, .NET oraz C#

VB/VS 15.0 .NET 4.7 (2015) / C#7.0

ValueTuple

Poprawa czytelności literałów

Typ zwracany przez referencję – tylko wykorzystanie funkcji zC#

Tomasz Goluch Visual Basic .NET

Page 23: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Wersje VB, VS, .NET oraz C#

VB/VS 15.0 .NET 4.7 (2015) / C#7.0

ValueTuple

Poprawa czytelności literałów

Typ zwracany przez referencję – tylko wykorzystanie funkcji zC#

Tomasz Goluch Visual Basic .NET

Page 24: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Visual Basic .NET? vs C#

VB nie jest case-sensitive (trudniej o błąd, ale mniejsza liczbakombinacji nazw)instrukcja Select Case odpowiednik Switch zC#współpracuje z operatorami porównania: <,<=,>,>=,=,<>

analogicznie typ wyliczeniowy Enum współpracuje z w/woperatorami i to nawet przy włączonej opcji Strictkompilatorasłowo kluczowe WithEvents wraz z Handles pozwala nadeklaratywny sposób określania obsługi zdarzeńdzięki RaiseEvent istnieje możliwość wyświetlenia listydostępnych zdarzeń i dodawania obsługi nowego bezopuszczania okna z kodem (doryczy równiez zmiennychzadeklarowanych z WithEvents)w zasiegu składni: With objectExpression ... End With– można wykonać szereg odwołań do określonego obiektu bezpodwania jego nazwy.

Tomasz Goluch Visual Basic .NET

Page 25: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Visual Basic .NET? vs C#

VB nie jest case-sensitive (trudniej o błąd, ale mniejsza liczbakombinacji nazw)instrukcja Select Case odpowiednik Switch zC#współpracuje z operatorami porównania: <,<=,>,>=,=,<>analogicznie typ wyliczeniowy Enum współpracuje z w/woperatorami i to nawet przy włączonej opcji Strictkompilatora

słowo kluczowe WithEvents wraz z Handles pozwala nadeklaratywny sposób określania obsługi zdarzeńdzięki RaiseEvent istnieje możliwość wyświetlenia listydostępnych zdarzeń i dodawania obsługi nowego bezopuszczania okna z kodem (doryczy równiez zmiennychzadeklarowanych z WithEvents)w zasiegu składni: With objectExpression ... End With– można wykonać szereg odwołań do określonego obiektu bezpodwania jego nazwy.

Tomasz Goluch Visual Basic .NET

Page 26: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Visual Basic .NET? vs C#

VB nie jest case-sensitive (trudniej o błąd, ale mniejsza liczbakombinacji nazw)instrukcja Select Case odpowiednik Switch zC#współpracuje z operatorami porównania: <,<=,>,>=,=,<>analogicznie typ wyliczeniowy Enum współpracuje z w/woperatorami i to nawet przy włączonej opcji Strictkompilatorasłowo kluczowe WithEvents wraz z Handles pozwala nadeklaratywny sposób określania obsługi zdarzeń

dzięki RaiseEvent istnieje możliwość wyświetlenia listydostępnych zdarzeń i dodawania obsługi nowego bezopuszczania okna z kodem (doryczy równiez zmiennychzadeklarowanych z WithEvents)w zasiegu składni: With objectExpression ... End With– można wykonać szereg odwołań do określonego obiektu bezpodwania jego nazwy.

Tomasz Goluch Visual Basic .NET

Page 27: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Visual Basic .NET? vs C#

VB nie jest case-sensitive (trudniej o błąd, ale mniejsza liczbakombinacji nazw)instrukcja Select Case odpowiednik Switch zC#współpracuje z operatorami porównania: <,<=,>,>=,=,<>analogicznie typ wyliczeniowy Enum współpracuje z w/woperatorami i to nawet przy włączonej opcji Strictkompilatorasłowo kluczowe WithEvents wraz z Handles pozwala nadeklaratywny sposób określania obsługi zdarzeńdzięki RaiseEvent istnieje możliwość wyświetlenia listydostępnych zdarzeń i dodawania obsługi nowego bezopuszczania okna z kodem (doryczy równiez zmiennychzadeklarowanych z WithEvents)

w zasiegu składni: With objectExpression ... End With– można wykonać szereg odwołań do określonego obiektu bezpodwania jego nazwy.

Tomasz Goluch Visual Basic .NET

Page 28: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Visual Basic .NET? vs C#

VB nie jest case-sensitive (trudniej o błąd, ale mniejsza liczbakombinacji nazw)instrukcja Select Case odpowiednik Switch zC#współpracuje z operatorami porównania: <,<=,>,>=,=,<>analogicznie typ wyliczeniowy Enum współpracuje z w/woperatorami i to nawet przy włączonej opcji Strictkompilatorasłowo kluczowe WithEvents wraz z Handles pozwala nadeklaratywny sposób określania obsługi zdarzeńdzięki RaiseEvent istnieje możliwość wyświetlenia listydostępnych zdarzeń i dodawania obsługi nowego bezopuszczania okna z kodem (doryczy równiez zmiennychzadeklarowanych z WithEvents)w zasiegu składni: With objectExpression ... End With– można wykonać szereg odwołań do określonego obiektu bezpodwania jego nazwy.

Tomasz Goluch Visual Basic .NET

Page 29: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Visual Basic .NET? vs C#

VB nie jest case-sensitive (trudniej o błąd, ale mniejsza liczbakombinacji nazw)instrukcja Select Case odpowiednik Switch zC#współpracuje z operatorami porównania: <,<=,>,>=,=,<>analogicznie typ wyliczeniowy Enum współpracuje z w/woperatorami i to nawet przy włączonej opcji Strictkompilatorasłowo kluczowe WithEvents wraz z Handles pozwala nadeklaratywny sposób określania obsługi zdarzeńdzięki RaiseEvent istnieje możliwość wyświetlenia listydostępnych zdarzeń i dodawania obsługi nowego bezopuszczania okna z kodem (doryczy równiez zmiennychzadeklarowanych z WithEvents)w zasiegu składni: With objectExpression ... End With– można wykonać szereg odwołań do określonego obiektu bezpodwania jego nazwy.

Tomasz Goluch Visual Basic .NET

Page 30: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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. automatycznedopisywanie kodu właściwości)funkcje których nie ma w C#: IsNumeric, PMT

Dim s As String = "3"If IsNumeric(s) ThenMessageBox.Show("numeric")

ElseMessageBox.Show("not numeric")

End If

w C#można skorzystać z w/w metod dodając referencję dobiblioteki Microsoft.VisualBasic.dll :)

Tomasz Goluch Visual Basic .NET

Page 31: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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. automatycznedopisywanie kodu właściwości)

funkcje których nie ma w C#: IsNumeric, PMT

Dim s As String = "3"If IsNumeric(s) ThenMessageBox.Show("numeric")

ElseMessageBox.Show("not numeric")

End If

w C#można skorzystać z w/w metod dodając referencję dobiblioteki Microsoft.VisualBasic.dll :)

Tomasz Goluch Visual Basic .NET

Page 32: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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. automatycznedopisywanie kodu właściwości)funkcje których nie ma w C#: IsNumeric, PMT

Dim s As String = "3"If IsNumeric(s) ThenMessageBox.Show("numeric")

ElseMessageBox.Show("not numeric")

End If

w C#można skorzystać z w/w metod dodając referencję dobiblioteki Microsoft.VisualBasic.dll :)

Tomasz Goluch Visual Basic .NET

Page 33: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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. automatycznedopisywanie kodu właściwości)funkcje których nie ma w C#: IsNumeric, PMT

Dim s As String = "3"If IsNumeric(s) ThenMessageBox.Show("numeric")

ElseMessageBox.Show("not numeric")

End If

w C#można skorzystać z w/w metod dodając referencję dobiblioteki Microsoft.VisualBasic.dll :)

Tomasz Goluch Visual Basic .NET

Page 34: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Visual Basic .NET? vs C#

przestrzeń nazw My zapewnia dostęp do informacji orazobiektów powiązanych z aplikacją i środowiskiemwykonawczym.

możliwość dynamicznej zmiany ”ostatniego” rozmiaru tablicyprzy pomocy słowa kluczowego ReDim Preserve.

brak wsparcia dla kodu niebezpiecznego – odpowiedniki słówkluczowych: unsafe i fixed

brak odpowiednika ++i, i++, w środowisku wielowątkowymnależ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 – cojeśli XML ewoluuje?)

deklaracja daty w linii: Dim data As Date = #12/31/2000#

moduły

Tomasz Goluch Visual Basic .NET

Page 35: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Visual Basic .NET? vs C#

przestrzeń nazw My zapewnia dostęp do informacji orazobiektów powiązanych z aplikacją i środowiskiemwykonawczym.

możliwość dynamicznej zmiany ”ostatniego” rozmiaru tablicyprzy pomocy słowa kluczowego ReDim Preserve.

brak wsparcia dla kodu niebezpiecznego – odpowiedniki słówkluczowych: unsafe i fixed

brak odpowiednika ++i, i++, w środowisku wielowątkowymnależ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 – cojeśli XML ewoluuje?)

deklaracja daty w linii: Dim data As Date = #12/31/2000#

moduły

Tomasz Goluch Visual Basic .NET

Page 36: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Visual Basic .NET? vs C#

przestrzeń nazw My zapewnia dostęp do informacji orazobiektów powiązanych z aplikacją i środowiskiemwykonawczym.

możliwość dynamicznej zmiany ”ostatniego” rozmiaru tablicyprzy pomocy słowa kluczowego ReDim Preserve.

brak wsparcia dla kodu niebezpiecznego – odpowiedniki słówkluczowych: unsafe i fixed

brak odpowiednika ++i, i++, w środowisku wielowątkowymnależ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 – cojeśli XML ewoluuje?)

deklaracja daty w linii: Dim data As Date = #12/31/2000#

moduły

Tomasz Goluch Visual Basic .NET

Page 37: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Visual Basic .NET? vs C#

przestrzeń nazw My zapewnia dostęp do informacji orazobiektów powiązanych z aplikacją i środowiskiemwykonawczym.

możliwość dynamicznej zmiany ”ostatniego” rozmiaru tablicyprzy pomocy słowa kluczowego ReDim Preserve.

brak wsparcia dla kodu niebezpiecznego – odpowiedniki słówkluczowych: unsafe i fixed

brak odpowiednika ++i, i++, w środowisku wielowątkowymnależ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 – cojeśli XML ewoluuje?)

deklaracja daty w linii: Dim data As Date = #12/31/2000#

moduły

Tomasz Goluch Visual Basic .NET

Page 38: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Visual Basic .NET? vs C#

przestrzeń nazw My zapewnia dostęp do informacji orazobiektów powiązanych z aplikacją i środowiskiemwykonawczym.

możliwość dynamicznej zmiany ”ostatniego” rozmiaru tablicyprzy pomocy słowa kluczowego ReDim Preserve.

brak wsparcia dla kodu niebezpiecznego – odpowiedniki słówkluczowych: unsafe i fixed

brak odpowiednika ++i, i++, w środowisku wielowątkowymnależ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 – cojeśli XML ewoluuje?)

deklaracja daty w linii: Dim data As Date = #12/31/2000#

moduły

Tomasz Goluch Visual Basic .NET

Page 39: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Visual Basic .NET? vs C#

przestrzeń nazw My zapewnia dostęp do informacji orazobiektów powiązanych z aplikacją i środowiskiemwykonawczym.

możliwość dynamicznej zmiany ”ostatniego” rozmiaru tablicyprzy pomocy słowa kluczowego ReDim Preserve.

brak wsparcia dla kodu niebezpiecznego – odpowiedniki słówkluczowych: unsafe i fixed

brak odpowiednika ++i, i++, w środowisku wielowątkowymnależ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 – cojeśli XML ewoluuje?)

deklaracja daty w linii: Dim data As Date = #12/31/2000#

moduły

Tomasz Goluch Visual Basic .NET

Page 40: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Visual Basic .NET? vs C#

przestrzeń nazw My zapewnia dostęp do informacji orazobiektów powiązanych z aplikacją i środowiskiemwykonawczym.

możliwość dynamicznej zmiany ”ostatniego” rozmiaru tablicyprzy pomocy słowa kluczowego ReDim Preserve.

brak wsparcia dla kodu niebezpiecznego – odpowiedniki słówkluczowych: unsafe i fixed

brak odpowiednika ++i, i++, w środowisku wielowątkowymnależ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 – cojeśli XML ewoluuje?)

deklaracja daty w linii: Dim data As Date = #12/31/2000#

moduły

Tomasz Goluch Visual Basic .NET

Page 41: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Podstawy

koniec linii = koniec instrukcji

znak oznacza kontynuację linii (musi być poprzedzonyprzynajmniej jednym białym znakiem), np.:

Sub Print( _x As Integer )

Instr1 : Instr2 - kilka instrukcji w jednym wierszu

’, REM - początek komentarza liniowego (brak komentarzablokowego)

Tomasz Goluch Visual Basic .NET

Page 42: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Podstawy

koniec linii = koniec instrukcji

znak oznacza kontynuację linii (musi być poprzedzonyprzynajmniej jednym białym znakiem), np.:

Sub Print( _x As Integer )

Instr1 : Instr2 - kilka instrukcji w jednym wierszu

’, REM - początek komentarza liniowego (brak komentarzablokowego)

Tomasz Goluch Visual Basic .NET

Page 43: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Podstawy

koniec linii = koniec instrukcji

znak oznacza kontynuację linii (musi być poprzedzonyprzynajmniej jednym białym znakiem), np.:

Sub Print( _x As Integer )

Instr1 : Instr2 - kilka instrukcji w jednym wierszu

’, REM - początek komentarza liniowego (brak komentarzablokowego)

Tomasz Goluch Visual Basic .NET

Page 44: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Podstawy

koniec linii = koniec instrukcji

znak oznacza kontynuację linii (musi być poprzedzonyprzynajmniej jednym białym znakiem), np.:

Sub Print( _x As Integer )

Instr1 : Instr2 - kilka instrukcji w jednym wierszu

’, REM - początek komentarza liniowego (brak komentarzablokowego)

Tomasz Goluch Visual Basic .NET

Page 45: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Deklaracja zmiennej

[ <atrybuty> ] [ dostęp ][[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]Dim [ WithEvents ] lista_zmiennych

Public – element dostępny w zakresie całego projektu (niemożna deklarować elementów publicznych w procedurach)Protected – element dostępny tylko wewnątrz klasy oraz wklasach 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 lubprzestrzeni nazw)Protected Friend – suma powyższych dwóchPrivate – element dostępny jedynie wewnątrz tego samegomodułu, klasy lub struktury (można używać tylko na poziomiemodułów)

1modułów, klas, strukturTomasz Goluch Visual Basic .NET

Page 46: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Deklaracja zmiennej

[ <atrybuty> ] [ dostęp ][[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]Dim [ WithEvents ] lista_zmiennych

Public – element dostępny w zakresie całego projektu (niemożna deklarować elementów publicznych w procedurach)Protected – element dostępny tylko wewnątrz klasy oraz wklasach 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 lubprzestrzeni nazw)

Protected Friend – suma powyższych dwóchPrivate – element dostępny jedynie wewnątrz tego samegomodułu, klasy lub struktury (można używać tylko na poziomiemodułów)

1modułów, klas, strukturTomasz Goluch Visual Basic .NET

Page 47: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Deklaracja zmiennej

[ <atrybuty> ] [ dostęp ][[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]Dim [ WithEvents ] lista_zmiennych

Public – element dostępny w zakresie całego projektu (niemożna deklarować elementów publicznych w procedurach)Protected – element dostępny tylko wewnątrz klasy oraz wklasach 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 lubprzestrzeni nazw)Protected Friend – suma powyższych dwóch

Private – element dostępny jedynie wewnątrz tego samegomodułu, klasy lub struktury (można używać tylko na poziomiemodułów)

1modułów, klas, strukturTomasz Goluch Visual Basic .NET

Page 48: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Deklaracja zmiennej

[ <atrybuty> ] [ dostęp ][[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]Dim [ WithEvents ] lista_zmiennych

Public – element dostępny w zakresie całego projektu (niemożna deklarować elementów publicznych w procedurach)Protected – element dostępny tylko wewnątrz klasy oraz wklasach 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 lubprzestrzeni nazw)Protected Friend – suma powyższych dwóchPrivate – element dostępny jedynie wewnątrz tego samegomodułu, klasy lub struktury (można używać tylko na poziomiemodułów)

1modułów, klas, strukturTomasz Goluch Visual Basic .NET

Page 49: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Deklaracja zmiennej

[ <atrybuty> ] [ dostęp ][[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]Dim [ WithEvents ] lista_zmiennych

Public – element dostępny w zakresie całego projektu (niemożna deklarować elementów publicznych w procedurach)Protected – element dostępny tylko wewnątrz klasy oraz wklasach 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 lubprzestrzeni nazw)Protected Friend – suma powyższych dwóchPrivate – element dostępny jedynie wewnątrz tego samegomodułu, klasy lub struktury (można używać tylko na poziomiemodułów)

1modułów, klas, strukturTomasz Goluch Visual Basic .NET

Page 50: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 nazwiew 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órymoże generować zdarzenia, które można przechwycić

Tomasz Goluch Visual Basic .NET

Page 51: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 nazwiew 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órymoże generować zdarzenia, które można przechwycić

Tomasz Goluch Visual Basic .NET

Page 52: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 nazwiew 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órymoże generować zdarzenia, które można przechwycić

Tomasz Goluch Visual Basic .NET

Page 53: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 nazwiew 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órymoże generować zdarzenia, które można przechwycić

Tomasz Goluch Visual Basic .NET

Page 54: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 nazwiew 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órymoże generować zdarzenia, które można przechwycić

Tomasz Goluch Visual Basic .NET

Page 55: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Tablice

Deklaracja tablicy: Dim a(), b(,), c(,,) As Integer

Dim c(15) As StringDim d(20,3) As Integer

Dim d(,) As Integerd = New Integer(20,3) {}

Tablicę c indeksujemy 0, . . . , 15.Pusta tablica (jeden z wymiarów -1): Dim tab(-1,5) As StringZmiana rozmiaru: ReDim c(25)Odwołanie d(5,1) = 3Inicjalizacja: Dim e = New Integer() {1, 2, 3, 4}

Tomasz Goluch Visual Basic .NET

Page 56: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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, lubWithEvents, 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

Page 57: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 58: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Const czy Readonly?

Readonly:

ustalenie wartości na poziomie wykonania (podczas deklaracjialbo poprzez konstruktor), może zostać wyliczona

bardziej elastyczna – dowolny typ

nie gwarantuje niemożności zmiany wartości (reflection, kodunsafe i wskaźniki)

Tomasz Goluch Visual Basic .NET

Page 59: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Const czy Readonly?

Readonly:

ustalenie wartości na poziomie wykonania (podczas deklaracjialbo poprzez konstruktor), może zostać wyliczona

bardziej elastyczna – dowolny typ

nie gwarantuje niemożności zmiany wartości (reflection, kodunsafe i wskaźniki)

Tomasz Goluch Visual Basic .NET

Page 60: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Const czy Readonly?

Readonly:

ustalenie wartości na poziomie wykonania (podczas deklaracjialbo poprzez konstruktor), może zostać wyliczona

bardziej elastyczna – dowolny typ

nie gwarantuje niemożności zmiany wartości (reflection, kodunsafe i wskaźniki)

Tomasz Goluch Visual Basic .NET

Page 61: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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łowychbibliotek)

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

Tomasz Goluch Visual Basic .NET

Page 62: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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łowychbibliotek)

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

Tomasz Goluch Visual Basic .NET

Page 63: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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łowychbibliotek)

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

Tomasz Goluch Visual Basic .NET

Page 64: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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łowychbibliotek)

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

Tomasz Goluch Visual Basic .NET

Page 65: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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łowychbibliotek)

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

Tomasz Goluch Visual Basic .NET

Page 66: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Deklaracja typu wyliczeniowego

[ <atrybuty> ] [ dostęp ] [ Shadows ]Enum nazwa [ As typ ]składowe

End Enum

dostęp: Public, Protected, ...

przy braku inicjalizacji wartość jest równa 0 dla pierwszejskł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

Page 67: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Deklaracja typu wyliczeniowego

[ <atrybuty> ] [ dostęp ] [ Shadows ]Enum nazwa [ As typ ]składowe

End Enum

dostęp: Public, Protected, ...

przy braku inicjalizacji wartość jest równa 0 dla pierwszejskł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

Page 68: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Deklaracja typu wyliczeniowego

[ <atrybuty> ] [ dostęp ] [ Shadows ]Enum nazwa [ As typ ]składowe

End Enum

dostęp: Public, Protected, ...

przy braku inicjalizacji wartość jest równa 0 dla pierwszejskł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

Page 69: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Wybrane typy danych

Typ Rozm. WartościByte 1 0..255SByte 1 −128..127Short 2 −32768..32767UShort 2 0..65535Integer 1 −2147483648..2147483647

−231..231 − 1UInteger 4 0..4294967295

0..232 − 1Long 8 −9223372036854775808..9223372036854775807

−263..263 − 1ULong 8 18446744073709551615

0..264 − 1BigInteger dyn. −∞..∞ (OutOfMemoryException)Complex dyn. zal. od użytego typu (każdy z pow.)

Tomasz Goluch Visual Basic .NET

Page 70: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Typ BigInteger

Dim b1 As BigInteger = 1, b2 As BigInteger = 1Dim i As Integer = 1While i Mod 1000 <> 0Dim n As BigInteger = b1 + b2b1 = b2b2 = ni += 1

End While

’wynik b2 = 70330367711422815821835254877183549770181269836358732742604905087154537118196933579742249494562611733487750449241765991088186363265450223647106012053374121273867339111198139373125598767690091902245245323403501

Tomasz Goluch Visual Basic .NET

Page 71: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Typ BigInteger

Dim b1 As BigInteger = 1, b2 As BigInteger = 1Dim i As Integer = 1While i Mod 1000 <> 0Dim n As BigInteger = b1 + b2b1 = b2b2 = ni += 1

End While

’wynik b2 = 70330367711422815821835254877183549770181269836358732742604905087154537118196933579742249494562611733487750449241765991088186363265450223647106012053374121273867339111198139373125598767690091902245245323403501

Tomasz Goluch Visual Basic .NET

Page 72: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Wybrane typy danych

Typ Rozmiar WartościSingle 4 ≈ −1.5 · 10−45..3.4 · 1038 (precyzja 7 cyfr)Double 8 ≈ −5.0 · 10−324..1.7 · 10308 (precyzja 15-16 cyfr)Decimal 16 ≈ ±1.0 · 10−28..±7.9 · 1028 (28-29 cyfr znacz.)Char 2 0..65535Boolean 1 True lub FalseObject 4 albo 8 wsk. każdy typ danychDate 8 Jan. 1, 0001 12:00:00 AM

Dec. 31, 9999 11:59:59 PMString 10+2·dł. 0..2147483647 znaków Unicode

Tomasz Goluch Visual Basic .NET

Page 73: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Typ Decimal

Dim f As Single = 0For i As Integer = 0 To 8f += 0.1F ’0.0(0011) - syst. bin.

Next

’wynik f = 0.9000001

Dim f As Decimal = 0For i As Integer = 0 To 8f += 0.1D

Next

’wynik f = 0.9

Tomasz Goluch Visual Basic .NET

Page 74: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Typ Decimal

Dim f As Single = 0For i As Integer = 0 To 8f += 0.1F ’0.0(0011) - syst. bin.

Next

’wynik f = 0.9000001

Dim f As Decimal = 0For i As Integer = 0 To 8f += 0.1D

Next

’wynik f = 0.9

Tomasz Goluch Visual Basic .NET

Page 75: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Typ Decimal

Dim f As Single = 0For i As Integer = 0 To 8f += 0.1F ’0.0(0011) - syst. bin.

Next

’wynik f = 0.9000001

Dim f As Decimal = 0For i As Integer = 0 To 8f += 0.1D

Next

’wynik f = 0.9

Tomasz Goluch Visual Basic .NET

Page 76: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Typ Decimal

Dim f As Single = 0For i As Integer = 0 To 8f += 0.1F ’0.0(0011) - syst. bin.

Next

’wynik f = 0.9000001

Dim f As Decimal = 0For i As Integer = 0 To 8f += 0.1D

Next

’wynik f = 0.9

Tomasz Goluch Visual Basic .NET

Page 77: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 78: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Typy CLS

Typ .Net Typ VB C# zakresSystem.Byte Byte byte 0..255System.SByte SByte sbyte -128..127System.Int16 Short short -32 768..32 767System.UInt16 UShort ushort 0..65 535System.Int32 Integer int -231..231 − 1System.UInt32 UInteger uint 0..232 − 1System.Int64 Long long -263..263 − 1System.UInt64 ULong ulong 0..264 − 1System.Single Single float 32 bitySystem.Double Double double 64 bitySystem.Decimal Decimal decimal 128 bitówSystem.Char Char char unicodeSystem.String String string 16· dł.System.Boolean Boolean bool True,FalseSystem.Object Object object 32 bity

Tomasz Goluch Visual Basic .NET

Page 79: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Funkcje konwersji typu

Funkcja Konwersja doCBool BooleanCByte ByteCChar CharCDate DateCDbl DoubleCDec DecimalCInt IntegerCLng Long

Funkcja Konwersja doCObj ObjectCSByte SByteCShort ShortCSgn SingleCStr StringCUInt UIntegerCULng ULongCUShort Ushort

Tomasz Goluch Visual Basic .NET

Page 80: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Funkcje konwersji typu

różną się od rzutowania możliwością konwersji literałów

sprawdzają przekroczenie zakresu – odpowiednik słowakluczowego checked z C#.

tak jak niejawna konwersja typów, nie gwarantują brakuutraty informacji:

Dim ui As UInteger = 3000000001Dim s1 As Single = ui ’3.0E+9Dim s2 As Single = CSng(ui) ’3.0E+9

Tomasz Goluch Visual Basic .NET

Page 81: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Funkcje konwersji typu

różną się od rzutowania możliwością konwersji literałów

sprawdzają przekroczenie zakresu – odpowiednik słowakluczowego checked z C#.

tak jak niejawna konwersja typów, nie gwarantują brakuutraty informacji:

Dim ui As UInteger = 3000000001Dim s1 As Single = ui ’3.0E+9Dim s2 As Single = CSng(ui) ’3.0E+9

Tomasz Goluch Visual Basic .NET

Page 82: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Funkcje konwersji typu

różną się od rzutowania możliwością konwersji literałów

sprawdzają przekroczenie zakresu – odpowiednik słowakluczowego checked z C#.

tak jak niejawna konwersja typów, nie gwarantują brakuutraty informacji:

Dim ui As UInteger = 3000000001Dim s1 As Single = ui ’3.0E+9Dim s2 As Single = CSng(ui) ’3.0E+9

Tomasz Goluch Visual Basic .NET

Page 83: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Wybrane instrukcje sterujące

If ... Then...End If

If ... Then...[ ElseIf ... Then... ]Else...End If

While ......End While

For i=0 To 10 Step 1For i As Double=2 To 0 Step -0.25...Next [i]

Select xCase 1...Case 2,3...Case Is < 20...Case Else...

End Select

Tomasz Goluch Visual Basic .NET

Page 84: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Wybrane operatory

If( [arg1,] arg2, arg3 ) – dla trzech argumentówwartość logiczna pierwszego określa, która wartość, jednego zdwóch kolejnych argumentów, zostanie zwrócona– odpowiednik operatora warunkowego: ? w C#.

If( div <> 0, num \ div, 0 ) – jeśli div=0 to drugiargument nie będzie oceniany zatem, nie wywoła wyjątku.

dla dwóch argumentów wartość pierwszego zostanie zwróconajeśli będzie różna od Nothing, w przeciwnym razie zostaniezwrócona wartość drugiego argumentu – odpowiednikoperatora: ?? (null coalescing) w C#

If( out, "" )

Tomasz Goluch Visual Basic .NET

Page 85: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Wybrane operatory

If( [arg1,] arg2, arg3 ) – dla trzech argumentówwartość logiczna pierwszego określa, która wartość, jednego zdwóch kolejnych argumentów, zostanie zwrócona– odpowiednik operatora warunkowego: ? w C#.

If( div <> 0, num \ div, 0 ) – jeśli div=0 to drugiargument nie będzie oceniany zatem, nie wywoła wyjątku.

dla dwóch argumentów wartość pierwszego zostanie zwróconajeśli będzie różna od Nothing, w przeciwnym razie zostaniezwrócona wartość drugiego argumentu – odpowiednikoperatora: ?? (null coalescing) w C#

If( out, "" )

Tomasz Goluch Visual Basic .NET

Page 86: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Wybrane operatory

If( [arg1,] arg2, arg3 ) – dla trzech argumentówwartość logiczna pierwszego określa, która wartość, jednego zdwóch kolejnych argumentów, zostanie zwrócona– odpowiednik operatora warunkowego: ? w C#.

If( div <> 0, num \ div, 0 ) – jeśli div=0 to drugiargument nie będzie oceniany zatem, nie wywoła wyjątku.

dla dwóch argumentów wartość pierwszego zostanie zwróconajeśli będzie różna od Nothing, w przeciwnym razie zostaniezwrócona wartość drugiego argumentu – odpowiednikoperatora: ?? (null coalescing) w C#

If( out, "" )

Tomasz Goluch Visual Basic .NET

Page 87: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Wybrane operatory

If( [arg1,] arg2, arg3 ) – dla trzech argumentówwartość logiczna pierwszego określa, która wartość, jednego zdwóch kolejnych argumentów, zostanie zwrócona– odpowiednik operatora warunkowego: ? w C#.

If( div <> 0, num \ div, 0 ) – jeśli div=0 to drugiargument nie będzie oceniany zatem, nie wywoła wyjątku.

dla dwóch argumentów wartość pierwszego zostanie zwróconajeśli będzie różna od Nothing, w przeciwnym razie zostaniezwrócona wartość drugiego argumentu – odpowiednikoperatora: ?? (null coalescing) w C#

If( out, "" )

Tomasz Goluch Visual Basic .NET

Page 88: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 89: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 90: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 91: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Operator Like

Dim a As String...If a Like "?*@?*.?*" Then...

Znak(i) 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ścieA-Z użyte w nawiasach pasuje do każdego znaku z zakresu A..Z

Tomasz Goluch Visual Basic .NET

Page 92: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 wróżnych plikach. Niezdefiniowane metody częściowe sącałkowicie ignorowane podczas kompilacji (znajdujezastosowanie podczas generowania kodu GUI przez VS)

metoda musi być procedurą (Sub), nie może być funkcją(Function)

ciało metody musi pozostać pustemodyfikator dostępu musi być prywatny (Private)

dostęp: Public, Protected, ...

Tomasz Goluch Visual Basic .NET

Page 93: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 wróżnych plikach. Niezdefiniowane metody częściowe sącałkowicie ignorowane podczas kompilacji (znajdujezastosowanie 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

Page 94: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 wróżnych plikach. Niezdefiniowane metody częściowe sącałkowicie ignorowane podczas kompilacji (znajdujezastosowanie podczas generowania kodu GUI przez VS)

metoda musi być procedurą (Sub), nie może być funkcją(Function)ciało metody musi pozostać pustemodyfikator dostępu musi być prywatny (Private)

dostęp: Public, Protected, ...

Tomasz Goluch Visual Basic .NET

Page 95: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 wróżnych plikach. Niezdefiniowane metody częściowe sącałkowicie ignorowane podczas kompilacji (znajdujezastosowanie podczas generowania kodu GUI przez VS)

metoda musi być procedurą (Sub), nie może być funkcją(Function)ciało metody musi pozostać pustemodyfikator dostępu musi być prywatny (Private)

dostęp: Public, Protected, ...Tomasz Goluch Visual Basic .NET

Page 96: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 wróżnych plikach. Niezdefiniowane metody częściowe sącałkowicie ignorowane podczas kompilacji (znajdujezastosowanie podczas generowania kodu GUI przez VS)

metoda musi być procedurą (Sub), nie może być funkcją(Function)ciało metody musi pozostać pustemodyfikator dostępu musi być prywatny (Private)

dostęp: Public, Protected, ...Tomasz Goluch Visual Basic .NET

Page 97: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 98: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 99: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 100: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 klasiepochodnej (sealed w C#)MustOverride – nie zaimplementowana i przed użyciem musizostać przesłonięta w klasie pochodnej (abstract w C#)

Tomasz Goluch Visual Basic .NET

Page 101: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 klasiepochodnej (sealed w C#)MustOverride – nie zaimplementowana i przed użyciem musizostać przesłonięta w klasie pochodnej (abstract w C#)

Tomasz Goluch Visual Basic .NET

Page 102: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 zkonkretną instancją (static w C#)Shadows – ponowna deklaracja i ukrcie metody w klasiebazowej bądź wszystkich przeciążonych metod w hierarchiidziedziczenia (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

Page 103: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 zkonkretną instancją (static w C#)Shadows – ponowna deklaracja i ukrcie metody w klasiebazowej bądź wszystkich przeciążonych metod w hierarchiidziedziczenia (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

Page 104: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 zkonkretną instancją (static w C#)Shadows – ponowna deklaracja i ukrcie metody w klasiebazowej bądź wszystkich przeciążonych metod w hierarchiidziedziczenia (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

Page 105: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 wC#, 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

Page 106: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 wC#, 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

Page 107: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 wC#, 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

Page 108: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 dozwracania elementów kolekcji (brak odpowiednika w C#)

Tomasz Goluch Visual Basic .NET

Page 109: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Deklaracja procedur i funkcji

Function myFunction(ByVal j As Integer) As DoubleReturn 3.87 * j

End Function

Function myFunction(ByVal j As Integer) As DoublemyFunction = 3.87 * jExit Function

End Function

Tomasz Goluch Visual Basic .NET

Page 110: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 111: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Przekazywanie parametrów

Przez wartość – procedura lub funkcjaotrzymuje kopię zmiennej.

Public Sub A(ByVal i As Integer)i += 1 ’ nie zmienia wart.

’ org. zmiennejEnd Sub

Przez referencję – proceduralub funkcja otrzymuje wskaźnikdo zmiennej.

Public Sub A(ByRef i As Integer)i += 1 ’ inkrementacja

’ org. zmiennejEnd Sub

Tomasz Goluch Visual Basic .NET

Page 112: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 (opcjonalnatablica elementów określonego typu)

nie można używać Optional i ParamArray jednocześnie

ByVal jest domyślnym mechanizmem; jeśli parametr jestreferencją, to procedura może modyfikować wskazywanyobiekt (choć nie może zmienić wartości samej referencji)

Tomasz Goluch Visual Basic .NET

Page 113: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 (opcjonalnatablica elementów określonego typu)

nie można używać Optional i ParamArray jednocześnie

ByVal jest domyślnym mechanizmem; jeśli parametr jestreferencją, to procedura może modyfikować wskazywanyobiekt (choć nie może zmienić wartości samej referencji)

Tomasz Goluch Visual Basic .NET

Page 114: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 (opcjonalnatablica elementów określonego typu)

nie można używać Optional i ParamArray jednocześnie

ByVal jest domyślnym mechanizmem; jeśli parametr jestreferencją, to procedura może modyfikować wskazywanyobiekt (choć nie może zmienić wartości samej referencji)

Tomasz Goluch Visual Basic .NET

Page 115: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 (opcjonalnatablica elementów określonego typu)

nie można używać Optional i ParamArray jednocześnie

ByVal jest domyślnym mechanizmem; jeśli parametr jestreferencją, to procedura może modyfikować wskazywanyobiekt (choć nie może zmienić wartości samej referencji)

Tomasz Goluch Visual Basic .NET

Page 116: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 (opcjonalnatablica elementów określonego typu)

nie można używać Optional i ParamArray jednocześnie

ByVal jest domyślnym mechanizmem; jeśli parametr jestreferencją, to procedura może modyfikować wskazywanyobiekt (choć nie może zmienić wartości samej referencji)

Tomasz Goluch Visual Basic .NET

Page 117: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

można definiować klasy zagnieżdżone

Tomasz Goluch Visual Basic .NET

Page 118: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

można definiować klasy zagnieżdżone

Tomasz Goluch Visual Basic .NET

Page 119: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

można definiować klasy zagnieżdżone

Tomasz Goluch Visual Basic .NET

Page 120: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Słowa kluczowe Async i Await

Async – umieszczane w deklaracjach metod, metodanonimowych oraz wyrażeń lambda. Informuje kompilator, żew metodzie będą wykorzystywane możliwości asynchroniczne(pozwala na użycie słowa kluczowego Await, inaczej będzieono traktowane jako zwykły identyfikator)

Await – powoduje uruchomienie oznaczonej nim metody wtrybie asynchronicznym wraz z obsługą powinowactwa dowątku

Tomasz Goluch Visual Basic .NET

Page 121: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Słowa kluczowe Async i Await

Async – umieszczane w deklaracjach metod, metodanonimowych oraz wyrażeń lambda. Informuje kompilator, żew metodzie będą wykorzystywane możliwości asynchroniczne(pozwala na użycie słowa kluczowego Await, inaczej będzieono traktowane jako zwykły identyfikator)

Await – powoduje uruchomienie oznaczonej nim metody wtrybie asynchronicznym wraz z obsługą powinowactwa dowątku

Tomasz Goluch Visual Basic .NET

Page 122: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 &= resultEnd 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

Page 123: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 getStringTaskReturn urlContents.Length

End Function

http://msdn.microsoft.com/en-us/library/hh191443.aspx

Tomasz Goluch Visual Basic .NET

Page 124: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Słowo kluczowe Global

Namespace SpecialSpaceNamespace SystemClass abcFunction getValue() As System.Int32Dim n As System.Int32Return n

End FunctionEnd Class

End NamespaceEnd Namespace

http://msdn.microsoft.com/en-us/library/zt9tafza.aspx

Tomasz Goluch Visual Basic .NET

Page 125: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Słowo kluczowe Global

Namespace SpecialSpaceNamespace SystemClass abcFunction getValue() As Global.System.Int32Dim n As Global.System.Int32Return n

End FunctionEnd Class

End NamespaceEnd Namespace

http://msdn.microsoft.com/en-us/library/zt9tafza.aspx

Tomasz Goluch Visual Basic .NET

Page 126: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Słowa kluczowe Iterator i Yield

Sub Main()For Each number As Integer In SomeNumbers()Console.Write(number & " ")

Next’ Output: 3 5 8Console.ReadKey()

End Sub

Private Iterator Function _SomeNumbers() As System.Collections.IEnumerableYield 3Yield 5Yield 8

End Function

Tomasz Goluch Visual Basic .NET

Page 127: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Częściowe klasy i procedury

pozwala umieścićfragmenty kodu klasyw różnych fragmentachpliku lub w różnychmodułach,

co najmniej jeden zfragmentów musi byćpoprzedzony słowemPartial, ale dlaprzejrzystości kodusugeruje się używać przykażdym fragmencie

przydatne, gdy kilka osóbpracuje nad różnymifragmentami jednej klasy.

Partial Public Class APublic x As IntegerEnd Class

... inny kod ...

Partial Public Class APublic y As DoubleEnd Class

Tomasz Goluch Visual Basic .NET

Page 128: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Częściowe klasy i procedury

pozwala umieścićfragmenty kodu klasyw różnych fragmentachpliku lub w różnychmodułach,

co najmniej jeden zfragmentów musi byćpoprzedzony słowemPartial, ale dlaprzejrzystości kodusugeruje się używać przykażdym fragmencie

przydatne, gdy kilka osóbpracuje nad różnymifragmentami jednej klasy.

Partial Public Class APublic x As IntegerEnd Class

... inny kod ...

Partial Public Class APublic y As DoubleEnd Class

Tomasz Goluch Visual Basic .NET

Page 129: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Częściowe klasy i procedury

pozwala umieścićfragmenty kodu klasyw różnych fragmentachpliku lub w różnychmodułach,

co najmniej jeden zfragmentów musi byćpoprzedzony słowemPartial, ale dlaprzejrzystości kodusugeruje się używać przykażdym fragmencie

przydatne, gdy kilka osóbpracuje nad różnymifragmentami jednej klasy.

Partial Public Class APublic x As IntegerEnd Class

... inny kod ...

Partial Public Class APublic y As DoubleEnd Class

Tomasz Goluch Visual Basic .NET

Page 130: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Częściowe klasy i procedury

częściowa procedurapozwala na oddzielenie jejdeklaracji odimplementacji

używamy wrazz częściową klasą:w jednej części klasyumieszczamy deklarację,natomiast w drugiejimplementację

Partial Class APrivate x As Integer’ deklaracja:Partial Private Sub powieksz()End Sub

End Class...Partial Class Product’ implementacja:Private Sub powieksz()x = x+1

End SubEnd Class

Tomasz Goluch Visual Basic .NET

Page 131: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Częściowe klasy i procedury

częściowa procedurapozwala na oddzielenie jejdeklaracji odimplementacji

używamy wrazz częściową klasą:w jednej części klasyumieszczamy deklarację,natomiast w drugiejimplementację

Partial Class APrivate x As Integer’ deklaracja:Partial Private Sub powieksz()End Sub

End Class...Partial Class Product’ implementacja:Private Sub powieksz()x = x+1

End SubEnd Class

Tomasz Goluch Visual Basic .NET

Page 132: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Dostępność

Public – klasa dostępna dla całego kodu, również pozamodułem

Protected – stosowane tylko w odniesieniu do klas; dostęptylko w obrębie klasy i klas pochodnych

Friend (domyślne) – klasa dostępna dla całego koduw module oraz poza modułem wewnątrz tego samegoprojektu. Różnice w stosunku do Public są przy tworzeniubibliotek.

Protected Friend – suma dwóch powyższych.

Private – klasa dostępna tylko wewnątrz modułu.

Tomasz Goluch Visual Basic .NET

Page 133: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Dostępność

Public – klasa dostępna dla całego kodu, również pozamodułem

Protected – stosowane tylko w odniesieniu do klas; dostęptylko w obrębie klasy i klas pochodnych

Friend (domyślne) – klasa dostępna dla całego koduw module oraz poza modułem wewnątrz tego samegoprojektu. Różnice w stosunku do Public są przy tworzeniubibliotek.

Protected Friend – suma dwóch powyższych.

Private – klasa dostępna tylko wewnątrz modułu.

Tomasz Goluch Visual Basic .NET

Page 134: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Dostępność

Public – klasa dostępna dla całego kodu, również pozamodułem

Protected – stosowane tylko w odniesieniu do klas; dostęptylko w obrębie klasy i klas pochodnych

Friend (domyślne) – klasa dostępna dla całego koduw module oraz poza modułem wewnątrz tego samegoprojektu. Różnice w stosunku do Public są przy tworzeniubibliotek.

Protected Friend – suma dwóch powyższych.

Private – klasa dostępna tylko wewnątrz modułu.

Tomasz Goluch Visual Basic .NET

Page 135: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Dostępność

Public – klasa dostępna dla całego kodu, również pozamodułem

Protected – stosowane tylko w odniesieniu do klas; dostęptylko w obrębie klasy i klas pochodnych

Friend (domyślne) – klasa dostępna dla całego koduw module oraz poza modułem wewnątrz tego samegoprojektu. Różnice w stosunku do Public są przy tworzeniubibliotek.

Protected Friend – suma dwóch powyższych.

Private – klasa dostępna tylko wewnątrz modułu.

Tomasz Goluch Visual Basic .NET

Page 136: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Dostępność

Public – klasa dostępna dla całego kodu, również pozamodułem

Protected – stosowane tylko w odniesieniu do klas; dostęptylko w obrębie klasy i klas pochodnych

Friend (domyślne) – klasa dostępna dla całego koduw module oraz poza modułem wewnątrz tego samegoprojektu. Różnice w stosunku do Public są przy tworzeniubibliotek.

Protected Friend – suma dwóch powyższych.

Private – klasa dostępna tylko wewnątrz modułu.

Tomasz Goluch Visual Basic .NET

Page 137: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Dziedziczenie

brak klas statycznych, można symulować ich zachowanie nadwa 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

Page 138: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Dziedziczenie

brak klas statycznych, można symulować ich zachowanie nadwa 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

Page 139: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Dziedziczenie

brak klas statycznych, można symulować ich zachowanie nadwa 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

Page 140: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Dziedziczenie

brak klas statycznych, można symulować ich zachowanie nadwa 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

Page 141: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Dziedziczenie

brak klas statycznych, można symulować ich zachowanie nadwa 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

Page 142: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Dziedziczenie

Public MustInherit Class FiguraPublic MustOverride Sub Pole()End Class

Public Class KwadratInherits FiguraPublic Overrides Sub Pole()...End SubEnd Class

Tomasz Goluch Visual Basic .NET

Page 143: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Dziedziczenie – przykład

Private MustInherit Class APublic x As IntegerPublic Sub f(ByVal x As Integer)Me.x = x

End SubEnd Class

Private Class BInherits APublic Overloads Sub f(ByVal x _

As Integer)Me.x = 2 * x

End SubEnd Class

Dim a As Aa = New Ba.f(5) ’ a.x = 5

Dim b As Bb = New Bb.f(5) ’ b.x = 10

Tomasz Goluch Visual Basic .NET

Page 144: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Dziedziczenie – przykład

Private MustInherit Class APublic x As IntegerPublic Overridable Sub f(ByVal x As Integer)Me.x = x

End SubEnd Class

Private Class BInherits APublic Overrides Sub f(ByVal x _

As Integer)Me.x = 2 * x

End SubEnd Class

Dim a As Aa = New Ba.f(5) ’ a.x = 10

Dim b As Bb = New Bb.f(5) ’ b.x = 10

Tomasz Goluch Visual Basic .NET

Page 145: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Dziedziczenie – przykład

Private MustInherit Class APublic x As IntegerPublic Sub New()x = 1

End SubEnd Class

Private Class BInherits APublic Shadows x As IntegerPublic Sub New()x = 2

End SubEnd Class

Dim a As ADim b As Ba = New Bb = New BConsole.WriteLine(a.x) ’1Console.WriteLine(b.x) ’2

Tomasz Goluch Visual Basic .NET

Page 146: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Tworzenie obiektu

deklaracja zmiennej dowolnej klasy to alokacja 4 bajtówpamięci i przypisanie jej domyślnej wartości Nothing

przy braku konstruktorów, przy tworzeniu obiektu używamysłowa New bez parametrów

konstruktor to procedura o nazwie New (zwykle kilkai z parametrami).

pierwsza linia konstruktora powinna być wywołaniemkonstruktora w klasie bazowej, co realizujemy poprzezMyBase.New(parametry)

powyższe można pominąć jeśli klasa bazowa posiadakonstruktor bez parametrów i wówczas zostanie on wywołanydomyślnie

Tomasz Goluch Visual Basic .NET

Page 147: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Tworzenie obiektu

deklaracja zmiennej dowolnej klasy to alokacja 4 bajtówpamięci i przypisanie jej domyślnej wartości Nothing

przy braku konstruktorów, przy tworzeniu obiektu używamysłowa New bez parametrów

konstruktor to procedura o nazwie New (zwykle kilkai z parametrami).

pierwsza linia konstruktora powinna być wywołaniemkonstruktora w klasie bazowej, co realizujemy poprzezMyBase.New(parametry)

powyższe można pominąć jeśli klasa bazowa posiadakonstruktor bez parametrów i wówczas zostanie on wywołanydomyślnie

Tomasz Goluch Visual Basic .NET

Page 148: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Tworzenie obiektu

deklaracja zmiennej dowolnej klasy to alokacja 4 bajtówpamięci i przypisanie jej domyślnej wartości Nothing

przy braku konstruktorów, przy tworzeniu obiektu używamysłowa New bez parametrów

konstruktor to procedura o nazwie New (zwykle kilkai z parametrami).

pierwsza linia konstruktora powinna być wywołaniemkonstruktora w klasie bazowej, co realizujemy poprzezMyBase.New(parametry)

powyższe można pominąć jeśli klasa bazowa posiadakonstruktor bez parametrów i wówczas zostanie on wywołanydomyślnie

Tomasz Goluch Visual Basic .NET

Page 149: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Tworzenie obiektu

deklaracja zmiennej dowolnej klasy to alokacja 4 bajtówpamięci i przypisanie jej domyślnej wartości Nothing

przy braku konstruktorów, przy tworzeniu obiektu używamysłowa New bez parametrów

konstruktor to procedura o nazwie New (zwykle kilkai z parametrami).

pierwsza linia konstruktora powinna być wywołaniemkonstruktora w klasie bazowej, co realizujemy poprzezMyBase.New(parametry)

powyższe można pominąć jeśli klasa bazowa posiadakonstruktor bez parametrów i wówczas zostanie on wywołanydomyślnie

Tomasz Goluch Visual Basic .NET

Page 150: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Tworzenie obiektu

deklaracja zmiennej dowolnej klasy to alokacja 4 bajtówpamięci i przypisanie jej domyślnej wartości Nothing

przy braku konstruktorów, przy tworzeniu obiektu używamysłowa New bez parametrów

konstruktor to procedura o nazwie New (zwykle kilkai z parametrami).

pierwsza linia konstruktora powinna być wywołaniemkonstruktora w klasie bazowej, co realizujemy poprzezMyBase.New(parametry)

powyższe można pominąć jeśli klasa bazowa posiadakonstruktor bez parametrów i wówczas zostanie on wywołanydomyślnie

Tomasz Goluch Visual Basic .NET

Page 151: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Konstruktory – przykład

Public Class OsobaPublic imie As StringPublic nazw As String

Public Sub New(ByVal i As String, ByVal n As String)imie = inazw = nEnd Sub

Public Sub New()Me.New("-", "-")End SubEnd Class

Tomasz Goluch Visual Basic .NET

Page 152: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Tworzenie obiektu – przykład

Public Class OsobaPublic imie As StringPublic nazw As String

Public Sub New(Optional ByVal i As String = "-", _Optional ByVal n As String = "=")

imie = inazw = nEnd SubEnd Class

Dim a As Osoba = New Osoba ’ -,=Dim b As Osoba = New Osoba("Jan") ’ Jan,=Dim b As Osoba = New Osoba("Jan", "K") ’ Jan,K

Tomasz Goluch Visual Basic .NET

Page 153: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Uwaga o składowych Private

Jeśli składowa klasy (np. zmienna) jest zadeklarowana jakoPrivate, to obiekt danej klasy ma również dostęp do tej składowejw innej instancji tej samej klasy.

Public Class PunktPrivate x As Double

Public Function Porownaj(ByVal inny_punkt As Punkt) _As BooleanIf x > inny_punkt.x Thenreturn TrueElsereturn FalseEnd IfEnd FunctionEnd Class

Tomasz Goluch Visual Basic .NET

Page 154: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Metoda Finalize

Garbage collector zwalnia pamięć przydzieloną obiektom, doktórych nie ma referencji w programie. Możemy zlecićwykonanie kodu tuż przed zwolnieniem pamięci przesłaniającmetodę Finalize zdefiniowaną w Object.

metoda Finalize nie musi być wywołana bezpośrednio potym, gdy przestaną istnieć w programie referencje do obiektu

w celu natychmiastowego zwalniania zasobów używamyDispose

Public Class A...Protected Overrides Sub Finalize()...End SubEnd Class

Tomasz Goluch Visual Basic .NET

Page 155: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Metoda Finalize

Garbage collector zwalnia pamięć przydzieloną obiektom, doktórych nie ma referencji w programie. Możemy zlecićwykonanie kodu tuż przed zwolnieniem pamięci przesłaniającmetodę Finalize zdefiniowaną w Object.

metoda Finalize nie musi być wywołana bezpośrednio potym, gdy przestaną istnieć w programie referencje do obiektu

w celu natychmiastowego zwalniania zasobów używamyDispose

Public Class A...Protected Overrides Sub Finalize()...End SubEnd Class

Tomasz Goluch Visual Basic .NET

Page 156: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Metoda Finalize

Garbage collector zwalnia pamięć przydzieloną obiektom, doktórych nie ma referencji w programie. Możemy zlecićwykonanie kodu tuż przed zwolnieniem pamięci przesłaniającmetodę Finalize zdefiniowaną w Object.

metoda Finalize nie musi być wywołana bezpośrednio potym, gdy przestaną istnieć w programie referencje do obiektu

w celu natychmiastowego zwalniania zasobów używamyDispose

Public Class A...Protected Overrides Sub Finalize()...End SubEnd Class

Tomasz Goluch Visual Basic .NET

Page 157: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 czymSub/Function używamy słowa kluczowego Operator,a nazwą metody jest przeciążany operator

Tomasz Goluch Visual Basic .NET

Page 158: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 czymSub/Function używamy słowa kluczowego Operator,a nazwą metody jest przeciążany operator

Tomasz Goluch Visual Basic .NET

Page 159: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 czymSub/Function używamy słowa kluczowego Operator,a nazwą metody jest przeciążany operator

Tomasz Goluch Visual Basic .NET

Page 160: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 czymSub/Function używamy słowa kluczowego Operator,a nazwą metody jest przeciążany operator

Tomasz Goluch Visual Basic .NET

Page 161: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Przeciążanie operatorów

Class PunktPrivate x, y As DoublePublic Sub New(ByVal x As Double, ByVal y As Double)Me.x = xMe.y = y

End Sub

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 OperatorEnd Class

Tomasz Goluch Visual Basic .NET

Page 162: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Przeciążanie operatorów – przykład

Private Class APublic x As IntegerPublic Sub New()x = 1

End Sub

Public Shared Widening Operator CType(ByVal x As Integer) As ADim r As A = New Ar.x = xReturn r

End OperatorEnd Class...Dim a As A = New Aa = 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

Page 163: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Przeciążanie operatorów – przykład

Private Class APublic x As IntegerPublic Sub New()x = 1

End Sub

Public Shared Widening Operator CType(ByVal x As Integer) As ADim r As A = New Ar.x = xReturn r

End OperatorEnd Class...Dim a As A = New Aa = 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

Page 164: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Przeciążanie operatorów – przykład

Private Class APublic x As IntegerPublic Sub New()x = 1

End Sub

Public Shared Widening Operator CType(ByVal x As Integer) As ADim r As A = New Ar.x = xReturn r

End OperatorEnd Class...Dim a As A = New Aa = 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

Page 165: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Definicja modułu

[ <atrybuty> ] [ dostęp ] Module nazwa[ zawartość ]

End Module

typ referencyjny, może być zdefiniowany jedynie wewnątrzpliku 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

Page 166: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Definicja modułu

[ <atrybuty> ] [ dostęp ] Module nazwa[ zawartość ]

End Module

typ referencyjny, może być zdefiniowany jedynie wewnątrzpliku 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

Page 167: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Definicja modułu

[ <atrybuty> ] [ dostęp ] Module nazwa[ zawartość ]

End Module

typ referencyjny, może być zdefiniowany jedynie wewnątrzpliku 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

Page 168: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Definicja modułu

[ <atrybuty> ] [ dostęp ] Module nazwa[ zawartość ]

End Module

typ referencyjny, może być zdefiniowany jedynie wewnątrzpliku 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

Page 169: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Definicja modułu

[ <atrybuty> ] [ dostęp ] Module nazwa[ zawartość ]

End Module

typ referencyjny, może być zdefiniowany jedynie wewnątrzpliku 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

Page 170: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Definicja modułu

[ <atrybuty> ] [ dostęp ] Module nazwa[ zawartość ]

End Module

składowe modułu widoczne są bezpośrednio w przestrzeninazw w którym jest on zdefiniowany (promocja typu)

nie można dziedziczyć, implementować oraz tworzyć obiektówmoduł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

Page 171: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Definicja modułu

[ <atrybuty> ] [ dostęp ] Module nazwa[ zawartość ]

End Module

składowe modułu widoczne są bezpośrednio w przestrzeninazw w którym jest on zdefiniowany (promocja typu)

nie można dziedziczyć, implementować oraz tworzyć obiektówmoduł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

Page 172: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Definicja modułu

[ <atrybuty> ] [ dostęp ] Module nazwa[ zawartość ]

End Module

składowe modułu widoczne są bezpośrednio w przestrzeninazw w którym jest on zdefiniowany (promocja typu)

nie można dziedziczyć, implementować oraz tworzyć obiektówmoduł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

Page 173: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Definicja modułu

[ <atrybuty> ] [ dostęp ] Module nazwa[ zawartość ]

End Module

składowe modułu widoczne są bezpośrednio w przestrzeninazw w którym jest on zdefiniowany (promocja typu)

nie można dziedziczyć, implementować oraz tworzyć obiektówmoduł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

Page 174: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Moduły – przykład

Public Module thisModuleSub 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

Page 175: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Delegaty

Public Shared Function GetIndexOfFirstNonEmptyBin _(ByVal bins As Integer()) As IntegerDim num As Integer = Array.FindIndex( _bins, AddressOf IsGreaterThanZero)Return num

End Function

Private Shared Function IsGreaterThanZero _(ByVal value As Integer) As BooleanReturn value > 0

End Function

operator AddressOf zwraca adres procedury/funkcji

Tomasz Goluch Visual Basic .NET

Page 176: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 jestniejawna konwersja parametrów metody do parametrów delegata

Tomasz Goluch Visual Basic .NET

Page 177: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 jestniejawna konwersja parametrów metody do parametrów delegata

Tomasz Goluch Visual Basic .NET

Page 178: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 jestniejawna konwersja parametrów metody do parametrów delegata

Tomasz Goluch Visual Basic .NET

Page 179: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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żepasować 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

Page 180: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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żepasować 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

Page 181: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Tworzenie delegatów

Public Class ThresholdComparer

Public Property Threshold As Integer

Public Function IsGreaterThan(ByVal value As Integer) _As BooleanReturn value > Threshold

End Function

Public Function GetIsGreaterThanPredicate() _As Predicate(Of Integer)Return New Predicate(Of Integer) _

(AddressOf IsGreaterThan)

End FunctionEnd Class

Tomasz Goluch Visual Basic .NET

Page 182: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 183: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Tworzenie delegatów

Jeśli nie wiadomo jaka metoda bądź obiekt zostaną użyte w trakciewykonywania programu możemy – w celu utworzenia delegata –posłużyć się metodą statyczną CreateDelegate klasy Delegate.

Tomasz Goluch Visual Basic .NET

Page 184: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 185: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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: +, +=, -, -= dladelegatów

Tomasz Goluch Visual Basic .NET

Page 186: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Wywoływanie delegatów

Dim trueCount As Integer = 0, falseCount As Integer = 0For Each p As Predicate(Of Integer) In _multicastDelegate.GetInvocationList()If (p(42) = True) ThenfalseCount = falseCount + 1

ElsetrueCount = trueCount + 1

End IfNext

zmienne trueCount i falseCount przyjmą wartość 2

metoda na którą wskazuje delegat greaterThanHundredzostanie wywołana dwa razy

Tomasz Goluch Visual Basic .NET

Page 187: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Wywoływanie delegatów

Dim trueCount As Integer = 0, falseCount As Integer = 0For Each p As Predicate(Of Integer) In _multicastDelegate.GetInvocationList()If (p(42) = True) ThenfalseCount = falseCount + 1

ElsetrueCount = trueCount + 1

End IfNext

zmienne trueCount i falseCount przyjmą wartość 2

metoda na którą wskazuje delegat greaterThanHundredzostanie wywołana dwa razy

Tomasz Goluch Visual Basic .NET

Page 188: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Predefiniowane delegaty

.NET definiuje sporą liczbę specjalizowanych delegatów np.Predicate(Of Integer)

Jeśli istnieje niejawna konwersja referencji pomiędzy typami Ai B to istnieje również niejawna konwersja pomiędzy typamiPredicate(Of A) i Predicate(Of B)

Tomasz Goluch Visual Basic .NET

Page 189: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Predefiniowane delegaty

.NET definiuje sporą liczbę specjalizowanych delegatów np.Predicate(Of Integer)

Jeśli istnieje niejawna konwersja referencji pomiędzy typami Ai B to istnieje również niejawna konwersja pomiędzy typamiPredicate(Of A) i Predicate(Of B)

Tomasz Goluch Visual Basic .NET

Page 190: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 191: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 192: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Właściwości

Private Class BPrivate x As Integer

Public Property x_pr()GetReturn x

End GetSet(ByVal value)x = value

End SetEnd Property

End Class

Dim b As B = New Bb.x_pr = 100If b.x_pr = 100 Then...

Tomasz Goluch Visual Basic .NET

Page 193: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 194: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 kodbloku try wykona się bezbłędnie lub gdy zakończy się obsługabłędu w bloku Catch

wyjątki od powyższego, to napotkanie wyrażenia End lubpojawił się wyjątek StackOverflowException w bloku Trylub Catch

Tomasz Goluch Visual Basic .NET

Page 195: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 kodbloku try wykona się bezbłędnie lub gdy zakończy się obsługabłędu w bloku Catch

wyjątki od powyższego, to napotkanie wyrażenia End lubpojawił się wyjątek StackOverflowException w bloku Trylub Catch

Tomasz Goluch Visual Basic .NET

Page 196: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 kodbloku try wykona się bezbłędnie lub gdy zakończy się obsługabłędu w bloku Catch

wyjątki od powyższego, to napotkanie wyrażenia End lubpojawił się wyjątek StackOverflowException w bloku Trylub Catch

Tomasz Goluch Visual Basic .NET

Page 197: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 IFiguraFunction pole() As DoubleProperty X() As DoubleProperty Y() As DoubleEnd Interface

Tomasz Goluch Visual Basic .NET

Page 198: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 IFiguraFunction pole() As DoubleProperty X() As DoubleProperty Y() As DoubleEnd Interface

Tomasz Goluch Visual Basic .NET

Page 199: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Interfejsy

Public Class KwadratImplements IFigura

Public Function pole() As Double _Implements IFigura.pole

End Function

Property X() As Double Implements IFigura.XGetEnd GetSet(ByVal a As Double)End SetEnd Property

...End Class

Tomasz Goluch Visual Basic .NET

Page 200: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 jestreferencją (4 bajty).

przypisanie w przypadku struktury kopiuje całą jej zawartość;w przypadku obiektów - przypisanie powoduje, że obiezmienne wskazują ten sam obiekt.

Tomasz Goluch Visual Basic .NET

Page 201: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 jestreferencją (4 bajty).

przypisanie w przypadku struktury kopiuje całą jej zawartość;w przypadku obiektów - przypisanie powoduje, że obiezmienne wskazują ten sam obiekt.

Tomasz Goluch Visual Basic .NET

Page 202: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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 jestreferencją (4 bajty).

przypisanie w przypadku struktury kopiuje całą jej zawartość;w przypadku obiektów - przypisanie powoduje, że obiezmienne wskazują ten sam obiekt.

Tomasz Goluch Visual Basic .NET

Page 203: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 204: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Przestrzenie nazw (Namespaces)

przestrzenie nazw pozwalają rozwiązywać problemy związanez jednakowymi nazwami, np. klas.

przestrzenie nazw mogą tworzyć hierarchiczną strukturę

nie są typami, służą do organizacji kodu

Dim a As Siec.PolaczenieDim b As Zasoby.Polaczenie

Tomasz Goluch Visual Basic .NET

Page 205: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Przestrzenie nazw (Namespaces)

przestrzenie nazw pozwalają rozwiązywać problemy związanez jednakowymi nazwami, np. klas.

przestrzenie nazw mogą tworzyć hierarchiczną strukturę

nie są typami, służą do organizacji kodu

Dim a As Siec.PolaczenieDim b As Zasoby.Polaczenie

Tomasz Goluch Visual Basic .NET

Page 206: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Przestrzenie nazw (Namespaces)

przestrzenie nazw pozwalają rozwiązywać problemy związanez jednakowymi nazwami, np. klas.

przestrzenie nazw mogą tworzyć hierarchiczną strukturę

nie są typami, służą do organizacji kodu

Dim a As Siec.PolaczenieDim b As Zasoby.Polaczenie

Tomasz Goluch Visual Basic .NET

Page 207: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Namespaces – Imports

wyrażenia typu System.Drawing.Rectangle nie są wygodnei utrudniają czytanie kodu.

umieszczamy na początku pliku Imports System.Drawingi wówczas w kodzie wcześniejsze wyrażenie zastępujemyRectangle

plik może zawierać (zawsze podane na początku) dowolnąliczbę instrukcji Imports

jeśli chcemy importować różne moduły dla różnychfragmentów kodu, to trzeba kod podzielić pomiędzy kilkaplików.

Tomasz Goluch Visual Basic .NET

Page 208: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Namespaces – Imports

wyrażenia typu System.Drawing.Rectangle nie są wygodnei utrudniają czytanie kodu.

umieszczamy na początku pliku Imports System.Drawingi wówczas w kodzie wcześniejsze wyrażenie zastępujemyRectangle

plik może zawierać (zawsze podane na początku) dowolnąliczbę instrukcji Imports

jeśli chcemy importować różne moduły dla różnychfragmentów kodu, to trzeba kod podzielić pomiędzy kilkaplików.

Tomasz Goluch Visual Basic .NET

Page 209: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Namespaces – Imports

wyrażenia typu System.Drawing.Rectangle nie są wygodnei utrudniają czytanie kodu.

umieszczamy na początku pliku Imports System.Drawingi wówczas w kodzie wcześniejsze wyrażenie zastępujemyRectangle

plik może zawierać (zawsze podane na początku) dowolnąliczbę instrukcji Imports

jeśli chcemy importować różne moduły dla różnychfragmentów kodu, to trzeba kod podzielić pomiędzy kilkaplików.

Tomasz Goluch Visual Basic .NET

Page 210: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Namespaces – Imports

wyrażenia typu System.Drawing.Rectangle nie są wygodnei utrudniają czytanie kodu.

umieszczamy na początku pliku Imports System.Drawingi wówczas w kodzie wcześniejsze wyrażenie zastępujemyRectangle

plik może zawierać (zawsze podane na początku) dowolnąliczbę instrukcji Imports

jeśli chcemy importować różne moduły dla różnychfragmentów kodu, to trzeba kod podzielić pomiędzy kilkaplików.

Tomasz Goluch Visual Basic .NET

Page 211: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 212: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 213: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Namespaces – importowanie elementu

Oprócz importowania przestrzeni nazw można importować jejelement.

Imports AliasDoListBox = ListBoxProject.Form1.ListBox...Dim x As AliasDoListBox

Tomasz Goluch Visual Basic .NET

Page 214: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Namespaces – definiowanie własnych

Każdy projekt posiada swoją przestrzeń nazw – każdy elementw nim zdefiniowany do niej należy (bezpośrednio lubpośrednio).

Można definiować własną przestrzeń nazw (wewnątrzprzestrzeni nazw projektu):

Namespace StrukturyDanychPublic Class Lista...End ClassEnd Namespace

Tomasz Goluch Visual Basic .NET

Page 215: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Namespaces – definiowanie własnych

Każdy projekt posiada swoją przestrzeń nazw – każdy elementw nim zdefiniowany do niej należy (bezpośrednio lubpośrednio).

Można definiować własną przestrzeń nazw (wewnątrzprzestrzeni nazw projektu):

Namespace StrukturyDanychPublic Class Lista...End ClassEnd Namespace

Tomasz Goluch Visual Basic .NET

Page 216: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Namespaces – definiowanie własnych

Do powyżej zdefiniowanej klasy Lista kod wewnątrzprzestrzeni 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

Page 217: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Namespaces – definiowanie własnych

Do powyżej zdefiniowanej klasy Lista kod wewnątrzprzestrzeni 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

Page 218: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Namespaces – definiowanie własnych

wewnątrz przestrzeni nazw można definiować inne przestrzenienazw, klasy, struktury, moduły, typy wyliczeniowe, interfejsy.

wewnątrz przestrzeni nazw nie można definiować bezpośredniozmiennych, 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

Page 219: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Namespaces – definiowanie własnych

wewnątrz przestrzeni nazw można definiować inne przestrzenienazw, klasy, struktury, moduły, typy wyliczeniowe, interfejsy.

wewnątrz przestrzeni nazw nie można definiować bezpośredniozmiennych, 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

Page 220: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Namespaces – definiowanie własnych

wewnątrz przestrzeni nazw można definiować inne przestrzenienazw, klasy, struktury, moduły, typy wyliczeniowe, interfejsy.

wewnątrz przestrzeni nazw nie można definiować bezpośredniozmiennych, 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

Page 221: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Namespaces – definiowanie własnych

wewnątrz przestrzeni nazw można definiować inne przestrzenienazw, klasy, struktury, moduły, typy wyliczeniowe, interfejsy.

wewnątrz przestrzeni nazw nie można definiować bezpośredniozmiennych, 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

Page 222: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Namespaces – definiowanie własnych

wewnątrz przestrzeni nazw można definiować inne przestrzenienazw, klasy, struktury, moduły, typy wyliczeniowe, interfejsy.

wewnątrz przestrzeni nazw nie można definiować bezpośredniozmiennych, 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

Page 223: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Namespaces – definiowanie własnych

wewnątrz przestrzeni nazw można definiować inne przestrzenienazw, klasy, struktury, moduły, typy wyliczeniowe, interfejsy.

wewnątrz przestrzeni nazw nie można definiować bezpośredniozmiennych, 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

Page 224: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Odzwierciedlanie

Reflection wykorzystuje głównie klasy znajdujące się wprzestrzeni nazw System.Reflection

wyjątkiem jest klasa System.Type, która reprezentuje typ wmodule zarządzanego koduMożliwości

analiza zewnętrznego kodu podczas działania programu‘late binding’

Tomasz Goluch Visual Basic .NET

Page 225: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Klasa Assembly

Klasa reprezentuje pojedynczy moduł (.NET assembly). Przykładuzyskania referencji do takiego obiektu:

’pobranie referencji do bieżącego modułuDim a As Assembly = Assembly.GetExecutingAssembly()’pobranie ref. do modułu zawierającego określony typa = Assembly.GetAssembly( GetType( DateTime ) )’pobranie z określonej lokalizacjia = Assembly.LoadFrom( "..." )’pobranie tylko do celów ‘inspekcji‘a = Assembly.ReflectionOnlyLoadFrom( "..." )

Tomasz Goluch Visual Basic .NET

Page 226: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Wykorzystanie obiektu Assembly

uzyskanie kolekcji typów zdefiniowanych w module

For Each t As Type in a.GetTypes()Console.WriteLine( t.FullName() )

Next

pobranie typu na podstawie jego nazwyDim t As Type = a.GetType( "..." )

szczegółowe informacje o module

Dim an As AssemblyName = a.GetName()an.ProcessorArchitecture()an.VersionMajor()an.VersionMinor()

Tomasz Goluch Visual Basic .NET

Page 227: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Klasa Type – tworzenie obiektu

’na podstawie nazwy klasy:Dim t As Type = GetType( String )’na podstawie obiektu:Dim i As Integert = i.GetType() ’System.Int32’na podstawie nazwy klasy (string)t = GetType( "System.DateTime" )

Jeśli funkcja GetType nie może odnaleźć wskazanego typu, touruchamiane jest zdarzenie TypeResolve w klasie AppDomain.Pozwala to m.in. obsłużyć sytuacje wyjątkowe lub zmienićstandardowy sposób nazywania typów.

Tomasz Goluch Visual Basic .NET

Page 228: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Wybrane metody klasy Type

If t.IsClass Then...

ElseIf t.IsInterface Then...

ElseIf t.IsEnum Then...

ElseIf t.IsValueType Then... ’Enum to również ValueType,’więc niezbędna taka kolejność

Else... ’sterowanie nigdy nie dotrze tutaj

EndIf

Tomasz Goluch Visual Basic .NET

Page 229: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Wybrane metody klasy Type

If t.IsPublic ThenElseIf t.IsNotPublic ThenEndIf

If t.IsAbstract ThenEndIf

If t.IsSealed ThenEndIf

t.BaseType.FullName()If t.IsInstanceOfType( obj ) ThenEndIf

If obj.GetType().IsSubclassOf( GetType( MojaKlasa ) ) ThenEndIf

Tomasz Goluch Visual Basic .NET

Page 230: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Przetwarzanie elementów klasy

Następujący kod

Dim info() As MemberInfo = t.GetMembers()For Each i As MemberInfo in info...

Next

przetwarza elementy wchodzące w skład klasy: pole, ’property’,metoda, konstruktor, ’event’, zagnieżdżona klasa. Można teżprzetwarzać składowe wybranego typu (t.GetFields,GetProperties, GetMethods, GetEvents, GetConstuctors,GetInterfaces, GetNestedTypes, GetDefaultMembers)

Tomasz Goluch Visual Basic .NET

Page 231: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Uzyskiwanie referencji do wybranej metody

Dim mi As MethodInfo = t.GetMethod( "NazwaMetody" )

’jeśli metoda jest przeciążona, to trzeba wyspecyfikować’dokładną listę parametrów:Dim args() As Type = { GetType( Integer ),

GetType( Double ) }mi = GetMethod( "InnaNazwa", args )

’gdy parametry, to typy referencyjne lub tablica:GetType( Double ).MakeRefType()GetType( Integer ).MakeArrayType( 4 )

Tomasz Goluch Visual Basic .NET

Page 232: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Dynamiczne tworzenie obiektu

’zwykle referencja jest typu Object (nie znamy typu na’etapie kompilacji)Dim o As Object = Activator.CreateInstance( t )

’konstr. z parametrami: przekazujemy je jako tablicę:Dim args() As Object = { 1, "Hello" }o = Activator.CreateInstance( t, args )

’uzyskanie dostępu do pola:Dim f As FieldInfo = t.GetField( "NazwaPola" )f.GetValue( o ) ’lub f.SetValue( o, wartość )

’wywołanie metody:Dim m As MethodInfo = t.GetMethod( "NazwaMetody" )Dim args() As Object = { 4, "Hello" }m.Invoke( o, args )

Tomasz Goluch Visual Basic .NET

Page 233: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Bezpieczeństwo – ogólne koncepcje

sandboxingzbiór praw jest określany poprzez evidence

prawa (permissions)

egzekwowanie praw (enforcements)

Tomasz Goluch Visual Basic .NET

Page 234: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Bezpieczeństwo w .NET Framework 4.5

Wyróżniamy dwa rodzaje kodu:

critical code – kod, który może wykonywać uprzywilejowaneakcje,

transparent code – nie może powyższych, w szczególnościwykonuje czynności w ramach praw, które posiada i nie możewykonywać, dziedziczyć czy zawierać kodu krytycznego.(Możliwość debugowania z ograniczonymi prawami.)

Tomasz Goluch Visual Basic .NET

Page 235: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Bezpieczeństwo w .NET Framework 4.5

Mechanizm zabezpieczeń stosowany na platformie .NETopiera się na modelu bezpieczeństwa opartym na rolach – RBS(role based security) oraz na uprawnieniach kodu – CAS (codeaccess security)

Mechanizm RBS bazuje na uprawnieniach użytkownikaokreślonych na poziomie systemu operacyjnego, wynikającychz jego uprawnień indywidualnych oraz z przynależności dogrupySprawdzenie tożsamości użytkownika i zweryfikowanie jegouprawnień do korzystania z kodu realizuje się na dwa sposoby:

deklaratywny (declarative security), za pomocą atrybutówzabezpieczeń dodanych do klas i metodprogramowy (imperative security), polegający na dynamicznymtworzeniu zestawu uprawnień, które są następnie sprawdzane wtrakcie wykonywania kodu

Tomasz Goluch Visual Basic .NET

Page 236: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Bezpieczeństwo w .NET Framework 4.5

Brak wystarczających uprawnień do wykonania kodu powodujezgłoszenie wyjątku powoduje zgłoszenie wyjątkuSecurityException

Metoda deklaratywna jest prostą, statyczną metodąumożliwiającą określenie niezbędnych uprawnień dla całejklasy lub metody dla użytkowników/grup użytkowników,których role są powszechnie znane

W celu kontrolowania uprawnień na poziomie konkretnychfragmentów kodu lub wtedy, gdy chcemy uwzględnićdodatkowe warunki, to należy zastąpić podejście deklaratywnepodejściem programowym

Tomasz Goluch Visual Basic .NET

Page 237: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

CAS (Code Access Security)

Mechanizm CAS pozwala na kontrolowanie sposobu działaniaaplikacji niezależnie od uprawnień użytkownika (np. pozwalasprawdzić, czy aplikacja ma wystarczające prawa dokorzystania z zasobów albo weryfikować, czy nie posiada onawiększych uprawnień niż są jej konieczne)

definiuje prawa i zbiory praw, które reprezentują możliwościdostępu do zasobów systemowych

umożliwia wykonywanie kodu z wybranym poziomem‘bezpieczeństwa’

sprawdza czy kod nadrzędny (wywołujący) posiada prawapozwalające wykonać zadaną akcję

Tomasz Goluch Visual Basic .NET

Page 238: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

CAS (Code Access Security)

CLR pozwala na dostęp do zasobów systemowych (np. plików,rejestru systemowego, dziennika zdarzeń, gniazd sieciowych) iwykonanie na nich żądanych operacji tylko wtedy, gdy maodpowiednie do tego uprawnienia

Przed uzyskaniem przez podzespół dostępu do zasobów CLRw trakcie uruchamiania podzespołu kolekcjonuje i sprawdzadowody (evidence), aby określić, jakie uprawnienia(permission) do wykonania kodu można mu nadać

Tomasz Goluch Visual Basic .NET

Page 239: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

CAS (Code Access Security)

Począwszy od wersji .NET Framework 4.0 CAS nie korzystajuż z zasad polityki bezpieczeństwa (security policy), ponieważzapewniały one tylko kontrolę kodu zarządzanego, pomijająccałkowicie aplikacje niezarządzane (natywne)

Prawa dostępu określane są na podstawie uprawnień i takzwanej przejrzystości (transparency), która określa, jakifragment kodu może wykonywać krytyczne ze względówbezpieczeństwa operacje, a jaki nie

Zadaniem modelu przejrzystości jest zapewnienie prostego iefektywnego mechanizmu, który będzie izolować od siebieróżne grupy kodów

Podobnie jak w przypadku RBS dostęp do zasobów możnaweryfikować w sposób deklaratywny lub programowy

Tomasz Goluch Visual Basic .NET

Page 240: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Sanboxing – zastosowania

Uruchamiamy kod z ograniczonymi prawami, gdy:

nie mamy zaufania, np. kod pobierany z sieci

testujemy własny moduł, który bedzie uruchamiany zograniczonymi prawami na maszynie klienta

Tomasz Goluch Visual Basic .NET

Page 241: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Sandboxing w praktyce: domeny aplikacji

zestaw uprawnień w sandbox-ie jest określony przez jestokreślony przez dowody uprawnień (evidence) na etapietworzenia domeny aplikacji

Public Shared Function CreateDomain ( _friendlyName As String, _securityInfo As Evidence, _info As AppDomainSetup, _grantSet As PermissionSet, _ParamArray fullTrustAssemblies As StrongName() _) As AppDomain

Tomasz Goluch Visual Basic .NET

Page 242: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Klasa Evidence

zawiera zwykle podpisy i lokalizację danego kodu

security policy składa się z grup kodu

klasa Evidence służy do określenia do jakiej grupy dany kodnależy

obiekt Evidence jest kolekcją

mamy dwa typy źródeł: host evidence oraz assembly evidence

Tomasz Goluch Visual Basic .NET

Page 243: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Prosty przykład uruchomienia

Imports System.AppDomain...Dim d as AppDomain = AppDomain.CreateDomain("Dowolna nazwa")d.ExecuteAssembly("sciezka\plik.exe")AppDomain.Unload(d)

Tomasz Goluch Visual Basic .NET

Page 244: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 245: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 246: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 247: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 248: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 249: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 250: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 251: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 252: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Nowości w VB 14.0 i C#6.0

Operator ?.:

If customer IsNot Nothing AndAlso customer.Age >= 100 ThenConsole.WriteLine("send telegram")

End If

If customer?.Age >= 100 ThenConsole.WriteLine("send telegram")

End If

Tomasz Goluch Visual Basic .NET

Page 253: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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

Page 254: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

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=freudage=40"

Tomasz Goluch Visual Basic .NET

Page 255: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Nowości w VB 14.0 i C#6.0

Komentarze w zapytaniach LINQ:

Dim addr = From i In invitees ’go through the listLet address = Lookup(i) ’look up nameSelect i, address

Wcześniej komentarze wewnątrz zapytań były traktowane jako błąd

Tomasz Goluch Visual Basic .NET

Page 256: Języki Programowania na Platformie .NET Tomasz Goluchgoluch/wyk/lec3_VB.pdf · VB/VS 7.0 .NET 1.0 (2002) / C # 1.0 wprowadzenie platformy .NET Framework wprowadzenie języka C #

Dziękuje za uwagę

Tomasz Goluch Visual Basic .NET