1 / 23

Wydział Elektroniki Kierunek: AiR

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

ember
Download Presentation

Wydział Elektroniki Kierunek: AiR

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Wydział ElektronikiKierunek: AiR Zaawansowane metody programowania Wykład 5

  2. JęzykC#Składowe klasy

  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 getaccessor is executed when the property is read. • The code block for the setaccessor 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 public class Date { private int month = 7; //"backing store" public int Month { get { return month; } set { if ((value > 0) && (value < 13)) { month = value; } } } } • 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.

  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 classEmployee { public staticintNumberOfEmployees; privatestaticintcounter; 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'snumber: counter = ++counter + NumberOfEmployees; } }

  9. Przykład 2, c.d. classTestEmployee { staticvoidMain() { Employee.NumberOfEmployees = 100; Employee e1 = newEmployee(); 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? • geti setsą to akcesory • Akcesorsetautomatycznie podczas próby przypisania wartości otrzymuje ją w parametrze o nazwie value • Akcesorgetmusi zwrócić jakąś wartość

  11. Przykład 3 class Pokaz { privateint l; public int liczba { get // Zwraca wartość { return l / 2; } set // Nadaje wartość { l = value; } } } class Program { public staticvoidMain() { 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 into nazwie l • Klasa zawiera własność o nazwie liczba, która to zawiera dwa akcesorygeti set • Akcesorget zwraca l/2 (podzieloną przez dwa) • Uwaga! Typ zwracany musi być taki sam jak typ własności. • Akcesorsetsł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[intindex] { get {…} set {….} } public int this[int index] { // get and set accessors }

  14. Indeksery - komentarze • Parametr indexmusi być typu int. • Reszta elementów jest taka sama, jak we własności. • Są dwa akcesoryget i set, zatem indeksery jak i własności mogą być tylko do odczytu lub zapisu albo do odczytu i zapisu równocześnie. • Indeksernie 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. class Pokaz { public staticvoidMain() { 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 class dane { int[] tab; public dane(int rozmiar) // konstruktor {tab= newint[rozmiar];} public intthis[intindex] // indekser { get { return tab[index]; } set { if (value % 3 == 0) { if(index <= (tab.Length) - 1) tab[index] = value; }} } public voidWyswietl_elementy() { foreach(int x in tab){ Console.WriteLine(x); } }}

  16. Przykład 4 - komentarze • W programie znajduje się definicja klasy o nazwie liczba • Klasa zawiera indekser • Akcesorsetindeksera zapisuje tylko liczby podzielne przez 3 • Dodatkowo akcesorsetsprawdza czy parametr indexjest 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 indexmoże być wykorzystany inaczej. • Indeksernie przechowuje wartości. Indekserokreś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 exceptionis 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 intzmiennej 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 tryumieszcza 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 catchwypisuje 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 finallyjest 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 staticvoidMain() { int[] tablica = newint[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 catchpiszemy 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 staticvoidMain() { int[] tablica = newint[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:thrownewnazwa_wyjątku(); • PrzykładowothrownewIndexOutOfRangeException(); • Przykład: Poprawiony przykład 4 z indekserami

More Related