Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00622 009802 10450990 na godz. na dobę w sumie
Visual Basic 2005. Almanach - książka
Visual Basic 2005. Almanach - książka
Autor: , , , Liczba stron: 880
Wydawca: Helion Język publikacji: polski
ISBN: 83-246-0475-8 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> visual basic - programowanie
Porównaj ceny (książka, ebook, audiobook).

Visual Basic po raz pierwszy pojawił się na rynku w roku 1991 jako połączenie oferowanego przez Microsoft języka QBasic z mechanizmem projektowania graficznego interfejsu użytkownika. Od tej pory przeszedł sporą ewolucję, zyskując jednocześnie ogromne grono zwolenników. W roku 2001 wprowadzono na rynek platformę programistyczną .NET wraz z całkowicie zmienioną i odnowioną wersją Visual Basica pod nazwą Visual Basic .NET. Visual Basic dla platformy .NET był językiem w pełni obiektowym i oferował znacznie większe możliwości niż jego poprzednicy. Visual Basic 2005 to najnowsze wcielenie tego popularnego języka programowania.

Książka 'Visual Basic 2005. Almanach' to kompleksowe omówienie wszystkich zagadnień związanych z programowaniem w tym języku. Czytając ją, poznasz genezę platformy .NET, jej składniki i konstrukcję oraz słowa kluczowe języka Visual Basic. Przeczytasz o programowaniu obiektowym, klasach platformy .NET, obsłudze zdarzeń oraz typach uniwersalnych. Dalsza część książki to niezwykle przydatne każdemu programiście zestawienie dokumentacji wszystkich istotnych wyrażeń, procedur, funkcji i obiektów Visual Basica zawierające omówienie składni i argumentów, wskazówki dotyczące sposobu stosowania omawianego elementu języka, przykłady kodu oraz opisy nieudokumentowanych zachowań.

W książce omówiono:

Zostań ekspertem w dziedzinie programowania w Visual Basicu.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Visual Basic 2005. Almanach Tim Patrick, Steven Roman, Ron Petrusha, Paul Lomax T³umaczenie: Miko³aj Szczepaniak ISBN: 83-246-0475-8 Tytu³ orygina³u: Visual Basic 2005 in a Nutshell Format: B5, stron: 880 Przyk³ady na ftp: 7 kB Visual Basic po raz pierwszy pojawi³ siê na rynku w roku 1991 jako po³¹czenie oferowanego przez Microsoft jêzyka QBasic z mechanizmem projektowania graficznego interfejsu u¿ytkownika. Od tej pory przeszed³ spor¹ ewolucjê, zyskuj¹c jednoczeœnie ogromne grono zwolenników. W roku 2001 wprowadzono na rynek platformê programistyczn¹ .NET wraz z ca³kowicie zmienion¹ i odnowion¹ wersj¹ Visual Basica pod nazw¹ Visual Basic .NET. Visual Basic dla platformy .NET by³ jêzykiem w pe³ni obiektowym i oferowa³ znacznie wiêksze mo¿liwoœci ni¿ jego poprzednicy. Visual Basic 2005 to najnowsze wcielenie tego popularnego jêzyka programowania. Ksi¹¿ka „Visual Basic 2005. Almanach” to kompleksowe omówienie wszystkich zagadnieñ zwi¹zanych z programowaniem w tym jêzyku. Czytaj¹c j¹, poznasz genezê platformy .NET, jej sk³adniki i konstrukcjê oraz s³owa kluczowe jêzyka Visual Basic. Przeczytasz o programowaniu obiektowym, klasach platformy .NET, obs³udze zdarzeñ oraz typach uniwersalnych. Dalsza czêœæ ksi¹¿ki to niezwykle przydatne ka¿demu programiœcie zestawienie dokumentacji wszystkich istotnych wyra¿eñ, procedur, funkcji i obiektów Visual Basica zawieraj¹ce omówienie sk³adni i argumentów, wskazówki dotycz¹ce sposobu stosowania omawianego elementu jêzyka, przyk³ady kodu oraz opisy nieudokumentowanych zachowañ. W ksi¹¿ce omówiono: (cid:129) Podstawowe wiadomoœci o platformie .NET (cid:129) Zasady programowania obiektowego (cid:129) Zmienne, typy danych i operatory (cid:129) Struktura programów w Visual Basic (cid:129) Klasy platformy .NET (cid:129) Typy uniwersalne (cid:129) Obs³uga b³êdów i wyj¹tków (cid:129) Leksykon elementów jêzyka Visual Basic 2005 Zostañ ekspertem w dziedzinie programowania w Visual Basicu Wydawnictwo Helion ul. Koœciuszki 1c 44-100 Gliwice tel. 032 230 98 63 e-mail: helion@helion.pl Spis treści Przedmowa ................................................................................................................... 21 I Podstawy .................................................................................................29 1. Wprowadzenie ..............................................................................................................31 32 36 42 43 Dlaczego Visual Basic .NET? Czym jest Visual Basic .NET? Co możemy zrobić w środowisku Visual Basic .NET? Wersje języka Visual Basic .NET 2. Platforma .NET Framework: pojęcia ogólne ................................................................45 45 46 47 48 49 51 52 52 Środowisko uruchomieniowe wspólnego języka Kod zarządzany Przestrzenie nazw Typy i obiekty Podzespoły Biblioteka klas platformy .NET (FCL) Wdrażanie aplikacji Platforma .NET i język Visual Basic 3. Wprowadzenie do programowania obiektowego .....................................................53 53 58 Reguły programowania obiektowego Programowanie obiektowe w języku Visual Basic 4. Zmienne i typy danych ..................................................................................................77 77 93 97 98 98 99 100 Typy danych Zmienne Stałe Typy wyliczeniowe Tablice Kolekcje Parametry i argumenty 3 5. Operatory ....................................................................................................................105 105 107 107 112 114 115 117 119 Operatory arytmetyczne Operatory konkatenacji Operatory logiczne i bitowe Operatory przypisania Operatory porównania Operatory obiektowe Przeciążanie operatorów Priorytety operatorów 6. Struktura programu .....................................................................................................121 121 122 123 126 127 Rodzaje aplikacji tworzonych w środowisku Visual Studio Techniki odwołań do komponentów i klas Punkty wejścia aplikacji Zawartość pliku z kodem źródłowym Struktura programu Visual Basica 7. Biblioteka klas platformy .NET ................................................................................... 135 136 142 142 143 144 146 146 Przestrzeń nazw System Przestrzeń nazw System.Collections Przestrzeń nazw System.Data Przestrzeń nazw System.IO Przestrzeń nazw System.Text.RegularExpressions Przestrzeń nazw System.Windows.Forms Pozostałe przestrzenie nazw 8. Delegacje i zdarzenia ..................................................................................................149 150 153 Delegacje Zdarzenia i wiązanie zdarzeń 9. Atrybuty ......................................................................................................................159 160 163 166 Składnia i techniki stosowania Definiowanie atrybutów niestandardowych Korzystanie z atrybutów niestandardowych 10. Typy uniwersalne .........................................................................................................171 171 172 173 173 174 175 Czym są typy uniwersalne? Parametry typów Stosowanie wielu parametrów typów Ograniczenia Ograniczenia złożone Uzyskiwanie dostępu do składowych parametrów typów 4 | Spis treści Metody uniwersalne Zagnieżdżone typy uniwersalne Typy i składowe przeciążone 177 177 177 11. Obsługa błędów w Visual Basicu ............................................................................... 179 179 180 188 191 Wykrywanie i obsługa błędów Obsługa błędów wykonywania Obsługa błędów logiki Stałe błędów II Leksykon ................................................................................................ 193 12. Leksykon języka Visual Basic ......................................................................................195 197 198 200 200 201 202 203 203 205 206 207 208 209 209 210 211 212 214 215 216 217 218 220 220 221 222 223 224 225 #Const (dyrektywa) #If...Then...#Else (dyrektywa) #Region...#End Region (dyrektywa) Abs (funkcja) Acos (funkcja) AddHandler (wyrażenie) AddressOf (operator) AppActivate (procedura) Application (klasa) Application.CompanyName (właściwość) Application.DoEvents (metoda) Application.ExecutablePath (właściwość) Application.ProductName (właściwość) Application.ProductVersion (właściwość) Application.Run (metoda) Array (klasa) Array.BinarySearch (metoda) Array.Copy (metoda) Array.IndexOf (metoda) Array.LastIndexOf (metoda) Array.Reverse (metoda) Array.Sort (metoda) Asc i AscW (funkcje) AssemblyVersion (atrybut) Asin (funkcja) Atan (funkcja) Atan2 (funkcja) AttributeUsage (atrybut) Beep (procedura) Spis treści | 5 Call (wyrażenie) CallByName (funkcja) CBool (funkcja) CByte (funkcja) CChar (funkcja) CDate (funkcja) CDbl (funkcja) CDec (funkcja) Ceiling (funkcja) ChDir (procedura) ChDrive (procedura) Choose (funkcja) Chr i ChrW (funkcje) CInt (funkcja) Class...End Class (wyrażenie) Clipboard (klasa) CLng (funkcja) CLSCompliant (atrybut) CObj (funkcja) Collection (klasa) Collection.Add (metoda) Collection.Count (właściwość) Collection.Item (właściwość) Collection.Remove (metoda) ColorDialog (klasa) COMClass (atrybut) Command (funkcja) Const (wyrażenie) Continue (wyrażenie) Cos (funkcja) Cosh (funkcja) CreateObject (funkcja) CSByte (funkcja) CShort (funkcja) CSng (funkcja) CStr (funkcja) CType (funkcja) CUInt (funkcja) CULng (funkcja) CUShort (funkcja) CurDir (funkcja) Custom Event (wyrażenie) 6 | Spis treści 225 226 228 228 229 230 231 231 232 233 234 235 237 238 239 241 241 242 243 244 245 247 248 248 249 251 252 254 255 256 257 257 259 260 261 262 263 265 266 267 268 268 DateAdd (funkcja) DateDiff (funkcja) DatePart (funkcja) DateSerial (funkcja) DateString (właściwość) DateValue (funkcja) Day (funkcja) DDB (funkcja) Debug (klasa) Debug.Assert (metoda) Debug.Listeners (właściwość) Debug.Write (metoda) Debug.WriteIf (metoda) Debug.WriteLine (metoda) Debug.WriteLineIf (metoda) Declare (wyrażenie) DefaultMember (atrybut) Delegate (wyrażenie) DeleteSetting (procedura) Dim (wyrażenie) Dir (funkcja) DirectCast (funkcja) Directory (klasa) Directory.CreateDirectory (metoda) Directory.Delete (metoda) Directory.Exists (metoda) Directory.GetCreationTime (metoda) Directory.GetDirectories (metoda) Directory.GetDirectoryRoot (metoda) Directory.GetFiles (metoda) Directory.GetFileSystemEntries (metoda) Directory.GetLogicalDrives (metoda) Directory.GetParent (metoda) Directory.Move (metoda) Do...Loop (wyrażenie) E (pole) End (wyrażenie) Enum (wyrażenie) Environ (funkcja) EOF (funkcja) Erase (wyrażenie) Erl (właściwość) 270 272 274 276 277 278 278 279 280 282 283 284 284 285 286 287 290 292 294 296 300 302 303 304 305 306 307 307 309 310 311 312 313 314 315 316 317 319 321 323 324 324 Spis treści | 7 Err (obiekt) Err.Clear (metoda) Err.Description (właściwość) Err.GetException (metoda) Err.HelpContext (właściwość) Err.HelpFile (właściwość) Err.LastDLLError (właściwość) Err.Number (właściwość) Err.Raise (metoda) Err.Source (właściwość) Error (wyrażenie) ErrorToString (funkcja) Event (wyrażenie) Exception (klasa) Exit (wyrażenie) Exp (funkcja) File (klasa) File.Exists (metoda) FileAttr (funkcja) FileClose (procedura) FileCopy (procedura) FileDateTime (funkcja) FileGet i FileGetObject (procedury) FileLen (funkcja) FileOpen (procedura) FilePut i FilePutObject (procedury) FileWidth (procedura) Filter (funkcja) Fix (funkcja) Flags (atrybut) Floor (funkcja) FontDialog (klasa) For...Next (wyrażenie) For Each...Next (wyrażenie) Format (funkcja) FormatCurrency, FormatNumber i FormatPercent (funkcje) FormatDateTime (funkcja) FreeFile (funkcja) Friend (słowo kluczowe) Function (wyrażenie) FV (funkcja) GetAllSettings (funkcja) 8 | Spis treści 325 326 327 328 328 329 330 331 331 333 333 334 334 336 338 339 339 340 341 342 343 343 344 346 347 350 351 352 353 354 354 355 357 359 360 364 365 366 367 368 372 373 GetAttr (funkcja) GetChar (funkcja) GetObject (funkcja) GetSetting (funkcja) GetType (operator) Global (słowo kluczowe) GoTo (wyrażenie) Guid (atrybut) Handles (słowo kluczowe) Hashtable (klasa) Hashtable.Add (metoda) Hashtable.ContainsKey (metoda) Hashtable.ContainsValue (metoda) Hashtable.CopyTo (metoda) Hashtable.Item (właściwość) Hashtable.Keys (właściwość) Hashtable.Remove (metoda) Hashtable.Values (właściwość) Hex (funkcja) Hour (funkcja) IEEERemainder (funkcja) If...Then...Else (wyrażenie) IIf (funkcja) Implements (słowo kluczowe) Implements (wyrażenie) Imports (wyrażenie) Inherits (wyrażenie) Input (procedura) InputBox (funkcja) InputString (funkcja) InStr (funkcja) InStrRev (funkcja) Int (funkcja) Interface...End Interface (wyrażenie) IPmt (funkcja) IRR (funkcja) Is (operator) IsArray (funkcja) IsDate (funkcja) IsDBNull (funkcja) IsError (funkcja) IsNot (operator) 374 375 376 377 379 379 380 382 382 384 385 386 386 387 388 389 389 390 390 391 391 392 394 395 396 398 399 400 402 403 404 405 406 407 410 411 412 413 414 415 416 417 Spis treści | 9 IsNothing (funkcja) IsNumeric (funkcja) IsReference (funkcja) Join (funkcja) Kill (procedura) LBound (funkcja) LCase (funkcja) Left (funkcja) Len (funkcja) Like (operator) LineInput (funkcja) Loc (funkcja) Lock (procedura) LOF (funkcja) Log (funkcja) Log10 (funkcja) LSet (funkcja) LTrim (funkcja) MarshalAs (atrybut) Max (funkcja) Me (słowo kluczowe) Mid (funkcja) Mid (wyrażenie) Min (funkcja) Minute (funkcja) MIRR (funkcja) MkDir (procedura) Mod (operator) Module...End Module (wyrażenie) Month (funkcja) MonthName (funkcja) MsgBox (funkcja) MTAThread (atrybut) MyBase (słowo kluczowe) MyClass (słowo kluczowe) Namespace (wyrażenie) New (słowo kluczowe) Nothing (słowo kluczowe) Now (właściwość) NPer (funkcja) NPV (funkcja) Obsolete (atrybut) 10 | Spis treści 418 419 419 420 421 422 423 423 424 425 426 427 428 430 430 432 432 433 434 437 438 439 440 441 442 442 443 444 445 446 446 447 449 450 451 453 453 454 455 455 457 458 Oct (funkcja) Of (słowo kluczowe) On Error (wyrażenie) OpenFileDialog (klasa) Operator (wyrażenie) Option Compare (wyrażenie) Option Explicit (wyrażenie) Option Strict (wyrażenie) Out (atrybut) ParamArray (atrybut) Partial (słowo kluczowe) Partition (funkcja) PI (pole) Pmt (funkcja) Pow (funkcja) PPmt (funkcja) Print i PrintLine (procedury) Private (słowo kluczowe) Property (wyrażenie) Protected (słowo kluczowe) Public (słowo kluczowe) PV (funkcja) QBColor (funkcja) Queue (klasa) Queue.Contains (metoda) Queue.CopyTo (metoda) Queue.Dequeue (metoda) Queue.Enqueue (metoda) Queue.Peek (metoda) Queue.ToArray (metoda) RaiseEvent (wyrażenie) Randomize (procedura) Rate (funkcja) ReDim (wyrażenie) Rem (wyrażenie) RemoveHandler (wyrażenie) Rename (procedura) Replace (funkcja) Reset (procedura) Resume (wyrażenie) Return (wyrażenie) RGB (funkcja) 459 459 460 462 464 466 467 468 469 471 471 472 474 475 476 476 478 479 480 484 486 487 488 489 490 491 492 493 493 494 494 496 497 498 500 501 502 503 504 505 506 507 Spis treści | 11 Right (funkcja) RmDir (procedura) Rnd (funkcja) Round (funkcja) RSet (funkcja) RTrim (funkcja) SaveFileDialog (klasa) SaveSetting (procedura) ScriptEngine (właściwość) ScriptEngineBuildVersion (właściwość) ScriptEngineMajorVersion (właściwość) ScriptEngineMinorVersion (właściwość) Second (funkcja) Seek (funkcja) Seek (procedura) Select Case (wyrażenie) Send, SendWait (metody) SetAttr (procedura) Shadows (słowo kluczowe) Shared (słowo kluczowe) Shell (funkcja) Sign (funkcja) Sin (funkcja) Sinh (funkcja) SLN (funkcja) Space (funkcja) SPC (funkcja) Split (funkcja) Sqrt (funkcja) Stack (klasa) Stack.Contains (metoda) Stack.CopyTo (metoda) Stack.Peek (metoda) Stack.Pop (metoda) Stack.Push (metoda) Stack.ToArray (metoda) STAThread (atrybut) Static (wyrażenie) Stop (wyrażenie) Str (funkcja) StrComp (funkcja) StrConv (funkcja) 12 | Spis treści 508 509 510 511 512 513 514 515 517 518 518 519 519 520 521 522 524 526 528 528 529 531 532 532 533 534 534 535 536 537 538 539 540 541 541 542 542 543 543 544 545 546 StrDup (funkcja) StrReverse (funkcja) Structure...End Structure (wyrażenie) Sub (wyrażenie) Switch (funkcja) SYD (funkcja) SyncLock (wyrażenie) SystemTypeName (funkcja) TAB (funkcja) Tan (funkcja) Tanh (funkcja) ThreadStatic (atrybut) Throw (wyrażenie) TimeOfDay (właściwość) Timer (właściwość) TimeSerial (funkcja) TimeString (właściwość) TimeValue (funkcja) Today (właściwość) Trim (funkcja) Try...Catch...Finally (wyrażenie) TryCast (funkcja) TypeName (funkcja) TypeOf (operator) UBound (funkcja) UCase (funkcja) Unlock (procedura) Using...End Using (wyrażenie) Val (funkcja) VarType (funkcja) VBFixedArray (atrybut) VBFixedString (atrybut) VbTypeName (funkcja) WebMethod (atrybut) WebService (atrybut) Weekday (funkcja) WeekdayName (funkcja) While...End While (wyrażenie) With...End With (wyrażenie) WithEvents (słowo kluczowe) Write i WriteLine (procedury) Year (funkcja) 547 548 549 551 554 555 556 557 557 558 559 560 561 562 562 563 564 565 566 566 567 569 570 572 573 573 574 575 577 577 579 580 581 582 583 584 585 586 587 588 588 590 Spis treści | 13 13. Leksykon przestrzeni nazw My ..................................................................................591 592 593 594 595 596 597 597 598 599 599 600 601 602 603 603 605 605 606 607 608 609 610 611 611 612 613 613 614 616 618 619 620 620 621 622 623 624 625 626 627 629 AllUsersApplicationData (właściwość) AltKeyDown (właściwość) Application (obiekt) ApplicationContext (właściwość) AssemblyName (właściwość) Audio (obiekt) AvailablePhysicalMemory (właściwość) AvailableVirtualMemory (właściwość) ButtonsSwapped (właściwość) CapsLock (właściwość) ChangeCulture (metoda) ChangeUICulture (metoda) ClassesRoot (właściwość) Clear (metoda) Clipboard (obiekt) Clock (obiekt) Close (metoda) CombinePath (metoda) CommandLineArgs (właściwość) CommentTokens (właściwość) CompanyName (właściwość) Computer (obiekt) ContainsAudio (metoda) ContainsData (metoda) ContainsFileDropList (metoda) ContainsImage (metoda) ContainsText (metoda) CopyDirectory (metoda) CopyFile (metoda) Copyright (właściwość) CreateDirectory (metoda) CtrlKeyDown (właściwość) Culture (właściwość) CurrentConfig (właściwość) CurrentDirectory (właściwość) CurrentPrincipal (właściwość) CurrentUser (właściwość) CurrentUserApplicationData (właściwość) DefaultFileLogWriter (właściwość) DeleteDirectory (metoda) DeleteFile (metoda) 14 | Spis treści Delimiters (właściwość) Deployment (właściwość) Description (właściwość) Desktop (właściwość) DirectoryExists (metoda) DirectoryPath (właściwość) DoEvents (metoda) DownloadFile (metoda) Drives (właściwość) DynData (właściwość) EndOfData (właściwość) ErrorLine (właściwość) ErrorLineNumber (właściwość) FieldWidths (właściwość) FileExists (metoda) FileSystem (obiekt) FindInFiles (metoda) Forms (obiekt) GetAudioStream (metoda) GetData (metoda) GetDataObject (metoda) GetDirectories (metoda) GetDirectoryInfo (metoda) GetDriveInfo (metoda) GetEnvironmentVariable (metoda) GetFileDropList (metoda) GetFileInfo (metoda) GetFiles (metoda) GetImage (metoda) GetName (metoda) GetParentPath (metoda) GetTempFileName (metoda) GetText (metoda) GetValue (metoda) GmtTime (właściwość) HasFieldsEnclosedInQuotes (właściwość) Info (obiekt składowy obiektu My.Application) Info (obiekt składowy obiektu My.Computer) InitializeWithWindowsUser (metoda) InstalledUICulture (właściwość) IsAuthenticated (właściwość) IsAvailable (właściwość) 630 632 633 634 634 635 636 637 638 639 640 641 642 643 644 645 646 648 649 650 651 652 653 655 656 657 658 660 661 662 663 664 665 666 667 668 669 670 670 671 672 672 Spis treści | 15 IsInRole (metoda) IsNetworkDeployed (właściwość) Keyboard (obiekt) LineNumber (właściwość) LoadedAssemblies (właściwość) LocalMachine (właściwość) LocalTime (właściwość) Log (obiekt składowy przestrzeni nazw My) Log (obiekt składowy obiektu My.Application) MinimumSplashScreenDisplayTime (właściwość) Mouse (obiekt) MoveDirectory (metoda) MoveFile (metoda) My (przestrzeń nazw) MyDocuments (właściwość) MyMusic (właściwość) MyPictures (właściwość) Name (właściwość składowa obiektu My.Computer) Name (właściwość składowa obiektu My.User) Network (obiekt) NetworkAvailabilityChanged (zdarzenie składowe obiektu My.Application) NetworkAvailabilityChanged (zdarzenie składowe obiektu My.Computer.Network) NumLock (właściwość) OpenForms (właściwość) OpenSerialPort (metoda) OpenTextFieldParser (metoda) OpenTextFileReader (metoda) OpenTextFileWriter (metoda) OSFullName (właściwość) OSPlatform (właściwość) OSVersion (właściwość) PeekChars (metoda) PerformanceData (właściwość) Ping (metoda) Play (metoda) PlaySystemSound (metoda) Ports (obiekt) ProductName (właściwość) ProgramFiles (właściwość) Programs (właściwość) ReadAllBytes (metoda) 673 674 675 676 677 678 679 680 680 681 682 683 684 686 687 688 689 690 690 691 692 693 694 695 696 698 699 701 702 703 704 705 706 706 707 709 710 711 711 712 713 16 | Spis treści ReadAllText (metoda) ReadFields (metoda) ReadLine (metoda) ReadToEnd (metoda) Registry (obiekt) RenameDirectory (metoda) RenameFile (metoda) Request (obiekt) Resources (obiekt) Response (obiekt) Run (metoda) SaveMySettingsOnExit (właściwość) Screen (właściwość) ScrollLock (właściwość) SendKeys (metoda) SerialPortNames (właściwość) SetAudio (metoda) SetData (metoda) SetDataObject (metoda) SetDelimiters (metoda) SetFieldWidths (metoda) SetFileDropList (metoda) SetImage (metoda) SetText (metoda) Settings (obiekt) SetValue (metoda) ShiftKeyDown (właściwość) Shutdown (zdarzenie) SpecialDirectories (obiekt) SplashScreen (właściwość) StackTrace (właściwość) Startup (zdarzenie) StartupNextInstance (zdarzenie) Stop (metoda) Temp (właściwość) TextFieldParser (obiekt) TextFieldType (właściwość) TickCount (właściwość) Title (właściwość) TotalPhysicalMemory (właściwość) TotalVirtualMemory (właściwość) TraceSource (właściwość) 714 715 716 717 718 719 720 721 722 723 724 725 726 727 727 730 731 732 733 734 735 736 737 738 739 741 743 743 744 745 746 748 749 750 751 752 753 754 755 756 757 757 Spis treści | 17 Trademark (właściwość) TrimWhiteSpace (właściwość) UICulture (właściwość) UnhandledException (zdarzenie) UploadFile (metoda) User (obiekt) Users (właściwość) Version (właściwość) WebServices (obiekt) WheelExists (właściwość) WheelScrollLines (właściwość) WorkingSet (właściwość) WriteAllBytes (metoda) WriteAllText (metoda) WriteEntry (metoda) WriteException (metoda) 759 759 760 761 762 764 765 766 767 768 769 770 770 771 772 774 III Dodatki .................................................................................................. 777 A Elementy języka Visual Basic według kategorii ........................................................779 780 780 781 782 782 782 783 784 784 785 786 787 787 788 789 789 790 791 791 793 793 Obsługa tablic Schowek Obiekty kolekcji Popularne okna dialogowe Kompilacja warunkowa Konwersja Data i godzina Diagnostyka Deklaracja Obsługa błędów System plików Operacje finansowe Informacja Wejście-wyjście Zintegrowane środowisko programowania Interakcja Matematyka Struktura programu i przepływ sterowania Programowanie obiektowe i różne konstrukcje programowe Rejestr Operacje na łańcuchach 18 | Spis treści B Hierarchia przestrzeni nazw ......................................................................................795 795 801 Hierarchia przestrzeni nazw My Hierarchia przestrzeni nazw System C Stałe i typy wyliczeniowe .......................................................................................... 805 805 808 809 Stałe wbudowane Visual Basica Klasa ControlChars Typy wyliczeniowe Visual Basica D Co dodano, a co zmieniono w Visual Basicu .NET 2002? ..........................................815 815 824 826 827 827 Zmiany językowe wprowadzone w Visual Basicu .NET 2002 Zmiany dotyczące konstrukcji programistycznych Przestarzałe konstrukcje programistyczne Ustrukturalizowana obsługa wyjątków Zmiany w technikach programowania obiektowego E Co dodano, a co zmieniono w Visual Basicu .NET 2003? ..........................................831 831 Zmiany językowe wprowadzone w Visual Basicu .NET 2003 F Co dodano, a co zmieniono w Visual Basicu 2005? ................................................. 833 834 837 838 Rozszerzenia istniejącej funkcjonalności Przestrzeń nazw My Pozostałe nowości G Elementy Visual Basica 6, które nie są już obsługiwane ..........................................841 H Kompilator Visual Basica obsługiwany z poziomu wiersza poleceń .......................847 847 848 853 854 Podstawy kompilatora Visual Basica Przełączniki wiersza poleceń Stosowanie pliku odpowiedzi Stałe kompilacji warunkowej Skorowidz ....................................................................................................................857 Spis treści | 19 ROZDZIAŁ 4. Zmienne i typy danych Mechanizmy odpowiedzialne za przetwarzanie danych są sercem wszystkich aplikacji pro- gramowych. Moglibyśmy oczywiście przetwarzać dane tak jak robi to procesor komputera, czyli bit po bicie, jednak praca nad odpowiednimi algorytmami szybko by nas znużyła — właśnie dlatego takie języki jak Visual Basic oferują rozmaite typy danych oraz implementacje narzędzi zarządzających danymi (z których każdy bazuje na jakimś podzbiorze możliwych wartości danych). W niniejszym rozdziale zajmiemy się typami danych, sposobami zarzą- dzania danymi przez te typy oraz technikami ich przetwarzania w języku Visual Basic i plat- formie .NET. Pojęcie „typ danych” nie jest tożsame z bardziej ogólnym terminem „typ” wykorzystywanym w rozmaitych aspektach w tej i innych publikacjach poświęconych technologii .NET. Cała koncepcja platformy .NET bazuje na pojęciu typu, czyli podstawowej konstrukcji danych obejmującej klasy, struktury, delegacje i inne wysokopoziomowe elementy wykorzystywane w procesie konstruowania aplikacji oraz podczas przekazywania danych pomiędzy progra- mami. Typy danych dostępne w platformie .NET bazują właśnie na tych ogólnie rozumianych typach (podobnie zresztą jak klasy budowane przez samych programistów). Typy danych oferują stosunkowo niewielki, ale bardzo istotny zbiór narzędzi przetwarzania danych pogru- powanych według podzbiorów możliwych wartości (zarządzanych w ramach poszczególnych typów danych). Typy danych Środowisko uruchomieniowe wspólnego języka platformy .NET (CLR) obejmuje między inny- mi wspólny system typów (CTS), który definiuje typy danych obsługiwane właśnie przez śro- dowisko CLR. Wszystkie języki programowania przystosowane do współpracy z platformą .NET muszą implementować przynajmniej podzbiory typów danych środowiska CLR (część języków implementuje wszystkie, np. Visual Basic począwszy od wydania z 2005 roku). W technologii .NET typy danych mają postać specjalnych klas i struktur, których egzemplarze reprezentują wartości danych należące do ograniczonych przedziałów (właściwych dla poszcze- gólnych typów). Przykładowo, typ danych Byte oferuje możliwość reprezentowania i zarzą- dzania 8-bitowymi wartościami całkowitoliczbowymi bez znaku, czyli liczbami z przedziału od 0 do 255. Egzemplarze tego typu nie mogą zawierać wartości spoza tego przedziału (pod- zbioru), ale przynajmniej z tym konkretnym podzbiorem radzą sobie znakomicie. Platforma .NET oferuje typy danych dla tych podzbiorów wartości, które są najczęściej wykorzystywane 77 przez programistów podczas wytwarzania aplikacji. Za pomocą tych typów można reprezen- tować niemal dowolne kombinacje danych. Jeśli predefiniowane typy danych platformy .NET nie odpowiadają naszym potrzebom, możemy te typy wykorzystać w roli bloków składających się na naszą własną klasę zarządzającą danymi. Platforma .NET Framework implementuje blisko dwadzieścia podstawowych typów danych, z których większość zaprojektowano z myślą o przetwarzaniu liczb całkowitych i zmienno- przecinkowych. Rdzenne typy danych Visual Basica (znane jeszcze sprzed wprowadzenia plat- formy .NET) stanowią tylko opakowania dla wspomnianych typów podstawowych systemu CTS. Przykładowo, stosowany w Visual Basicu typ danych Integer jest opakowaniem struktury System.Int32. Jedną z wartości struktury Int32 jest stała MaxValue reprezentująca mak- symalną wartość numeryczną, którą można składować w tym typie danych. Oznacza to, że choć składowa MaxValue nie jest oficjalną częścią Visual Basica, pełna zależność typu danych Integer od wspomnianego typu podstawowego Int32 systemu CTS powoduje, że poniższa para wyrażeń zostanie prawidłowo skompilowana i wykonana: Dim usesInt32 As Integer MsgBox(usesInt32.MaxValue) Wyświetla 2147483647 Przed wydaniem wersji 2005 tylko niektóre spośród podstawowych typów danych platformy .NET były implementowane w Visual Basicu. Nawet mimo braku odpowiednich opakowań Visual Basica, wcześniejsze wydania tego języka (oczywiście już w ramach platformy .NET) udostępniały „nieopakowane” typy danych systemu CTS. Ponieważ podstawowe typy danych platformy .NET mają postać klas i struktur, można z nich korzystać w Visual Basicu dokład- nie tak jak z innych klas czy struktur. Typy wartościowe i referencyjne Typy danych w języku Visual Basic można podzielić pomiędzy dwie dość ogólne kategorie: typy wartościowe (ang. data types) oraz typy referencyjne (ang. reference types). Typy wartościo- we różnią się od typów referencyjnych przede wszystkim sposobem składowania w pamięci. Pamięć przydzielana zmiennej typu wartościowego zawiera właściwą wartość tej zmiennej. Przykładowo, w czasie wykonywania poniższego wyrażenia: Dim simpleValue As Integer = 5 zostanie zarezerwowane miejsce w pamięci potrzebne do składowania przypisywanej warto- ści 5. Inaczej jest w przypadku typów referencyjnych, gdzie pod adresami pamięci przydzielo- nymi tym zmiennym są składowane adresy innych bloków pamięci, w których znajdują się wła- ściwe dane. Mechanizm stosowany w typach referencyjnych przypomina trochę usługę pocztową polegającą na przesyłaniu pod inny adres listów oryginalnie kierowanych do okre- ślonego odbiorcy. Przykładowo, dla poniższej deklaracji typu referencyjnego: Dim somewhereElse As New MyCustomClass kompilator Visual Basica utworzy w pamięci egzemplarz klasy MyCustomClass, po czym przy- pisze zmiennej somewhereElse rzeczywisty adres w pamięci tego egzemplarza. Programistom, którzy mają doświadczenie w pracy ze wskaźnikami oferowanymi przez takie języki jak C++, zrozumienie mechanizmu stosowanego w Visual Basicu nie powinno sprawić najmniejszych problemów, ponieważ oba rozwiązania są bardzo podobne. Najkrócej mówiąc, zmienne typów wartościowych zawierają dane, natomiast zmienne typów referencyjnych tylko na te dane wskazują. 78 | Rozdział 4. Zmienne i typy danych Różnice pomiędzy typami wartościowymi a typami referencyjnymi powodują szereg konse- kwencji — jedną z najważniejszych jest sposób wykonywania popularnych operacji przypi- sania. Przeanalizujmy poniższą klasę, która zawiera tylko jedno pole składowe: Public Class SimpleClass Public Age As Short End Class oraz strukturę będącą odpowiednikiem tej klasy: Structure SimpleStruct Public Age As Short End Structure W przeciwieństwie do struktur, które są typami wartościowymi, klasy są typami referencyj- nymi. Poniższy kod ilustruje podstawową różnicę w korzystaniu z tej pary podobnych, ale mimo wszystko różnych typów: ----- Deklaruje cztery zmienne, po dwie dla każdego z typów. Dim refType1 As SimpleClass Dim refType2 As SimpleClass Dim valType1 As SimpleStruct Dim valType2 As SimpleStruct ----- W pierwszej kolejności skoncentrujemy się na typach referencyjnych. Przypisanie refType2 = refType1 spowoduje, że obie zmienne refType2 będą wskazywały na ten sam adres w pamięci. Od tej pory zmiany składowych zmiennej refType1 będą miały wpływ na składowe zmiennej refType2 i odwrotnie. Obie zmienne współdzielą ten sam egzemplarz. refType1 = New SimpleClass refType1.Age = 20 refType2 = refType1 refType2.Age = 30 Debug.WriteLine(refType1.Age) -- Wyświetla 30 Debug.WriteLine(refType2.Age) -- Wyświetla 30 ----- Przyjrzyjmy się teraz typom wartościowym. Przypisanie valType2 = valType1 powoduje wykonanie kopii składowych zmiennej valType1. Od tej pory zmiany składowych jednej z tych zmiennych nie będą miały wpływu na wartości składowych drugiej zmiennej. valType1 = New SimpleStruct valType1.Age = 20 valType2 = valType1 valType2.Age = 30 Debug.Writeline(valType1.Age) -- Wyświetla 20 Debug.Writeline(valType2.Age) -- Wyświetla 30 W pewnym sensie obie operacje przypisania jednej zmiennej drugiej zmiennej realizują to samo zadanie — kopiują wartość reprezentowaną przez zmienną użytą po prawej stronie do zmien- nej na lewo od operatora przypisania. Ponieważ jednak rzeczywistą wartością typu referen- cyjnego (w tym przypadku zmiennej refType1) jest adres w pamięci, właśnie adres został skopio- wany do zmiennej refType2. Ponieważ obie zmienne wskazują na ten sam obszar w pamięci (miejsce przechowywania składowych obiektu klasy SimpleClass), w praktyce zmienne ref- Type1 i refType2 współdzielą jeden zbiór składowych. Przypisanie jednej zmiennej typu wartościowego (valType1) innej zmiennej typu wartościowego (valType2) także polega na skopiowaniu wartości zmiennej użytej na prawo od operatora przy- pisania do zmiennej użytej z lewej strony tego operatora. Różnica polega na tym, że zmienna valType1 zawiera rzeczywiste składowe (nie adres miejsca ich przechowywania w pamięci). Oznacza to, że zmienna docelowa valType2 zawiera odrębną kopię tych składowych (w tym przypadku jedynej składowej Age). Typy danych | 79 Wyzerowanie zmiennej typu referencyjnego wymaga przypisania jej wartości Nothing. Typy wartościowe zawsze reprezentują jakieś wartości (nawet jeśli są to same zera), zatem w ich przypadku przypisywanie „wartości” Nothing nie jest możliwe. Wszystkie podstawowe typy danych Visual Basica, które zarządzają wartościami numerycz- nymi (czyli np. Integer oraz Double), są typami wartościowymi. Typ danych String jest co prawda przykładem typu referencyjnego, jednak z perspektywy programisty funkcjonuje dokładnie tak jak typy wartościowe. Za każdym razem gdy przypisujemy jedną zmienną łańcuchową innej, wbrew pozorom w łańcuchu docelowym nie jest zapisywana referencja do pierwszego łańcucha (jak w przypadku innych typów referencyjnych). Wynika to z faktu, że stosowana w Visual Basicu implementacja typu danych String każdorazowo (zarówno pod- czas przypisywania, jak i modyfikowania) tworzy zupełnie nowy egzemplarz oryginalnego łańcucha. Podstawowe typy danych Visual Basica: przegląd Język programowania Visual Basic począwszy od wersji 2005 implementuje wszystkie pod- stawowe typy danych platformy .NET Framework (a konkretnie wspólnego systemu typów, CTS). Okazuje się, że podstawowe typy danych oferują bardzo szeroki zakres funkcjonalności i pozwalają zarządzać niemal wszystkimi kategoriami danych. Typy danych należące do sys- temu CTS można podzielić na pięć grup (według rodzaju zarządzanych danych): Dane logiczne Pojedynczy typ danych, który obejmuje tylko jeden bit reprezentujący prawdę lub fałsz (odpowiednio True lub False). Dane znakowe Visual Basic oferuje typy danych zarządzające zarówno pojedynczymi znakami, jak i dłu- gimi łańcuchami znaków. Dane czasu i daty Pojedynczy typ danych zarządzający wartościami reprezentującymi zarówno datę, jak i godzinę. Dane zmiennoprzecinkowe Rozmaite typy danych reprezentujące wartości zmiennoprzecinkowe — każdy z tych typów zarządza ograniczonym podzbiorem liczb wymiernych. Niektóre z tych typów oferują więk- szą precyzję matematyczną od pozostałych. Dane całkowitoliczbowe Ta kategoria obejmuje wiele całkowitoliczbowych typów danych, które umożliwiają skła- dowanie liczb całkowitych należących do właściwego (zależnego od typu) przedziału (od wartości minimalnej do maksymalnej). Część typów danych całkowitoliczbowych obsłu- guje wartości ujemne. W dalszej części tego punktu przedstawimy definicje i stosowne komentarze do każdej z wy- mienionych powyżej kategorii typów danych obsługiwanych przez Visual Basic. Typ danych Boolean Podstawowe fakty Podstawowy typ .NET: System.Boolean Implementacja: Typ wartościowy (struktura) 80 | Rozdział 4. Zmienne i typy danych Ilość zajmowanej pamięci: 2 bajty Zakres wartości: True lub False Typ danych Boolean może reprezentować tylko dwie wartości (True lub False). W języku Visual Basic mamy do dyspozycji słowa kluczowe True i False, które są stosowane w roli warto- ści zmiennych typu Boolean. Zmiennym tego typu można też przypisywać wyniki dowol- nych operacji logicznych. Kiedy wartość numeryczna jest konwertowana na wartość typu Boolean, wszystkie wartości różne od zera są przekształcane w wartość True, a jedyną wartością tłumaczoną na False jest zero. W razie konwersji w drugą stronę wartość False jest zamieniana na zero, natomiast wartość True jest zamieniana na liczbę –1. (Ta część funkcjonalności odróżnia Visual Basica od pozostałych języków platformy .NET, które konwertują wartość True na 1. W Visual Basicu zastosowano w tej roli liczbę –1, aby zapewnić zgodność wstecz. W razie współdzielenia danych logicznych pomiędzy komponentami napisanymi w różnych językach platformy .NET, środo- wisko uruchomieniowe .NET Framework i tak automatycznie przekształci te wartości w spo- sób gwarantujący pełną zgodność). Typ danych Byte Podstawowe fakty Podstawowy typ .NET: System.Byte Implementacja: Typ wartościowy (struktura) Ilość zajmowanej pamięci: 1 bajt Zakres wartości: Od 0 do 255 (bez znaku) Typ danych Byte jest najmniejszym dostępnym w Visual Basicu typem całkowitoliczbowym bez znaku. Mimo bardzo niewielkiego przedziału obsługiwanych wartości zmienne typu Byte doskonale zdają egzamin podczas pracy z nieprzetworzonymi danymi binarnymi. Typ danych Char Podstawowe fakty Podstawowy typ .NET: System.Char Implementacja: Typ wartościowy (struktura) Ilość zajmowanej pamięci: 2 bajty Zakres wartości: Kody znaku z przedziału od 0 do 65535 (bez znaku) Typ danych Char reprezentuje pojedynczy, 16-bitowy znak Unicode. Wszystkie znaki w plat- formie .NET są reprezentowane właśnie za pomocą kodów 16-bitowych, co oczywiście wy- starczy do obsługi języków wymagających stosowania 2-bajtowego zbioru znaków (ang. Double- -Byte Character Set — DBCS), czyli np. języka japońskiego. Wersje Visual Basica sprzed wprowa- dzenia platformy .NET nie zawierały żadnego odpowiednika typu danych char. Stosując stałe wartości typu Char, należy do nich dołączać (za cudzysłowem zamykającym) pojedynczą literę c: Dim singleLetter As Char = A c Typy danych | 81 Zmienna łańcuchowa (typu String), która zawiera tylko jeden znak, nie jest tożsama ze zmienną typu Char zawierającą ten sam znak. Ponieważ są to dwa zupełnie różne typy, ewentualne przenoszenie danych pomiędzy zmiennymi tych typów wymaga stosownej kon- wersji (jeśli włączono opcję Option Strict). Typ danych DateTime Podstawowe fakty Podstawowy typ .NET: System.DateTime Implementacja: Typ wartościowy (struktura) Ilość zajmowanej pamięci: 8 bajtów Zakres wartości: Od 1 stycznia 1 roku n.e. do 31 grudnia 9999 roku n.e. (w kalendarzu gregoriańskim) Wartości reprezentujące daty i czas mają postać 64-bitowych, długich liczb całkowitych zgod- nych ze standardem IEEE. Za pomocą tak długich liczb można reprezentować daty z prze- działu od 1 stycznia 1 roku n.e. do 31 grudnia 9999 roku n.e. oraz godziny z przedziału od 0:00:00 do 23:59:59. Odpowiednie wartości reprezentują liczbę „tyknięć”, które upłynęły od 1 sty- cznia 1 roku n.e. Każde takie „tyknięcie” odpowiada 100 nanosekundom. Stałe daty należy umieszczać pomiędzy dwoma znakami krzyżyków (#): Dim independenceDay As Date = #7/4/1776# Typ danych Decimal Podstawowe fakty Podstawowy typ .NET: System.Decimal Implementacja: Typ wartościowy (struktura) Ilość zajmowanej pamięci: 12 bajtów Zakres wartości: +/–79 228 162 514 264 337 593 543 950 335 bez części dziesiętnej; +/–7.9228162514264337593543950335 z 28 miejscami po przecinku; najmniejsza wartość różna od zera wynosi +/–0.0000000000000000000000000001 Wartości typu danych Decimal są składowane w formie 96-bitowych liczb całkowitych ze znakiem; reprezentacja tych wartości dodatkowo obejmuje wewnętrzny (obsługiwany i sto- sowany w pełni automatycznie) współczynnik skali z przedziału od 0 do 28. Takie rozwią- zanie zapewnia wysoki poziom precyzji matematycznej w przypadku liczb należących do odpowiedniego przedziału wartości (typ Decimal szczególnie dobrze sprawdza się w przypadku danych walutowych). Na końcu wartości stałych typu Decimal należy umieszczać albo pojedynczą literę D, albo znak @: Dim startingValue As Decimal = 123.45D Dim endingValue As Decimal = 543.21@ Znak @ można stosować także do oznaczania deklarowanych zmiennych jako egzemplarzy typu Decimal: Dim startingValue@ = 123.45D 82 | Rozdział 4. Zmienne i typy danych Składowe typu danych Decimal nazwane MaxValue i MinValue reprezentują granice obsłu- giwanego przedziału wartości (odpowiednio wartość maksymalną i minimalną). W implementacjach Visual Basica sprzed wprowadzenia technologii .NET typ danych Deci- mal w praktyce nie stanowił odrębnego, autonomicznego typu danych — był podtypem typu danych Variant. Dopiero w wersjach kwalifikujących Visual Basic do rodziny języków plat- formy .NET zaimplementowano typ Decimal w formie pełnowartościowego typu danych. Typ danych Double Podstawowe fakty Podstawowy typ .NET: System.Double Implementacja: Typ wartościowy (struktura) Ilość zajmowanej pamięci: 8 bajtów Zakres wartości: Od –1.79769313486231E+308 do –4.94065645841247E-324 w przypadku liczb ujemnych; od 4.94065645841247E–324 do 1.79769313486232E+308 w przypadku liczb dodatnich Wartości typu Double są zgodne ze standardem IEEE dla 64-bitowych (8-bajtowych) liczb zmiennoprzecinkowych podwójnej precyzji ze znakiem. Mimo ogromnego przedziału obsłu- giwanych wartości, stosując typ danych Double musimy się liczyć z utratą precyzji w pew- nych obliczeniach matematycznych. Stałe egzemplarze typu danych Double należy oznaczać wielką literą R lub znakiem krzyżyka (#) dołączanym bezpośrednio po wartościach numerycznych: Dim startingValue As Double = 123.45R Dim endingValue As Double = 543.21# Znak krzyżyka (#) można stosować także do oznaczania deklarowanych zmiennych jako egzem- plarzy typu Double: Dim startingValue# = 123.45R Typ danych Int32 (Integer) Podstawowe fakty Podstawowy typ .NET: System.Int32 Implementacja: Typ wartościowy (struktura) Ilość zajmowanej pamięci: 4 bajty Zakres wartości: Od –2 147 483 648 do 2 147 483 647 Typ danych Integer umożliwia reprezentowanie 32-bitowych liczb całkowitych ze znakiem. Właśnie tyle wynosi rdzenna długość słowa w procesorach 32-bitowych, zatem stosowanie tego rodzaju wartości powinno się przekładać na nieznacznie wyższą wydajność w porówna- niu z pozostałymi typami całkowitoliczbowymi. W wersjach Visual Basica sprzed wprowadzenia platformy .NET zmienne i stałe typu Integer zajmowały tylko 16 bitów i — tym samym — mogły służyć do reprezentowania liczb całko- witych z dużo mniejszego przedziału. W wersjach języka Visual Basic wchodzących w skład rodziny języków platformy .NET dodatkowo mamy do dyspozycji typ danych Short, czyli 16-bitowy typ całkowitoliczbowy ze znakiem. Typy danych | 83 Stałe egzemplarze typu Integer można opcjonalnie oznaczać wielką literą I lub znakiem procenta ( ) dołączanym na końcu wartości numerycznej: Dim startingValue As Integer = 123I Dim endingValue As Integer = 543 Znak procenta ( ) można stosować także do oznaczania deklarowanych zmiennych jako egzem- plarzy typu Integer: Dim startingValue = 123I Typ danych Int64 (Long) Podstawowe fakty Podstawowy typ .NET: System.Int64 Implementacja: Typ wartościowy (struktura) Ilość zajmowanej pamięci: 8 bajtów Zakres wartości: Od –9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 Long jest 64-bitowym typem danych całkowitoliczbowych ze znakiem. W wersjach Visual Basica sprzed wprowadzenia platformy .NET zmienne i stałe typu Long zajmowały tylko 32 bity i tym samym mogły służyć do reprezentowania liczb całkowitych z dużo mniejszego przedziału. W wersjach języka Visual Basic wchodzących w skład rodziny języków platformy .NET mamy do dyspozycji typ danych Integer, czyli 32-bitowy typ całkowitoliczbowy ze znakiem. Stałe egzemplarze typu Long należy oznaczać wielką literą L lub znakiem dołączanym na końcu wartości numerycznej: Dim startingValue As Long = 123L Dim endingValue As Long = 543 Znak można stosować także do oznaczania deklarowanych zmiennych jako egzemplarzy typu Long: Dim startingValue = 123L Stosując znak do oznaczania stałych typu Long, w żadnym razie nie należy pozostawiać spacji pomiędzy wartością całkowitoliczbową a tym znakiem, ponieważ znak dodatkowo pełni w Visual Basicu funkcję operatora konkatenacji łańcuchów. Typ danych Object Podstawowe fakty Podstawowy typ .NET: System.Object Implementacja: Typ referencyjny (klasa) Ilość zajmowanej pamięci: 4 bajty Zakres wartości: Zmienna typu Object może reprezentować dowolny typ Object jest uniwersalnym typem danych, co oznacza, że zmienna typu Object może się odwo- ływać do danych (wskazywać na dane) dowolnego innego typu danych. Przykładowo, egzem- plarz klasy Object może wskazywać na wartość typu Long, wartość typu String lub egzem- plarz dowolnej innej klasy. Dim amazingVariable As Object amazingVariable = 123L amazingVariable = Czyż to nie wspaniałe? amazingVariable = New MyCustomClass 84 | Rozdział 4. Zmienne i typy danych Warto pamiętać, że ze stosowaniem zmiennych typu Object wiążą się pewne koszty w wy- miarze wydajności oprogramowania. Visual Basic nie może związać właściwych składowych reprezentujących dane ze zmienną typu Object w czasie kompilacji, co oznacza, że odpo- wiednie łączenie musi nastąpić w czasie wykonywania programu — to z kolei powoduje, że przetwarzanie metod związanych z tym obiektem wymaga większej ilości kodu. Opisywana technika bywa nazywana późnym wiązaniem (ang. late binding). Deklarowanie obiektów z wła- ściwymi (konkretnymi) typami danych skutkuje wczesnym wiązaniem (ang. early binding), ponieważ za zarządzanie związkami wszystkich składowych odpowiada kompilator. Przy- kładowo, poniższy fragment kodu: Dim lateBound As Object . . . lateBound = New MyCustomClass lateBound.SomeMethod( ) wymusi na aplikacji dopasowanie zmiennej lateBound do składowej SomeMethod klasy MyCu- stomClass w czasie wykonywania. Przedstawione rozwiązanie jest więc dużo mniej wydajne od mechanizmu zastosowanego poniżej: Dim earlyBound As MyCustomClass . . . earlyBound = New MyCustomClass earlyBound.SomeMethod( ) W wersjach języka Visual Basic sprzed wprowadzenia technologii .NET programista miał do dyspozycji funkcję VarType, która identyfikowała konkretny podtyp wartości typu Variant. Okazuje się, że funkcja VarType istnieje także w kolejnych wersjach Visual Basica .NET i służy do identyfikacji faktycznych typów zmiennych lub wartości. Klasa System.Object (i klasy potomne, czyli wszystkie klasy w technologii .NET) dodatkowo udostępnia metodę GetType, która zwraca informację o prawdziwym typie danego obiektu. Chociaż wymienione rozwią- zania można stosować dla dowolnych typów danych, ich przydatność jest szczególnie widoczna właśnie w przypadku obiektów typu Object. Typ danych SByte Podstawowe fakty Podstawowy typ .NET: System.SByte Implementacja: Typ wartościowy (struktura) Ilość zajmowanej pamięci: 1 bajt Zakres wartości: Od —128 do 127 Nowość w wersji 2005. SByte jest najmniejszym typem danych całkowitoliczbowych ze zna- kiem obsługiwanym przez Visual Basica. Typ SByte jest więc odpowiednikiem opisanego wcze- śniej typu danych Byte (bez znaku) obejmującym znak. SByte jest jednym z czterech typów danych dodanych do języka programowania Visual Basic w wydaniu z roku 2005, które nie są wymienione w minimalnej specyfikacji wspólnego języka (CLS). W związku z tym, komponenty i aplikacje zbudowane według zaleceń tego minimal- nego standardu mogą nie być kompatybilne z aplikacjami wykorzystującymi ten typ danych. Typy danych | 85 Typ danych Int16 (Short) Podstawowe fakty Podstawowy typ .NET: System.Int16 Implementacja: Typ wartościowy (struktura) Ilość zajmowanej pamięci: 2 bajty Zakres wartości: Od —32768 do 32767 Short jest 16-bitowym typem danych całkowitoliczbowych ze znakiem. W wersjach języka Visual Basic sprzed wprowadzenia technologii .NET funkcję 16-bitowego typu całkowitolicz- bowego ze znakiem pełnił inny typ danych, Integer; typ danych Short w ogóle nie wystę- pował w tamtych wydaniach Visual Basica. Stałe egzemplarze typu Short należy oznaczać wielką literą S dołączaną na końcu wartości numerycznej: Dim startingValue As Short = 123S Typ danych Single Podstawowe fakty Podstawowy typ .NET: System.Single Implementacja: Typ wartościowy (struktura) Ilość zajmowanej pamięci: 4 bajty Zakres wartości: Od –3.402823E+38 do –1.401298E–45 w przypadku liczb ujemnych; od 1.401298E–45 do 3.402823E+38 w przypadku liczb dodatnich Wartości typu Single są zgodne ze standardem IEEE dla 32-bitowych (4-bajtowych) liczb zmiennoprzecinkowych pojedynczej precyzji ze znakiem. Mimo stosunkowo dużego prze- działu obsługiwanych wartości, stosując typ danych Single, musimy się liczyć z utratą precyzji w pewnych obliczeniach matematycznych. Stałe egzemplarze typu danych Single należy oznaczać wielką literą F lub znakiem wykrzyk- nika (!) dołączanym bezpośrednio po wartościach numerycznych: Dim startingValue As Single = 123.45F Dim endingValue As Single = 543.21! Znak wykrzyknika (!) można stosować także do oznaczania deklarowanych zmiennych jako egzemplarzy typu Single: Dim startingValue! = 123.45F Typ danych String Podstawowe fakty Podstawowy typ .NET: System.String Implementacja: Typ referencyjny (klasa) Ilość zajmowanej pamięci: 10 + (2 * długość_łańcucha) bajtów Zakres wartości: Od zera do około dwóch miliardów znaków Unicode Typ danych String umożliwia reprezentowanie łańcuchów znakowych zmiennej długości złożonych maksymalnie z około dwóch miliardów znaków. 86 | Rozdział 4. Zmienne i typy danych Wszystkie łańcuchy w technologii .NET są niezmienne (ang. immutable). Oznacza to, że warto- ści raz przypisanej zmiennej łańcuchowej nie można zmieniać. Kiedy modyfikujemy zawartość łańcucha, typ danych String zwraca nowy egzemplarz uwzględniający wprowadzone zmiany. Zmienna String zawierająca pojedynczy znak nie jest tożsama ze zmienną typu Char zawie- rającą ten sam pojedynczy znak. Ponieważ są to dwa zupełnie różne typy, ewentualne prze- noszenie danych pomiędzy zmiennymi tych typów wymaga stosownej konwersji (jeśli włą- czono opcję Option Strict). Typ danych UInt32 (UInteger) Podstawowe fakty Podstawowy typ .NET: System.Int32 Implementacja: Typ wartościowy (struktura) Ilość zajmowanej pamięci: 4 bajty Zakres wartości: Od 0 do 4 294 967 295 (bez znaku) Nowość w wersji 2005. UInteger jest 32-bitowym typem danych całkowitoliczbowych bez znaku. Typ UInteger jest więc odpowiednikiem bez znaku opisanego wcześniej typu danych Integer (ze znakiem). UInteger jest jednym z czterech typów danych dodanych do języka programowania Visual Basic w wydaniu z roku 2005, które nie są wymienione w minimalnej specyfikacji wspólnego języka (CLS). W związku z tym, komponenty i aplikacje zbudowane według zaleceń tego minimalnego standardu mogą nie być kompatybilne z aplikacjami wykorzystującymi ten typ danych. Typ danych UInt64 (ULong) Podstawowe fakty Podstawowy typ .NET: System.Int64 Implementacja: Typ wartościowy (struktura) Ilość zajmowanej pamięci: 8 bajtów Zakres wartości: Od 0 do 18 446 744 073 709 551 615 (bez znaku) Nowość w wersji 2005. ULong jest 64-bitowym typem danych całkowitoliczbowych bez zna- ku. Typ ULong jest więc odpowiednikiem bez znaku opisanego wcześniej typu danych Long (ze znakiem). ULong jest jednym z czterech typów danych dodanych do języka programowania Visual Basic w wydaniu z roku 2005, które nie są wymienione w minimalnej specyfikacji wspólnego języka (CLS). W związku z tym, komponenty i aplikacje zbudowane według zaleceń tego minimal- nego standardu mogą nie być kompatybilne z aplikacjami wykorzystującymi ten typ danych. Typ danych UInt16 (UShort) Podstawowe fakty Podstawowy typ .NET: System.Int64 Implementacja: Typ wartościowy (struktura) Ilość zajmowanej pamięci: 2 bajty Zakres wartości: Od 0 do 65535 (bez znaku) Typy danych | 87 Nowość w wersji 2005. UShort jest 16-bitowym typem danych całkowitoliczbowych bez znaku. Typ UShort jest więc odpowiednikiem bez znaku opisanego wcześniej typu danych Short (ze znakiem). UShort jest jednym z czterech typów danych dodanych do języka programowania Visual Basic w wydaniu z roku 2005, które nie są wymienione w minimalnej specyfikacji wspólnego języka (CLS). W związku z tym, komponenty i aplikacje zbudowane według zaleceń tego minimal- nego standardu mogą nie być kompatybilne z aplikacjami wykorzystującymi ten typ danych. Typy danych definiowane przez użytkownika Chociaż pojedyncze zmienne w zdecydowanej większości przypadków zaspokajają potrzeby programistów, nierzadko bardziej efektywnym rozwiązaniem jest łączenie wielu podstawowych wartości danych w ramach logicznych grup. Te niestandardowe typy danych (definiowane przez użytkownika) rozszerzają zbiór podstawowych typów danych o nowe typy dostosowane do potrzeb konkretnych programów. Wersje języka Visual Basic sprzed wprowadzenia technologii .NET oferowały możliwość two- rzenia typów danych definiowanych przez użytkownika za pośrednictwem wyrażenia Type. Budowane w ten sposób struktury danych były zwykłymi grupami zmiennych pozbawio- nymi jakiejkolwiek funkcjonalności (oczywiście poza możliwością ustawiania i odczytywania wartości reprezentowanych w poszczególnych składowych). W wydaniach Visual Basica wchodzących w skład platformy .NET Framework znacznie rozszerzono tego rodzaju mechani- zmy, implementując możliwość definiowania kodu zarówno we wspomnianych strukturach danych, jak i podstawowych elementach platformy .NET. Typy znane z Visual Basica 6 zastą- piono konstrukcjami powszechnie stosowanymi w technologii .NET — strukturami (definio- wanymi ze słowem kluczowym Structure). Podstawową konstrukcją gromadzącą kod i dane w platformie .NET jest klasa. Klasy pod wieloma względami przypominają struktury, ale są wolne od pewnych ograniczeń, które dotyczą wyłącznie struktur. Bodaj najważniejszą różnicą dzielącą struktury od klas jest to, że w przeciwieństwie do klas (które implementują typy referencyjne), struktury implementują typy wartościowe (dziedziczące bezpośrednio po typie System.ValueType). Aby zadeklarować strukturę, należy użyć wyrażenia Structure: [Public|Private|Friend] Structure structureName deklaracje składowych End Structure Składowymi struktury mogą być pola, właściwości, metody, zdarzenia dzielone, typy wylicze- niowe oraz inne, zagnieżdżone struktury. Każda ze składowych musi zostać zadeklarowana z jednym z trzech modyfikatorów dostępu: Public, Private lub Friend. Najprostszym i najczęściej spotykanym zastosowaniem struktur jest grupowanie wzajemnie powiązanych zmiennych (nazywanych polami). Przykładowo, w naszym programie możemy korzystać z prostej struktury definiującej podstawowe informacje o jednej osobie: Structure Person Public Name As String Public Address As String Public City As String Public State As String Public Zip As String Public Age As Short End Structure 88 | Rozdział 4. Zmienne i typy danych Poniżej przedstawiono standardową deklarację definiującą zmienną typu Person: Dim onePerson As Person Dostęp do składowych struktury wymaga użycia standardowej składni „z kropką”, która jest stosowana także w przypadku składowych klas: onePerson.Name = Beethoven Bardziej złożone struktury mogą zawierać zarówno proste pola składowe, jak i właściwości: Public Structure NameAndState ----- Pola publiczne i prywatne. Public Name As String Private theState As String Public Function ShowAll( ) As String ----- Metoda publiczna. Wyświetla wszystkie składowane wartości. If (theState = ) And (Name = ) Then Return No Name from Nowhere ElseIf (theState = ) Then Return Name from Nowhere ElseIf (Name = ) Then Return No Name from theState Else Return Name from theState End If End Function Public Property State( ) As String ----- Właściwość publiczna. Ogranicza zbiór wartości reprezentujących stany. Get Return theState End Get Set(ByVal value As String) If (Len(value) = 2) Then theState = UCase(value) Else Throw New System.ArgumentException( _ Stan musi być reprezentowany przez dwa znaki. , State ) End If End Set End Property End Structure Egzemplarze tej struktury mogą być od tej pory tworzone i wykorzystywane dokładnie tak jak egzemplarze klas: Dim onePerson As New NameAndState onePerson.Name = Donna onePerson.State = CA MsgBox(onePerson.ShowAll()) Struktury mogą być przekazywane na wejściu funkcji w formie argumentów lub wykorzysty- wane w roli typów zwracanych przez funkcje. Chociaż struktury pod wieloma względami przy- pominają klasy, nie obsługują szeregu rozwiązań znanych z klas: • Struktury nie mogą ani dziedziczyć po innych strukturach, ani same nie mogą być dzie- dziczone. • Wszystkie konstruktory struktur muszą pobierać parametry wejściowe. • Struktury nie mogą definiować destruktorów (metoda Finalize i tak nigdy nie jest wy- woływana). Typy danych | 89 • Deklaracje składowych nie mogą inicjalizować ich wartości, stosować konstrukcji skład- niowej As New ani określać początkowego rozmiaru tablic. Szczegółowe omówienie terminologii programowania można znaleźć w rozdziale 3. Konwersja typów danych Proces konwersji wartości jednego typu na wartość innego typu nazywamy rzutowaniem (ang. casting) lub po prostu konwersją. Techniki konwersji mogą być stosowane dla wartości sta- łych, zmiennych lub wyrażeń określonego typu. Język programowania Visual Basic oferuje szereg funkcji konwertujących, które rzutują wartości jednego typu danych do postaci ich odpo- wiedników innego typu danych: Dim miniSize As Byte = 6 Dim superSize As Long superSize = CLng(miniSize) Konwertuje wartość zmiennej typu Byte na wartość typu Long. superSize = CLng( 12 ) Konwertuje stałą typu String na wartość typu Long. Rzutowania mogą mieć charakter działań rozszerzających lub zawężających. Rzutowanie rozszerzające (ang. widening cast) ma miejsce wtedy, gdy docelowy typ danych może z powo- dzeniem reprezentować wszystkie możliwe wartości typu źródłowego (z taką sytuacją mamy do czynienia np. wtedy, gdy konwertujemy wartość typu Short na wartość typu Integer lub wartość typu Integer na wartość typu Double). Rzutowanie rozszerzające nigdy nie powoduje utraty danych. Rzutowanie zawężające (ang. narrowing cast) polega na konwersji oryginal- nego typu danych na typ, który nie może reprezentować wszystkich możliwych danych typu źródłowego. Rzutowanie zawężające może prowadzić do utraty części danych lub wręcz błędu konwersji. Konwersje typów w Visual Basicu mogą być realizowane na dwa sposoby: jawnie (wprost) lub w ukryciu. Konwersja niejawna (ang. implicit conversion) jest realizowana przez kompilator, jeśli okoliczności na to pozwalają (i jeśli samo rzutowanie jest prawidłowe). Przykładowo, jeśli umieścimy w naszej aplikacji następującą sekwencję wyrażeń: Dim smallerData As Integer = 3948 Dim largerData As Long largerData = smallerData wartość zmiennej smallerData automatycznie zostanie rzutowana do większego typu danych Long (wykorzystywanego przez zmienną largerData). Ten rodzaj konwersji niejawnej po części jest uzależniony od ustawienia wyrażenia Option Strict. Wyrażenie Option Strict powinno się znajdować na samym początku pliku z kodem źródłowym (przed właściwym kodem klasy): Option Strict {On | Off} Jeśli opcja Option Strict jest włączona (On), kompilator będzie automatycznie wykonywał tylko rzutowania rozszerzające, co oznacza, że takie rzutowania zawężające jak: Dim smallerData As Integer Dim largerData As Long = 3948 smallerData = largerData spowodują wygenerowanie błędów kompilacji (nawet jeśli faktycznie konwertowane dane mogą być bez trudu reprezentowane przez typy zmiennych docelowych). Oznacza to, że należy zasto- sować konwersję jawną (ang. explicit conversion): smallerData = CInt(largerData) 90 | Rozdział 4. Zmienne i typy danych Ustawiając wartość Off w opcji Option Strict, zezwalamy na stosowanie techniki konwersji niejawnej nawet wtedy, gdy może to prowadzić do występowania błędów w czasie wykony- wania programu. Oprócz wspomnianej opcji Option Strict, Visual Basic oferuje też wyrażenie Option Explicit, które również powinno być stosowane na początku plików z kodem źródłowym: Option Explicit {On | Off} Kiedy opcja Option Explicit jest włączona (On), wszystkie zmienne muszą być deklarowane (za pomocą słowa kluczowego Dim lub innego, podobnego) przed użyciem. Kiedy opcja Option Explicit jest wyłączona (Off), kompilator Visual Basica automatycznie doda (w czasie kompila- cji) niezbędne deklaracje dla wszystkich nazw napotkanych zmiennych, które nie zostały wcześniej zadeklarowane. (Nowe wyrażenia Dim nie zostaną umieszczone w naszym kodzie źródłowym — niezbędne deklaracje zostaną dodane „po cichu” w czasie kompilacji). Wyłą- czenie tej opcji może prowadzić do występowania w programie trudnych do zlokalizowania błędów. Więcej informacji na ten temat można znaleźć w podrozdziale „Wyrażenie Option Explicit” w rozdziale 12. Wartości domyślne obu opcji (Option Strict oraz Option Expli- cit) można ustawić we właściwościach projektu. Język Visual Basic zawiera funkcje konwertujące dla wszystkich podstawowych typów danych. Funkcja CBool Konwertuje dowolny prawidłowy łańcuch lub wyrażenie numeryczne na wartość typu Boolean. Kiedy wartość numeryczna jest konwertowana na wartość typu Boolean, wszyst- kie liczby różne od zera są zamieniane na True i tylko zero jest zamieniane na False. Funkcja CByte Konwertuje dowolne wyrażenie numeryczne (którego wartość należy do przedziału obsłu- giwanego przez typ danych Byte) na wartość typu Byte, zaokrąglając ewentualną część ułamkową. Funkcja CChar Konwertuje pierwszy znak łańcucha na wartość typu danych Char. Funkcja CDate Konwertuje dowolną prawidłową reprezentację daty lub godziny na egzemplarz typu Date. Funkcja CDbl Konwertuje dowolne wyrażenie numeryczne (którego wartość należy do przedziału obsłu- giwanego przez typ danych Double) na wartość typu Double. Funkcja CDec Konwertuje dowolne wyrażenie numeryczne (którego wartość należy do przedziału obsłu- giwanego przez typ danych Decimal) na wartość typu Decimal. Funkcja CInt Konwertuje dowolne wyrażenie numeryczne (którego wartość należy do przedziału obsłu- giwanego przez typ danych Integer) na wartość typu Integer, zaokrąglając ewentualną część ułamkową. Funkcja CLng Konwertuje dowolne wyrażenie numeryczne (którego wartość należy do przedziału obsłu- giwanego przez typ danych Long) na wartość typu Long, zaokrąglając ewentualną część ułamkową. Typy danych | 91 Funkcja CObj Konwertuje dowolne wyrażenie na egzemplarz typu Object. Takie rozwiązanie jest uza- sadnione w sytuacji, gdy chcemy, aby typ wartościowy był traktowany jak typ referen- cyjny. Funkcja CSByte Nowość w wersji 2005. Konwertuje dowolne wyrażenie numeryczne (którego wartość nale- ży do przedziału obsługiwanego przez typ danych SByte) na wartość typu SByte, zaokrą- glając ewentualną część ułamkową. Funkcja CShort Konwertuje dowolne wyrażenie numeryczne (którego wartość należy do przedziału obsłu- giwanego przez typ danych Short) na wartość typu Short, zaokrąglając ewentualną część ułamkową. Funkcja CSng Konwertuje dowolne wyrażenie numeryczne (któ
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Visual Basic 2005. Almanach
Autor:
, , ,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: