wydział elektroniki kierunek: air

Post on 08-Feb-2016

75 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Wydział Elektroniki Kierunek: AiR. Zaawansowane metody programowania Wykład 5. Język C# Składowe klasy. 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 - PowerPoint PPT Presentation

TRANSCRIPT

Wydział ElektronikiKierunek: AiR

Zaawansowane metody programowania

Wykład 5

Język C#Składowe klasy

Nazwa OpisStał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ę

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.

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.

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.

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; }

} }

}

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.

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; }}

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(); }}

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ść

Przykład 3class 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(); }}

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?

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 }

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.

Przykład 4class 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(); }}

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.

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{…}

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.

Przykład 5class 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(); }}}

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.

Przykład 6class 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(); }}}

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

Wyjątki – słowo kluczowe throw• Ogólna deklaracja zgłoszenia wyjątku:throw new nazwa_wyjątku();

• Przykładowothrow new IndexOutOfRangeException();

• Przykład: Poprawiony przykład 4 z indekserami

top related