1 / 41

Курс по програмиране на C#

Курс по програмиране на C#. Занятие №10 Свойства. Индексатори. Статични членове. Съдържание. Свойства Индексатори Капсулиране със свойства и индексатори Статични членове Статични полета Статични методи Статични конструктори Статични свойства. Свойства. Какво е „свойство“?

aya
Download Presentation

Курс по програмиране на C#

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. Курс по програмиране на C# Занятие №10Свойства. Индексатори. Статични членове

  2. Съдържание • Свойства • Индексатори • Капсулиране със свойства и индексатори • Статични членове • Статични полета • Статични методи • Статични конструктори • Статични свойства

  3. Свойства • Какво е „свойство“? • Вид член на клас • Описва поведение на класа • За външния код изглежда като характеристика • Служи за изпълнение на операции при прочитането или присвояването на стойност на характеристика на обект • Заменя аксесорите и мутаторите при капсулиране на класа • Може да се използва за реализиране на характеристика, която не се съхранява в поле на обекта, а може да бъде изчислена посредством други вътрешни данни на обекта

  4. Свойства • Деклариране на свойства • Както повечето членове, свойствата имат видимост • Тип данни • Уникално наименование в рамките на класа • Блок с операции, които да се изпълнят при прочитане на стойността на свойството; задължително трябва да бъде върнат резултат от указания тип • Блок с операции, които да се изпълнят при присвояване на стойност на свойството; присвоената стойност се достъпва члез стандартната дума value, която играе ролята на параметър • Един от двата блока може да бъде пропуснат: свойства само за четене или свойства само за запис

  5. Свойства classAnimal{ // Частно поле за съхраняване на даннитеprivatestring _species; // Свойство за капсулиране на даннитеpublicstringSpecies{ // Блок за четенеget{ return _species; } // Блок за записset{if(!string.IsNullOrEmpty(value)) _species = value;}}} Деклариране на свойства Модификатор за достъп Тип данни Наименование Блок, съдържащ getи/или setблок getблок: Ключова дума get Блок с операции, които да бъдат изпълнени при прочитане на стойността на свойството Трябва да бъде върната стойност от подходящ тип setблок: Ключова дума set Блок с операции, които да бъдат изпълнени при присвояване на стойност на свойството Присвоената стойност се достъпва чрез стандартната дума value

  6. Деклариране на свойства - демо // Демонстрация

  7. Свойства Animalcat = newAnimal(); // Присвояване на стойност на свойствоcat.Species= "Felissilvestriscatus"; // Прочитане на стойността на свойствоConsole.WriteLine(cat.Species); // Присвояване на стойност при инстанциране// на обект с инициализацияAnimaldog = newAnimal{Species = "Canis lupus familiaris",}; Употреба на свойства Стойността на свойство се достъпва по същия начин, както и тази на поле Израз, рефериращ обекта Оператор за достъпване на член „.“ Наименование на свойството Фундаменталната разлика е в това, че съответната прочетена или присвоена стойност не е задължително да се пази в паметта на обекта

  8. Употреба на свойства - демо // Демонстрация

  9. Свойства classUser{ privatestring _userName;privatebool _isLocked; // Свойство само за четенеpublicstringUserName {get{ return _userName; } } // Свойство само за записpublicboolIsLocked {set{ _isLocked = value; } }} Деклариране на свойства само за четене Декларира се само getблок Компилаторът не разрешава присвояване на стойност на свойството Деклариране на свойство само за запис Декларира се само setблок Компилаторът не разрешава прочитане на стойността на свойството

  10. Свойства само за четене и свойства само за запис - демо // Демонстрация

  11. Свойства classShape2D{ privatedouble _area; publicdouble Area { // Публичен достъп за четенеget { return _area; } // Защитен достъп за записprotectedset {if (value > 0.0)_area = value; } }} Свойства с различна видимост на getи setблоковете Пред един от getи setблоковете може да се постави модификатор за достъп Видимостта на съответния блок трябва да е по-ограничена от видимостта на цялото свойство

  12. Свойства с различна видимост на getи setблоковете - демо // Демонстрация

  13. Свойства classBuilding{ // Ръчно капсулирано със свойство полеprivatedouble _height;publicdoubleHeight {get{ return _height; }set{ _height = value; } } // Автоматично генерирано свойствоpublicdouble Area { get; set; } // Автоматично генерирано свойство с // различна видимост на блоковетеpublicboolIsDemolished { get;privateset; }} Автоматично генерирани свойства Вместо getи setблокове се поставят само двете ключови думи, следвани от точки и запетаи Компилаторът автоматично създава частно поле за съхранение на данните за автоматично генерираното свойство Удобно, когато не е необходимо специално поведение, освен прочитане и записване на данните в частно поле Възможно е да се укаже различна видимост на getи setблоковете

  14. Автоматично генерирани свойства - демо // Демонстрация

  15. Индексатори • Какво е „индексатор“? • Вид член на клас • Описва поведение на класа • Служи за достъпване на елемент по пореден номер или друг/и параметър/ри, подобно на елементите на масив, чрез оператора за индексиране на елемент [] • Удобен за реализиране на класове, които представляват колекции от елементи

  16. Индексатори • Деклариране на индексатори • Както повечето членове, индексаторите имат видимост • Няма наименование • Тип данни на елементите, които се индексират • Списък от параметри (поне един) • Блокове от операции за четене и/или записване на стойност на съответния елемент – подобно на свойство • В един клас може да се декларират няколко индексатора, стига те да се различават по броя или типовете данни на параметрите си (подобно на методите)

  17. Индексатори classSong{// ...} classAlbum{ // Частно поле за съхранение на песнитеprivateSong[] _songs; // Индексатор за достъпване на песнитеpublicSongthis[int index] { // Блок за четене на елементget{ return _songs[index - 1]; } // Блок за записване на елементset{ _songs[index - 1] = value; } }} Деклариране на индексатори Модификатор за достъп Тип данни на индексираните елементи Ключова дума this Списък от параметри, заградени в квадратни скоби Блок, съдържащ getи/или setблок Както и при свойствата, getи setблоковете може да са с различна видимост

  18. Деклариране на индексатори - демо // Демонстрация

  19. Индексатори Albumalbum = newAlbum(11){ Artist = "Pearl Jam", Title = "Ten",}; // Записване на елемент по индексalbum[1] = newSong{ Title = "Once",};album[2] = newSong{ Title = "Even Flow",}; // Прочитане на елемент по индексConsole.WriteLine(album[1].Title); Употреба на индексатори Индексатор на обект се използва със същия синтаксис, както при индексиране на елемент в масив Променлива или израз, който реферира обекта-колекция Един или повече аргументи, заградени в квадратни скоби

  20. Употреба на индексатори - демо // Демонстрация

  21. Капсулиране чрез свойства и индексатори • Свойствата и индексаторите „обличат“ поведението на обекта в по-удобни и по-интуитивни за употреба синтактични конструкции • Всичко, което може да се осъществи чрез свойство или индексатор, може да бъде реализирано и чрез обикновен(и) метод(и) • Препоръчва се употребата на свойства и индексатори, където е възможно/уместно

  22. Капсулиране чрез свойства и индексатори - демо // Демонстрация

  23. Статични членове • Какво е „статичен член“ на клас/структура? • Не е обвързан с конкретен екземпляр на типа данни ,в който е деклариран • Обвързан е със самия тип данни • Достъпва се директно през типа данни • Декларира се подобно на обикновен (екземплярен) член, но се поставя ключовата дума staticслед модификатора за достъп

  24. Статични полета • Статични полета • Съхраняват характеристики на класа, а не на конкретни негови екземпляри • За всяко статично поле се заделя единствено място в паметта, обвързано със самия клас • Константните полета са статични по подразбиране • Често се използват за съхраняване на помощна информация, от която се нуждаят екземплярите на класа

  25. Статични полета classBook{ // Деклариране на статично поле за брой //инстанцирани обекти от тип BookpublicstaticintBookCount; // Деклариране на статично поле за глобален //масив от книгиpublicstaticBook[] Books = newBook[100];} Деклариране на статични полета Модификатор за достъп Ключова дума static Тип данни Наименование (уникално измежду всички членове на класа, независимо дали са статични) Стойност по подразбиране (незадължителна)

  26. Статични полета classBook{// ...// Поле за номер на книгаprivateint _bookNumber; // Екземплярен конструктор на класаpublicBook(){ // Генериране на номера на новата книга _bookNumber= BookCount; // Вкарване на книгата в глобалния масив Books[BookCount] = this; // Увеличаване на броя книги с 1BookCount++;}} // ...// Достъпване на списъка с книги в главната програмаBookbook = Book.Books[2]; Използване на статични полета Наименование на класа, в който е декларирано статичното поле Оператор за достъп на член „.“ Наименование на статичното поле Могат да се достъпват директно в декларациите както на статичните, така и на екземплярните членове на класа Не могат да се достъпват през екземпляр на класа (включително this)

  27. Статични полета - демо // Демонстрация

  28. Статични методи • Статични методи • Описват поведение, което не е обвързано с конкретен екземпляр на класа • Няма достъп до текущия екземпляр на класа (тъй като няма такъв) – не може да се използва ключовата дума this, нито могат да се достъпват пряко екземплярните членове на класа • Могат да се достъпват пряко статичните членове на класа • Много от стандартните методи, с които вече сте запознати, са статични • Главната програма на всяко приложение в C# на практика е статичен метод

  29. Статични методи classBook{// ... // Статичен метод за отстраняване на книга // от глобалния масивpublicstaticvoidRemoveBook(int index){ // Проверка за валиден индекс на книгаif(index < 0 || index >= BookCount)return; // Преместване на следващите книги назадfor(inti = index; i < BookCount - 1; i++){ Books[i] = Books[i + 1];Books[i]._bookNumber--;} // Намаляване на броя книги с 1BookCount--;}} Деклариране на статични методи Модификатор за достъп Ключова дума static Тип данни на връщания резултат (или ключова дума void) Наименование Списък от параметри в кръгли скоби Блок с операции (тяло) В тялото не може да се използва ключовата дума this, нито да се достъпват директно екземплярни членове Могат да се достъпват директно статични членове Могат да се декларират методи с еднакви наименования и различни по брой или типове параметри

  30. Статични методи classBook{// ... // Екземплярен метод за премахване на текущата // книга от глобалния масивpublicvoidRemoveFromList() {RemoveBook(_bookNumber); }} // Премахване на книги от списъка в главната програмаBook.Books[3].RemoveFromList();Book.RemoveBook(0); Използване на статични методи Наименование на класа, в който е декларирано статичният поле Оператор за достъп на член „.“ Наименование на статичния метод Списък с аргументи в кръгли скоби Могат да се достъпват директно в декларациите както на статичните, така и на екземплярните членове на класа Не могат да се достъпват през екземпляр на класа (включително this)

  31. Статични методи - демо // Демонстрация

  32. Статични конструктори • Статични конструктори • Описват поведение, което се изпълнява еднократно при инициализацията на класа • Удобни за инициализиране на статични полета • Могат да се достъпват статичните членове на класа • Програмистът не извиква статичните конструктори явно и няма контрол кога точно да бъдат изпълнени • Не приемат параметри • Като правило се изпълняват непосредствено преди първата употреба на съответния клас в програмата

  33. Статични конструктори classBook{// ... // Статичен конструктор на класаstaticBook() {BookCount= 0;Books = newBook[100]; }} Деклариране на статични конструктори Не се поставя модификатор за достъп Ключова дума static Наименование на класа Празни кръгли скоби (празен списък с параметри) Блок с операции (тяло) В тялото не може да се използва ключовата дума this, нито да се достъпват директно екземплярни членове Могат да се достъпват директно статични членове

  34. Статични конструктори - демо // Демонстрация

  35. Статични свойства • Статични свойства • Представляват свойства, обвързани със самия клас, а не с конкретен негов екземпляр • Обвиват поведение, но за външния код се държат като статични полета • Удобни за обвиване на статични полета (например за отложено зареждане на стойността на статично поле или за капсулирането му) • Налице са всички възможности на екземплярните свойства, с описаните ограничения за статични методи

  36. Статични свойства classBook{ // Частно статично поле за глобален масив от // книгиprivatestaticBook[] _books = newBook[100]; // Публично свойство само за четене за // глобален масив от книгиpublicstaticBook[] Books {get{ return _books; } } // Автоматично генерирано статично свойство с // публичен достъп за брой инстанцирани обекти // от тип BookpublicstaticintBookCount { get; privateset; }} Деклариране на статични свойства Модификатор за достъп Ключова дума static Тип данни Наименование Блок, съдържащ getи/или setблокове В блоковете не може да се използва ключовата дума this, нито да се достъпват директно екземплярни членове Могат да се достъпват директно статични членове getи setблоковете може да имат различна видимост, както при екземплярните свойства Могат да се създават автоматично генерирани статични свойства

  37. Статични свойства classBook{// ...// Поле за номер на книгаprivateint _bookNumber; // Екземплярен конструктор на класаpublic Book(){ // Генериране на номера на новата книга _bookNumber = BookCount; // Вкарване на книгата в глобалния масив Books[BookCount] = this; // Увеличаване на броя книги с 1BookCount++;}} // ...// Достъпване на списъка с книги в главната програмаBookbook = Book.Books[2]; Използване на статични свойства Наименование на класа, в който е декларирано статичното свойство Оператор за достъп на член „.“ Наименование на статичното свойство Могат да се достъпват директно в декларациите както на статичните, така и на екземплярните членове на класа Не могат да се достъпват през екземпляр на класа (включително this)

  38. Статични свойства - демо // Демонстрация

  39. Задачи за упражнение • Преработете програмите от предишните упражнения (геометрични фигури, библиотека и походова конзолна ролева игра), така че да се възползвате от новите възможности на езика, за които научихте: • Използвайте свойства и индексатори вместо методи, където е уместно, за да капсулирате обектите • Създайте статични методи за въвеждане на нов екземпляр на съответния клас от клавиатурата • Възползвайте се от статичните полета, конструктори и свойства, за да споделите информация между отделните екземпляри на един клас (например екземпляр на класа Random) • Изнесете поведението, което не е обвързано с конкретен екземпляр на класа, в статични методи

  40. Въпроси?

  41. Благодаря! • Александър Далемски • sasho@david.bg • Skype: musasho • https://facebook.com/adalemski • ДАВИД академия • acad@david.bg • http://acad.david.bg/ • @david_academy • https://facebook.com/DavidAcademy

More Related