link u novom MSDN-u : ms-help://MS.VSCC/MS.MSDNVS/vblr7/html/vagrpdatatype.htm
Svi jezici u .NET okruzenju koriste .NET Framework's Base Class Library, tj. neke delove iste. VB.NET ne koristi sve klase i strukture BCL-a, ali su tipovi koji se koriste u njemu u stvari 'odgovarajuci' tipovi iz BCL-a (Base Class Library).
Celobrojni tipovi
Short - 16-bitni celobrojni tip. Ekvivalent za ovaj tip je Int16 u BCL-u.
Char - isto kao short, bez znaka (unsigned)
Integer - 32-bit celobrojni tip. 'Zamena' u BCL-u je Int32 tip.
Long - 64-bit celobrojni tip. Za ovaj tip ekv. je Int64.
Stringovi
U VB-u 6, stringovi su mogli da se deklarisu kao fiksni i promenljive duzine. U VB.NET-u stringovi su implementirani kao objekti String klase koja je deo .NET Framework's System namespace-a. Posledica ovakve implementacije je da u VB.NET-u nije moguce definisati stringove fiksne duzine i sledeca deklaracija rezultirace greskom :
Code:
Dim Name As String * 30
Dim Name As String * 30
Ovako bi bilo ispravno :
Code:
Dim ime As String = "mika"
Dim ime As String = "mika"
Ovako deklarisan string pri inicijalizaji 'dobija' odredjenu duzinu koja nije izmenjiva. Znaci pri svakoj promeni vrednosti ove promenljive CLR (Common Language Runtime) dodaje referencu na novi String objekt.
U slucaju da hocemo da podesimo duzinu stringa na odredjen broj karaktera mozemo da iskoristimo PadLeft i PadRight funkcije koje su zamenile stare LSet i RSet funkcije iz VB-a 6 :
Code:
Msgbox(ime.PadLeft(15))
Msgbox(ime.PadLeft(15))
Inicijalizacija string promenljive moze da se odradi i ovako :
Code:
Dim ime As New String("A"c, 5)
Dim ime As New String("A"c, 5)
Na ovaj nacin dobijamo inicijalnu vrednost string-a "AAAAA", 'c' na kraju oznacava da je rec o karakteru (tip Char).
Variant tip
Varijant nije podrzan u VB.NET-u, ali sada je tu Object tip kao univerzalni tip koji moze da sadrzi podatke bilo koje vrste.
VarType funkcija, pomocu koje u VB-u 6 mozemo da odredimo o kom se tipu podatka radi u Variant-u, sada 'vraca' vrstu podtip-a Object tipa, sto mu je otprilike isto.
TypeName funkcija prisutna je i VB.NET-u i dalje mozemomo da je koristimo na isti nacin.
Currency tip je zamenjen novim Decimal tipom koji omogucava vise cifara sa jedne i druge strane pokretnog zareza.
Deftype i sl. nije podrzan.
Promene u deklaraciji
U VB.NET-u je moguce u istom redu deklarisati vise promenljivih istog tipa, a da se ne navodi tip za svaku promenljivu ponaosob :
Code:
Dim a As Long, b, c, d As Integer, e As String
Dim a As Long, b, c, d As Integer, e As String
Ovde su b, c, d tipa Integer, a ostalo je valjda jasno.
Inicijalizacija vrednosti promenljivih je takodje moguca u deklaraciji :
Code:
Dim a As Integer = 5
Dim b As Integer = 6, c As Integer = 7
Dim a As Integer = 5
Dim b As Integer = 6, c As Integer = 7
Promene u Variable Scope-u i Lifetime promenljivih
U VB-u 6, recimo, promenljiva deklarisana bilo gde u proceduri je 'vidljiva' svuda u toj proceduri.
U VB.NET-u, ako je promenljiva deklarisana u nekoj petlji, if bloku i sl., onda je ta ista promenljiva vidljiva samo u tom bloku. Na primer :
Code:
Sub primer ( )
if a > 0 Then
Dim b As Integer
b=1/a
end if
MsgBox b
Sub primer ( )
if a > 0 Then
Dim b As Integer
b=1/a
end if
MsgBox b
Zadnja linija koda rezultirace greskom. Vazno je i da se napomene da ovako deklarisane promljive u bloku imaju 'zivotni vek' (lifetime) sve dok se izvrsava procedura, pa zadrzavaju vrednost od zadnjeg izvrsavanja bloka u kome su deklarisane. Nesto slicno kao Static u VB-u 6.
Nizovi
U VB-u 6 bilo je dozvoljeno da se definise donja granica indeksa niza, kao i default za istu kod nizova gde to nije eksplicitno naznaceno.
VB.NET vise ne dozvoljava ove 'vratolimije', dakle, Option Base je izbacen i svi nizovi pocinju sa indeksom 0. Pored toga, svi nizovi su sada dinamicki i ne postoje nizovi fiksne duzine, a ono sto se navede u deklaraciji je u stvari samo neka inicijalna velicina niza.
Za razliku od starog VB-a, nije moguce promeniti broj dimenzija u nizu komandom ReDim i ova komanda ne moze da se koristi za deklaraciju niza nego samo za promenu velicine niza.
Evo nekih primera za deklaraciju nizova :
Code:
'bez inicijalizacije i inicijalne velicine :
Dim niz( ) As Integer
'ili eksplicitno :
Dim niz( ) As Integer = New Integer( ) {}
'bez inicijalizacije clanova niza ali sa inicijalnom velicinom :
Dim niz(5) As Integer
Dim niz( ) As Integer = New Integer(5) {}
'inicijalizacija clanova koja odredjuje i velicinu niza :
Dim niz( ) As Integer = {1, 2, 3, 4, 5, 6}
'a moze i jedno i drugo :
Dim niz( ) As Integer = New Integer(5) {1, 2, 3, 4, 5, 6}
'Visedimenzionalni nizovi :
Dim niz(,) As Integer = {{1, 2, 3}, {4, 5, 6}}
'bez inicijalizacije i inicijalne velicine :
Dim niz( ) As Integer
'ili eksplicitno :
Dim niz( ) As Integer = New Integer( ) {}
'bez inicijalizacije clanova niza ali sa inicijalnom velicinom :
Dim niz(5) As Integer
Dim niz( ) As Integer = New Integer(5) {}
'inicijalizacija clanova koja odredjuje i velicinu niza :
Dim niz( ) As Integer = {1, 2, 3, 4, 5, 6}
'a moze i jedno i drugo :
Dim niz( ) As Integer = New Integer(5) {1, 2, 3, 4, 5, 6}
'Visedimenzionalni nizovi :
Dim niz(,) As Integer = {{1, 2, 3}, {4, 5, 6}}
Korisnicki tipovi i strukture
VB.NET ne podrzava Type ... End Type, pa je sada tu Structure...End Structure :
Code:
Structure korisnik
Public ime As String
Public prezime As String
End Structure
Structure korisnik
Public ime As String
Public prezime As String
End Structure
Strukture u VB.NET-u su naprednije i podsecaju u neku ruku i na klase zato sto mogu da imaju clanice kao sto su obelezja i metode :
Code:
Structure Automobil
Public Property Start() As String
Get
End Get
Set(ByVal kljuc As String)
If kljuc Then
statusMotora = "motor radi"
Else
statusMotora = "motor ne radi"
End If
End Set
End Property
Private statusMotora As String
Public Sub PrikaziStatus()
MsgBox(statusMotora)
End Sub
End Structure
Structure Automobil
Public Property Start() As String
Get
End Get
Set(ByVal kljuc As String)
If kljuc Then
statusMotora = "motor radi"
Else
statusMotora = "motor ne radi"
End If
End Set
End Property
Private statusMotora As String
Public Sub PrikaziStatus()
MsgBox(statusMotora)
End Sub
End Structure
Code:
pomocu ovog obelezja (property) dodeljuje se vrednost Private member-u (clanu) statusMotora :
noviAuto.Start = True
'sa metodom (procedura) PrikaziStatus dobijamo ispis statusa
noviAuto.PrikaziStatus()
pomocu ovog obelezja (property) dodeljuje se vrednost Private member-u (clanu) statusMotora :
noviAuto.Start = True
'sa metodom (procedura) PrikaziStatus dobijamo ispis statusa
noviAuto.PrikaziStatus()
Procedure i funkcije
Pozivanje procedura u starom VB-u je bilo moguce preko komande Call gde su parametri morali biti uokvireni zagradama ili bez zagrada ali takodje bez komande call. Argumenti su takodje morali biti uokvireni zagradama pri pozivu funkcija.
U VB.NET-u obavezno je koriscenje zagrada oko liste argumenata za datu proceduru ili funkciju. Opciono je koriscenje zagrada za poziv procedure koja nema argumente, a takodje ne mora da se koristi Call komanda.
Kod prenosa parametara ByRef je bio default u VB-u 6, a za VB.NET je ByVal. U VB-u 6, argumenti se mogu deklarisati kao Optional i to bez osnovne (default) vrednosti, a za proveru u samoj proc. da li je argument prosledjen koristili smo IsMissing funkciju.
VB.NET ima drugu logiku koja kaze ovako :
Sub procedura(Optional ByVal parametar As Boolean = False)
IsMissing funkcija ne postoji, pa otud i obavezna default vrednost za Optional parametar (valjda).
Evo sada i jedne fine stvarcice koju su uveli u novi VB. U VB-u 6, prosledjivanje property-ja od nekog objekta nekoj proceduri nije uticalo na samo obelezje tog objekta iako je isto promenilo vrednost u pozvanoj proceduri. Evo primera :
Code:
Sub prepolovi(ByRef vrednost As Long)
vrednost = CLng(vrednost/2)
End Sub
Call prepolovi(Button1.Height)
Sub prepolovi(ByRef vrednost As Long)
vrednost = CLng(vrednost/2)
End Sub
Call prepolovi(Button1.Height)
Posle ovog poziva visina dugmeta Button1 je prepolovljena.
Konstante
Vecina ugradjenih konstanti koje smo koristili u starom VB-u je sada u Microsoft.VisualBasic.Constants klasi uz male izuzetke. Recimo vbRed i vbBlue konstante nisu clanice ove klase nego pripadaju System.Drawing.Color strukturi.
Evo primera :
Code:
Me.BackColor = System.Drawing.Color.Blue , mada ovo System.Drawing ne mora da se navodi, moze i samo Color.Blue.
Me.BackColor = System.Drawing.Color.Blue , mada ovo System.Drawing ne mora da se navodi, moze i samo Color.Blue.
Evo linka za listu ugradjenih konstanti u novom MSDN :
ms-help://MS.VSCC/MS.MSDNVS/vbcn7/html/vaconworkingwithconstants.htm
Q : Windows Forms, sta je to ?
A : U prethodnim verzijma Visual Studia svaki alat je koristio svoje 'nacine' za kreiranje GUI aplikacija. .NET Framework omogucava sada svim alatima podrzanim u novom VS-u da koriste isti set klasa za kreiranje GUI aplikacija i to je System.Windows.Forms. Treba pomenuti i System.Drawing namespace koji se takodje neizostavno koristi u pri kreiranju GUI aplikacija.
Dakle, forma koju smo imali u starom VB-u ne tretira se vise na isti nacin vec je to objekat nastao iz klase definisane u namespace-u System.Windows.Forms.
Q : Kako da dodam formu u projekat i kako da je pozovem, tj. prikazem ?
A : Kao i vecina klasa i Form klasa se moze iskoristiti za 'pravljenje' objekata, recimo :
Code:
Dim forma As New System.Windows.Forms.Form()
Dim forma As New System.Windows.Forms.Form()
a, ako od neke postojece forme (klase) zelimo da napravimo objekt moglo bi ovako :
Code:
Dim forma As New System.Windows.Forms.Form() = New Form1()
Dim forma As New System.Windows.Forms.Form() = New Form1()
i na kraju kao u starom VB-u :
Code:
forma.Show()
forma.Show()
Q : Uh, bas su mora da se kuca da za prostu deklaraciju. Da li moze nekako krace da se napise ova deklaracija?
A : Moze. Recimo ovako :
Code:
Dim forma As New Form()
forma.Show()
Dim forma As New Form()
forma.Show()
Znaci, nije potrebno da se pise System.Windows.Forms.Form nego samo Form. Za sve skupove klasa tj. biblioteke koje su ukljucene u projekat ovo vazi uglavnom. Sta je ukljuceno moze da se vidi ako se u Solution Explorer-u klikne na projekat pa onda na Propeties i na kraju na Imports, a tu obicno pise nesto ovako :
Microsoft.VisualBasic, System, System.Collections, System.Data, System.Diagnostics, System.Drawing, System.Windows.Forms.
Q A sta je Windows Form Designer ?
A Windows Form Designer alat koji kreira VB.NET kod na osnovu onoga sto je postavljeno na formu (dugmici,labele itd) i ostalih akcija koje su izvrsene preko grafickog interfejsa tj. koriscenjem vizuelnih alata, kao na pr. kada dodamo data adapter i napravimo konekciju na bazu, sav potreban kod koji bi inace rucno pisali se nalazi u sekciji 'Windows Form Designer generated code'
Q Dobro, a da li moze nekako sve 'rucno' da se kodira ?
A Moze, naravno. Evo primera 'step by step' za kreiranje forme iz Notepada :
Code:
Imports System.Windows.Forms
Imports System.Drawing
Module Module1
Public Class forma
Inherits Form
Private labela As New Label()
Public Sub New()
With labela
.Font = New Font("Arial", 24)
.Location = New Point(16, 8)
.Size = New Size(248, 40)
.TabIndex = 0
.Text = "LABELA"
End With
Controls.Add(labela)
End Sub
End Class
<System.STAThreadAttribute()> Public Sub Main()
System.Threading.Thread.CurrentThread.ApartmentState = System.Threading.ApartmentState.STA
Application.Run(New forma())
End Sub ' Main
Imports System.Windows.Forms
Imports System.Drawing
Module Module1
Public Class forma
Inherits Form
Private labela As New Label()
Public Sub New()
With labela
.Font = New Font("Arial", 24)
.Location = New Point(16, 8)
.Size = New Size(248, 40)
.TabIndex = 0
.Text = "LABELA"
End With
Controls.Add(labela)
End Sub
End Class
<System.STAThreadAttribute()> Public Sub Main()
System.Threading.Thread.CurrentThread.ApartmentState = System.Threading.ApartmentState.STA
Application.Run(New forma())
End Sub ' Main
Ovo se snimi recimo kao forma.vb pa pozivamo kompajler iz konzole :
vbc forma.vb /r:System.dll,System.Drawing.dll,System.Windows.Forms.dll /t:winexe
i rezultat je fajl forma.exe spreman za start.
Q Kako da dodam biblioteke u projekat koje ja zelim ?
A Ovako : Project/Add Reference i izaberemo one koje zelimo. System.dll, System.Drawing.dll i System.Windows.Forms.dll su u vecini slucajeva potrebne biblioteke za GUI aplikacije.
fire, walk with me