Wydział Elektroniki Kierunek: AiR
description
Transcript of Wydział Elektroniki Kierunek: AiR
Wydział ElektronikiKierunek: AiR
Zaawansowane metody programowania
Wykład 2
Zaawansowane metody programowaniaC# - Typy i zmienne
• Typy zmiennych w C#:– wartościowy (value type, typ bezpośredni)– referencyjny (reference type, odwołania do danych będących
obiektami)• W przypadku typów referencyjnych dwie zmienne mogą
odwoływać się do tego samego obiektu.• Wniosek: operacje przeprowadzane na jednej zmiennej mają
wpływ na obiekt, do którego odwołuje się inna zmienna.• W przypadku typów wartościowych każda zmienna
przechowuje swoją własną kopię danych i nie może się zdarzyć, że operacje wykonywane na jednej zmiennej oddziałują na inną.
• Wymaga to zmiany przyzwyczajeń z języka C++.• Typy wartościowe dzielą się na typy proste, typy
wyliczeniowe, struktury i typy dopuszczające wartość pustą (ang. nullable types).
• Typy referencyjne dzielą się na klasy, interfejsy, tablice i delegacje.
Język C#Podstawowe informacje na temat typów
• Typy wartościowe– 'Typy proste
• Całkowite ze znakiem: sbyte, short, int, long• Całkowite bez znaku: byte, ushort, uint, ulong• Znaki Unicode: char• Zmiennoprzecinkowe IEEE: float, double• Dziesiętne wysokiej precyzji: decimal• Boole'owskie: bool
– Typy wyliczeniowe: Definiowane przez użytkownika w postaci enum E {...}
– Struktury: Definiowane przez użytkownika w postaci struct S {...}– Typy dopuszczające wartość pustą: Rozszerzenia wszystkich innych
typów wartościowych o wartość null• Typy referencyjne
– Klasy• Ostateczna klasa bazowa wszystkich innych typów: object• Łańcuchy Unicode: string• Definiowane przez użytkownika w postaci class C {...}
– Interfejsy: Definiowane przez użytkownika w postaci interface I {... }
– Tablice: Jedno- i wielowymiarowe, na przykład int [] i int [,]– Delegacje: Definiowane przez użytkownika, np. delegate int D (...)
Język C#Typy liczbowe
Kategoria Bity
Typ Zakres i precyzja
Całkowite ze znakiem 8 sbyte -128 127
16 short -32 768 32 767
32 int -2 147 483 648 2 147 483 647
64 long -9 223 372 036 854 775 808 9 223 372 036 854 775 807
Całkowite bez znaku 8 byte 0 255
16 ushort 0 65 535
32 uint 0 4 294 967 295
64 ulong 0 18 446 744 073 709 551 615
Zmiennoprzecinkowe 32 float 1,510-45 3,41038, precyzja: 7
64 double 510-324 1,710308, precyzja: 15
Dziesiętne 128 decimal 10-28 7,91028, precyzja: 28
Język C#Podstawowe informacje o typach, c.d.
• W celu utworzenia nowych typów stosuje się deklaracje typów (type declarations). Deklaracja typu określa jego nazwę oraz składowe.
• Pięć kategorii typów języka C# może być definiowanych przez użytkownika: – klasy (R – referencyjny), – struktury (W – wartościowy), – interfejsy (R), – typy wyliczeniowe (W) i – delegacje (R).
• Klasy umożliwiają pojedyncze dziedziczenie i polimorfizm• Wybór pojedynczego zamiast wielokrotnego dziedziczenia klas
eliminuje mnóstwo niebezpieczeństw, które występują w językach obsługujących dziedziczenie po wielu klasach bazowych.
• Struktury w przeciwieństwie do klas są typami wartościowymi i nie wymagają alokacji na stercie.
• Struktury nie umożliwiają dziedziczenia określonego przez użytkownika, wszystkie domyślnie dziedziczą po typie object.
Język C#Podstawowe informacje o typach, c.d. 2
• Interfejs definiuje nazwany zbiór publicznych funkcji składowych. • Klasa lub struktura implementująca interfejs musi zapewnić
implementacje wszystkich tych funkcji. • Interfejs może dziedziczyć po wielu interfejsach bazowych, a klasa
lub struktura może implementować wiele różnych interfejsów.• Typ wyliczeniowy jest osobnym typem korzystającym z nazwanych
stałych. Każdy typ wyliczeniowy ma swój typ podstawowy, którym musi być jeden z ośmiu typów całkowitych.
• Zbiór wartości typu wyliczeniowego jest taki sam jak zbiór wartości typu leżącego u jego podstaw.
• Delegacja reprezentuje odwołania do metod mających określoną listę parametrów i konkretny typ wartości zwracanej.
• Delegacje umożliwiają traktowanie metod jakby były jednostkami, które można przypisywać do zmiennych i przesyłać w postaci parametrów. Delegacje są podobne do wskaźników do funkcji.
• Delegacje są mechanizmem obiektowym i zapewniają bezpieczeństwo typów.
Język C#Tablice i typy dopuszczające wartość
pustą• Język C# oferuje możliwość korzystania z tablic jedno-
i wielowymiarowych dowolnego typu. • W przeciwieństwie do typów wymienionych wcześniej użycie
tablic nie wymusza ich wcześniejszego zadeklarowania. • Tablice są tworzone poprzez podanie nazwy typu oraz
nawiasów kwadratowych. Na przykład:– int [] - jednowymiarowa tablica wartości int, – int [,] - dwuwymiarowa tablica int, – int [][] - jednowymiarowa tablica składającą się z
jednowymiarowych tablic elementów typu int.• Typy dopuszczające wartość pustą również nie muszą być
deklarowane, aby mogły być użyte. • Dla każdego typu niedopuszczającego wartości pustej T
istnieje odpowiedni typ dopuszczający tę wartość T?, który zezwala na stosowanie dodatkowej wartości null.
• Na przykład: typ int? to typ, którego zmienne mogą przechowywać 32-bitowe wartości całkowite lub wartość null.
Język C#Wyrażenia i operatory
• Wyrażenia (expressions) składają się z operandów (argumentów) i operatorów.
• Operatory wyrażenia określają, jakie operacje mają być przeprowadzane w stosunku do operandów.
• Przykładami operatorów mogą być +, -, *, / oraz new. • Przykładami operandów są literały, pola, zmienne lokalne i
wyrażenia.• Gdy wyrażenie zawiera wiele operatorów, ich priorytety
określają kolejność wykonywania poszczególnych działań. • Większość operatorów może być przeładowywana
(overloaded). • Przeładowywanie operatorów umożliwia definiowanie przez
użytkownika implementacji operatorów w przypadku działań przeprowadzanych w sytuacji, gdy jeden z operandów lub obydwa operandy są obiektami zdefiniowanej przez użytkownika klasy lub struktury.
• Następne slajdy: operatory języka C# ułożone w kolejności od najwyższego do najniższego priorytetu.
Język C#Operatory - Kategoria: Podstawowe
Wyrażenie Opis
x.M Dostęp do składowej
x (…) Wywołanie metody i delegacji
x [...] Dostęp do tablicy i indeksatora
x++ Postinkrementacja
x-- Postdekrementacja
new T (...) Tworzenie obiektu i delegacji
new T(...) {...} Tworzenie obiektu z inicjalizatorem
new {...} Inicjalizator obiektu anonimowego
new T [...] Tworzenie tablicy
typeof (T) Uzyskiwanie obiektu System.Type dla T
checked (x) Obliczanie wyrażenia w kontekście sprawdzonym
unchecked (x) Obliczanie wyrażenia w kontekście niesprawdzonym
default (T) Uzyskiwanie standardowej wartości typu T
delegate {...} Funkcja anonimowa (metoda anonimowa)
Język C#Operatory – c.d. 1
Wyrażenie Opis
Kategoria: Jednoargumentowe
+x Identyczność
-x Negacja
!x Negacja logiczna
~x Negacja bitowa
++x Preinkrementacja
--x Predekrementacja
(T)x Jawna konwersja x na typ T
Kategoria: Multiplikatywne
x*y Mnożenie
x/y Dzielenie
X%y Reszta z dzielenia
Język C#Operatory – c.d. 2
Wyrażenie Opis
Kategoria: Addytywne
x + y Dodawanie, konkatenacja łańcuchów, kombinacja delegacji
x - y Odejmowanie, usuwanie delegacji
Kategoria: Przesunięcie
x << y Przesunięcie w lewo
x >> y Przesunięcie w prawo
Kategoria: Operatory relacji i testowania typów
x < y Mniejszy niż
x > y Większy niż
x <= y Mniejszy niż lub równy
x >= y Większy niż lub równy
x is T Zwraca wartość true, jeśli x jest typu T, w innym przypadku false
x as T Zwraca wartość x rzutowaną na T lub null, jeśli x nie jest typu T
Język C#Operatory – c.d. 3
Wyrażenie Opis
Kategoria: Równości
x == y Równość
x != y Nierówność
Kategoria: Logiczne AND
x & y Całkowite bitowe AND, boole'owskie logiczne AND
Kategoria: Logiczne XOR
x ^ y Całkowite bitowe XOR, boole'owskie logiczne XOR
Kategoria: Logiczne OR
x | y Całkowite bitowe OR, boole'owskie logiczne OR
Kategoria: Warunkowe AND
x && y Obliczanie y tylko, jeśli x ma wartość true
Kategoria: Warunkowe OR
x || y Obliczanie y tylko, jeśli x ma wartość false
Język C#Operatory – koniec
Wyrażenie Opis
Kategoria: Łączenie wartości null
x ?? y Wynikiem jest y, jeśli x ma wartość null, w innym przypadku x
Kategoria: Warunkowe
x ? y : z Wynikiem jest y, jeśli x ma wartość true, lub z, jeżeli x ma wartość false
Kategoria: Przypisanie lub funkcja anonimowa
x = y Przypisanie
x op= y Złożone przypisanie. Obsługiwane operatory: *=, /=, %=, +=, -=, <<=, >>=, &=, ^= oraz |=
(T x) => y Funkcja anonimowa (wyrażenie lambda)
Język C#Instrukcje
• Działania wykonywane przez program są zapisywane w postaci instrukcji (statements). Język C# umożliwia stosowanie kilku rodzajów instrukcji, z których część jest definiowana jako instrukcje osadzone.
• Blok (block) umożliwia zapisanie wielu instrukcji w kontekście, w którym dopuszczalne jest zastosowanie pojedynczej instrukcji. Blok zawiera listę instrukcji umieszczonych pomiędzy nawiasami klamrowymi { i }.
• Instrukcje deklaracji (declaration statements) są wykorzystywane w celu zadeklarowania zmiennych lokalnych i stałych.
• Instrukcje wyrażeń (expression statements) są używane do obliczania wartości wyrażeń.
• Instrukcje selekcji (selection statements) są wykorzystywane do wybierania jednej z wielu możliwych instrukcji do wykonania
na podstawie wartości pewnego wyrażenia. Do grupy tej należą instrukcje if oraz switch.
Język C#Instrukcje, c.d.
• Instrukcje iteracji (iteration statements) są używane w celu wielokrotnego wykonywania zagnieżdżonej instrukcji. Do instrukcji tego typu należą while, do, for oraz foreach.
• Instrukcje skoków (jump statements) są stosowane do przenoszenia sterowania. Do tej grupy należą instrukcje break, continue, goto, throw, return i yield.
• Instrukcja try...catch jest używana do przechwytywania wyjątków, które pojawiają się podczas wykonywania bloku. Instrukcja try...finally jest wykorzystywana do określania kodu zakończenia, który jest wykonywany zawsze, niezależnie od tego, czy wyjątek wystąpi, czy też nie.
• Instrukcje checked i unchecked są stosowane w celu kontrolowania kontekstu sprawdzania przepełnienia dla operacji arytmetycznych typu całkowitego i konwersji.
• Instrukcja lock jest używana do uzyskiwania blokady wyłączania wzajemnego dla danego obiektu, wykonania instrukcji, a następnie zwolnienia blokady.
• Instrukcja using jest stosowana w celu uzyskania dostępu do zasobu, wykonania instrukcji, a następnie zwolnienia tego zasobu.
Instrukcje języka C#Przykłady użycia
Deklaracja zmiennej lokalnej
static void Main() {
int a;
int b=2, c=3;
a= 1;
Console.WriteLine(a + b + c);
}
Deklaracja stałej lokalnej
static void Main() {
const float pi = 3.1415927f;
const int r = 25;
Console.WriteLine(pi *r * r);
}
Instrukcja wyrażenia
static void Main() {
int i;
i = 123; // Instrukcja wyrażenia console.WriteLine(i);// Ins. wyr. i++; // Instrukcja wyrażenia Console.WriteLine(i);// Ins. wyr.}
Instrukcja if
static void Main(string[] args){
if (args.Length == 0)
Console.WriteLine("Brak argumentów");
else
Console.WriteLine("Jeden argument lub więcej argumentów");
}
Instrukcje języka C#Przykłady użycia c.d.1
Instrukcja for
static void Main(string[] args){
int n = args.Length;
switch (n) {
case 0:
Console.WriteLine("Brak argumentów");
break;
case 1:
Console.WriteLine("Jeden argument");
break;
default:
Console.WriteLine("{0} argumentów", n);
break;
}}}
Instrukcja while
static void Main(string[] args){
int i = 0;
while (i < args.Length) {
Console.WriteLine(args[i]);
i++;
}}
Instrukcja do
static void Main() { string s;
do
{
s = Console.ReadLine();
Console.WriteLine(s);
} while (s.Length != 0);
}
Instrukcje języka C#Przykłady użycia c.d.2
Instrukcja for
static void Main(string[] args) {
for(int i=0;i<args.Length;i++)
Console.WriteLine(args[i]);
}
Instrukcje break i continue
string SS;
while (true){
Console.Write("Podaj imię: ");
SS=Console.ReadLine();
if(SS.StartsWith("E")) // Metoda klasy String continue;
if(SS.Contains("na")) // Metoda klasy String break;
Console.WriteLine("Niech żyje {0}!", SS);
}
Instrukcja foreach
static void Main(string[] args) {
foreach (string s in args) {
Console.WriteLine(s);
}