MATERIAŁY DO ZAJĘĆ II Zmienne w C# Spis treści I. Definicja zmiennej II. Hierarchia typów (CTS) III. Typy wbudowane IV. Deklaracja zmiennych V. Literały VI. Pobieranie i wypisywanie wartości zmiennych VII. Typ wartości VIII. Typ wyliczeniowy IX. Typ referencyjny X. Konwersja typów Definicja zmiennej 1. Hierarchia typów 2. Typy wbudowane 3. Deklaracja zmiennych 4. Literały 5. Pobieranie i wypisywanie wartości zmiennych 6. Typ wartości 7. Typ referencyjny 8. Konwersja typów XI. XII. Właściwości operatorów 1
Hierarchia typów (CTS) Typy wbudowane Specyfikacja która określa w jaki sposób środowisko uruchomieniowe (CLR) definiuje i używa typy oraz jak nimi zarządza. byte od 0 do 255 1 bajt sbyte od -128 do 127 1 bajt short od -32768 do 32767 2 bajty ushort od 0 do 65535 2 bajty int od -2147483648 do 2147483647 4 bajty uint od 0 do 4294967295 4 bajty long od -9223372036854775808 do 9223372036854775807 8 bajtów ulong od 0 do 18446744073709551615 8 bajów bool true lub false 1 bajt float liczby rzeczywiste (pojedyncza precyzja) 4 bajty double liczby rzeczywiste (podwójna precyzja) 8 bajtów decimal 28 cyfr znaczących 12 bajtów object typ bazowy dla wszystkich innych typów char 0 and 65535 (Unicody) 2 bajty string kolekcja/łańcuch znaków Deklaracja zmiennych typ nazwa[=wyrażenie] [,nazwa_n[=wyrażenie_n] ]; int a; int a = 10, b = 20, c; Nawa identyfikator zmiennej: Może zawierać litery, cyfry i znak podkreślenia nie może rozpoczynać się od cyfry musi być unikalna w danym bloku kodu nie może być słowem kluczowym 2
Literały Stałe logiczne true; false; Stałe całkowite dziesiętne: 0; -45; 564; szesnastkowe: 0xBF; -0x2A; sufiksy: u, l, ul Stałe rzeczywiste 1.2; 1.4e4;.56; 6f; -1.6e-10; sufiksy: f, d, m Stałe znakowe: 'a'; 'A'; '0'; '\''; '\\'; Stałe napisowe: "Napis"; "\"Napis w cudzysłowiu\""; @"C:\Windows"; Stałe nazwane - const const double PI = 3.141592; Pobieranie i wypisywanie wartości zmiennych Pobieranie int a; string s = Console.ReadLine(); a = Convert.ToInt32(s); lub krócej a = Convert.ToInt32(Console.ReadLine()); Wypisywanie Console.WriteLine(s); Formatowanie String::Format("Tekst {0,10:C} tekst",x); Console::WriteLine("Tekst {0,10:C} tekst",x); Ogólna postać: {index[,n][:symbol]} Typ wartości Typy wbudowane (int, double, char...) Typy wyliczeniowy (enum nazwa {warosci, }) Struktury Zmienne lokalne przechowywane na stosie Przed użyciem zmienna musi być zainicjalizowana (nie mogą być null) Operacja na jednej zmiennej nie wpływa na drugą, każda zmienna posiada własną kopię danych Dostęp do zmiennej lokalnej oraz jej czas życia jest od miejsca zadeklarowania do końca bloku w którym została zadeklarowana Typ wyliczeniowy Definicja typu wyliczeniowego enum DniRobocze { Poniedzialek, Wtorek, Sroda, Czwartek, Piatek } Użycie typu wyliczeniowego DniRobocze dnienpracy = DniRobocze.Poniedziałek; Wypisanie wartości typu wyliczeniowego Console.WriteLine("Pierwszy dzień pracy w tygodniu to: {0}", dzienpracy); 3
Typ referencyjny Typy wbudowane: string, object Tablice, Klasy, Interfejsy Zmienna zawiera referencję do obiektu, a nie zawiera danych Dane (obszar pamięci) do których odwołuje się zmienna nazywamy obiektem Obiekty przechowywane są na zarządzanej stercie Zmienne mogą nie odwoływać się do obiektu, mogą posiadać wartość null Operacja na jednej zmiennej może zmieć dane innej zmiennej, zmienne odwołują się do tych samych obiektów Obiekty tworzymy słowem new Czas życia obiektu jest zarządzany przez proces automatycznego odzyskiwania pamięci (garbage collection) string s1 = "Ala ma kota"; string s2 = s1; s1 i s2 znajdują się na stosie, a obiekt zawierający napis "Ala ma kota" jest umieszczony na zarządzanej stercie Konwersja typów Konwersje niejawne (implicit) short a = 10; int b = a; Konwersje jawne (explicit) long a = 9; int b = (int)a; Opakowanie (boxing) utworzenie na zarządzanej stercie kopi zmiennej typu wartości i zwrócenie do tej kopi uchwytu (referencji) int i = 5; object o = i; //opakowanie... int a = (int)o; //rozpakowanie Arytmetyczne : + - * / % Łączenie stringów: + Relacyjne: ==!= < > <= >= Przesunięcia: << >> Logiczne i bitowe: & ^ ~! && true false Inkrementacji i dekrementacji: ++ -- Przypisania: = += -= *= /= %= &= = ^= <<= >>= Plus (minus) jednoargumentowy: + - Dostęp do składowej:. Wyrażenie warunkowe:?: Tworzenie obiektu: new Rzutowania: () Kontrola przepełnienia: checked unchecked Indeksowania: [] Informacje o typie: as is sizeof typeof Operacje na wskaźnikach (adresach): * -> [] & 4
Właściwości operatorów Priorytet operatorów Liczba argumentów Priorytet - kolejność działań Łączność Typ argumentów Kategoria podstawowe jednoargumentowe multiplikatywne * / % addytywne + - przesunięcia << >> relacji równości ==!= koniunkcji (AND) różnicy symetrycznej (XOR) alternatywy (OR) koniunkcji (AND - logiczne) alternatywy (OR -logiczne) Warunkowy?: Przypisania (x) x.y f(x) a[x] x++ x-- new typeof sizeof checked unchecked + -! ~ ++x --x (T)x < > <= >= is as & ^ && = *= /= %= += - = << >>= &= ^= = 5