[ jc denton @ 09.08.2002. 20:06 ] @
Tipovi podataka 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 Ovako bi bilo ispravno : Code: 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)) Inicijalizacija string promenljive moze da se odradi i ovako : Code: 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 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 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 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}} 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 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 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() 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) 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. 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() 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() i na kraju kao u starom VB-u : Code: 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() 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 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. |