Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Wydział Elektroniki Kierunek: AiR Zaawansowane metody programowania Wykład 5.

Podobne prezentacje


Prezentacja na temat: "Wydział Elektroniki Kierunek: AiR Zaawansowane metody programowania Wykład 5."— Zapis prezentacji:

1 Wydział Elektroniki Kierunek: AiR Zaawansowane metody programowania Wykład 5

2 Język C# Składowe klasy Nazwa Opis Stałe Stałe wartości związane z klasą Pola Zmienne klasy Metody Obliczenia i działania, które mogą być przeprowadzone przez klasę Właściwości Działania związane z odczytywaniem i zapisywaniem nazwanych właściwości klasy Indeksatory Działania związane z indeksowanymi instancjami klasy, takimi jak tablice Zdarzenia Zgłoszenia generowane przez klasę Operatory Konwersje i operatory wyrażeń obsługiwane przez klasę Konstruktory Działania wymagane do inicjalizacji instancji klasy lub klasy samej w sobie Destruktory Działania przeprowadzane przed permanentnym usunięciem instancji klasy Typy Zagnieżdżone typy zadeklarowane przez klasę

3 Język C# Składowe klasy / właściwości i akcesory Właściwości (property) to składowe umożliwiające dostęp do cechy obiektu lub klasy Właściwości posiadają akcesory (accessors) określające instrukcje, które mają być wykonane gdy ich wartości są odczytywane lub zapisywane. Z punktu widzenia programisty właściwości to metody a z punktu widzenia klienta klasy to pola typu dane. Akcesory: set oraz get.

4 Properties and accessors Properties combine aspects of both fields and methods. To the user of an object, a property appears to be a field, accessing the property requires the same syntax. To the implementer of a class, a property is one or two code blocks, representing a get accessor and/or a set accessor. The code block for the get accessor is executed when the property is read. The code block for the set accessor is executed when the property is assigned a new value. A property without a set accessor is considered read-only. A property without a get accessor is considered write-only. A property that has both accessors is read-write.

5 Properties and accessors Unlike fields, properties are not classified as variables. Properties have many uses: –they can validate data before allowing a change; –they can transparently expose data on a class where that data is actually retrieved from some other source, such as a database; –they can take an action when data is changed, such as raising an event, or changing the value of other fields. Properties are declared in the class block by specifying the access level of the field, followed by the type of the property, followed by the name of the property, and followed by a code block that declares a get-accessor and/or a set accessor.

6 Przykład 1 In this example, Month is declared as a property so that the set accessor can make sure that the Month value is set between 1 and 12. The Month property uses a private field to track the actual value. The real location of a property's data is often referred to as the property's "backing store." It is common for properties to use private fields as a backing store. The field is marked private in order to make sure that it can only be changed by calling the property. public class Date { private int month = 7; //"backing store" public int Month { get { return month; } set { if ((value > 0) && (value < 13)) { month = value; }

7 Przykład 2 This example demonstrates instance, static, and read-only properties. It: –accepts the name of the employee from the keyboard, –increments NumberOfEmployees by 1, and –displays the Employee name and number.

8 Przykład 2, c.d. public class Employee { public static int NumberOfEmployees; private static int counter; private string name; public string Name // A read-write instance property: { get { return name; } set { name = value; } } public static int Counter // A read-only static property: { get { return counter; } } public Employee() // A Constructor: { // Calculate the employee's number: counter = ++counter + NumberOfEmployees; }

9 Przykład 2, c.d. class TestEmployee { static void Main() { Employee.NumberOfEmployees = 100; Employee e1 = new Employee(); e1.Name = "Jerzy F. Kotowski"; System.Console.WriteLine("Employee number: {0}", Employee.Counter); System.Console.WriteLine("Employee name: {0}", e1.Name); System.Console.ReadKey(); }

10 Properties Properties – własności? właściwości? get i set są to akcesory Akcesor set automatycznie podczas próby przypisania wartości otrzymuje ją w parametrze o nazwie value Akcesor get musi zwrócić jakąś wartość

11 Przykład 3 class Pokaz { private int l; public int liczba { get // Zwraca wartość { return l / 2; } set // Nadaje wartość { l = value; } class Program { public static void Main() { Pokaz p = new Pokaz(); p.liczba = 100; Console.WriteLine(p.liczba); Console.ReadKey(); }

12 Przykład 3 - komentarz Tworzymy klasę o nazwie Pokaz, która to zawiera prywatną zmienną typu int o nazwie l Klasa zawiera własność o nazwie liczba, która to zawiera dwa akcesory get i set Akcesor get zwraca l/2 (podzieloną przez dwa) Uwaga! Typ zwracany musi być taki sam jak typ własności. Akcesor set służy do zapisu (ustawiania) wartości. Ustala on miejsce do którego ma być przypisana wartość parametru value Własności nie przechowują danych. Określają tylko miejsce ich przechowywania. Z tego względu własności nie mogą korzystać z ref ani out Własność może być zadeklarowana jako static, virtual lub abstract ZADANIE: CO NAPISZE TEN PROGRAM?

13 Indexers – indeksatory? Indeksery? Indexers are a syntactic convenience that enable you to create a class, struct, or interface that client applications can access just as an array. Indeksery są podobne do własności. Pozwalają po utworzeniu obiektu indeksować go jak tablicę, czyli za pomocą operatora [ ]. Indeksery są jedno i dwu wymiarowe, podobnie jak tablice. Ogólna składnia indeksera: specyfikator_dostępu typ this[int index] { get {…} set {….} } public int this[int index] { // get and set accessors }

14 Indeksery - komentarze Parametr index musi być typu int. Reszta elementów jest taka sama, jak we własności. Są dwa akcesory get i set, zatem indeksery jak i własności mogą być tylko do odczytu lub zapisu albo do odczytu i zapisu równocześnie. Indekser nie przechowuje żadnych wartości on tylko określa miejsce przechowywania wartości. Przykład: –Utworzenie klasy, której instancje można będzie indeksować jak tablice; –Będzie można zapisać wartości tylko podzielne przez trzy; –Tablica będzie odporna na błąd przekroczenia indeksu.

15 Przykład 4 class dane { int[] tab; public dane(int rozmiar) // konstruktor {tab = new int[rozmiar];} public int this[int index] // indekser { get { return tab[index]; } set { if (value % 3 == 0) { if (index <= (tab.Length) - 1) tab[index] = value; }} } public void Wyswietl_elementy() { foreach(int x in tab){ Console.WriteLine(x); } }} class Pokaz { public static void Main() { dane a = new dane(10); a[0] = 9; a[1] = 34; a[2] = 3; a[3] = 7; a[4] = 4356; a[19] = 15; a.Wyswietl_elementy(); Console.ReadKey(); }}

16 Przykład 4 - komentarze W programie znajduje się definicja klasy o nazwie liczba Klasa zawiera indekser Akcesor set indeksera zapisuje tylko liczby podzielne przez 3 Dodatkowo akcesor set sprawdza czy parametr index jest zgodny z rozmiarem tablicy tab. Po utworzeniu instancji obiektu jest do niego dostęp przez [ ]. Przekroczenie indeksu nie wywołuje błędu gdyż nie trafia on do tablicy. W przykładzie indekser został wykorzystany do zarządzania miejscem zapisu wartości do tablicy. Tę wartość niekoniecznie trzeba zapisywać do tablicy, parametr index może być wykorzystany inaczej. Indekser nie przechowuje wartości. Indekser określa tylko miejsce przechowywania tej wartości.

17 Exceptions - Wyjątki An exception is any error condition or unexpected behavior encountered by an executing program. In the.NET Framework an exception is an object that inherits from the Exception Class class. W C#.NET wyjątkiem jest na przykład błąd przekroczenia indeksu, wyjątkiem (błędem) jest też przypisanie do zmiennej int zmiennej typu char. Wychwycenie tych wyjątków w programie pozwala uchronić program przed ewentualnymi błędami. Ogólna deklaracja wychwytywania wyjątku: try { … } catch(nazwa_wyjątku1) { … } catch(nazwa_wyjątku2) { … } finally { … }

18 Wyjątki - komentarze W bloku kodu try umieszcza się kod w którym może wystąpić jakiś wyjątek (na przykład przepełnienie indeksu), lub kod który ma zostać poddany kontroli. W blokach catch wypisuje się co ma być wykonane po wychwyceniu jakiegoś wyjątku. W nawiasach podaje jaki wyjątek ma być wychwycony. Istnieje instrukcja catch, która to wyłapuje wszystkie wyjątki, zapisujemy ją bez nawiasów. Instrukcja finally jest opcjonalna, wykonuje się ona zawsze na końcu niezależnie od tego czy wystąpił wyjątek czy nie. Prosty przykład: przepełnienie indeksu.

19 Przykład 5 class Pokaz { public static void Main() { int[] tablica = new int[10]; try { for (int i = 0; ; i++){ tablica[i] = i; Console.WriteLine(i);} } catch(IndexOutOfRangeException) { Console.WriteLine("Nastąpiło właśnie przepełnienie indeksu"); Console.ReadKey(); }}}

20 Przykład 5 - komentarze Deklaracja tablicy o rozmiarze 10. Pętla ma specjalnie przekroczyć ten indeks. Ten kod jest umieszczony w bloku try. W bloku catch piszemy jaki rodzaj wyjątku chcemy wychwycić (czyli przepełnienie indeksu). Kolejny przykład: Należy wyświetlić wiadomość o rodzaju błędu, to znaczy IndexOutOfRangeException.

21 Przykład 6 class Pokaz { public static void Main() { int[] tablica = new int[10]; try { for (int i = 0; ; i++){ tablica[i] = i; Console.WriteLine(i);} } catch(IndexOutOfRangeException e) { Console.WriteLine("Nastąpiło właśnie przepełnienie indeksu\n\nTreść błędu:\n"); Console.WriteLine(e.ToString()); Console.ReadKey(); }}}

22 Wyjątki – najczęściej spotykane ArraryTypeMismatchException – Typ wartości jaki chcemy przypisać jest niezgodny z typem docelowym DivideByZeroException – Próba dzielenia przez zero IndexOutOfRangeException – Przekroczenie indeksu InvalidCastException – Niepoprawne rzutowanie w czasie rzeczywistym OutOfMemoryException – Porażka wywołania new z powodu braku wolnej pamięci OverflowException – Arytmetyczne przepełnienie

23 Wyjątki – słowo kluczowe throw Ogólna deklaracja zgłoszenia wyjątku: throw new nazwa_wyjątku(); Przykładowo throw new IndexOutOfRangeException(); Przykład: Poprawiony przykład 4 z indekserami


Pobierz ppt "Wydział Elektroniki Kierunek: AiR Zaawansowane metody programowania Wykład 5."

Podobne prezentacje


Reklamy Google