Your SlideShare is downloading. ×
0
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Училищен курс по програмиране на C# (2013/2014), занятие №10
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Училищен курс по програмиране на C# (2013/2014), занятие №10

122

Published on

Училищен курс по програмиране на C# (2013/2014) …

Училищен курс по програмиране на C# (2013/2014)
Занятие №10: Свойства. Индексатори. Статични членове

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
122
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 2013 Курс по програмиране на C# Занятие №10 Свойства. Индексатори. Статични членове
  • 2. Съдържание • Свойства • Индексатори • Капсулиране със свойства и индексатори • Статични членове • Статични полета • Статични методи • Статични конструктори • Статични свойства
  • 3. Свойства • Какво е „свойство“? – Вид член на клас – Описва поведение на класа – За външния код изглежда като характеристика – Служи за изпълнение на операции при прочитането или присвояването на стойност на характеристика на обект – Заменя аксесорите и мутаторите при капсулиране на класа – Може да се използва за реализиране на характеристика, която не се съхранява в поле на обекта, а може да бъде изчислена посредством други вътрешни данни на обекта
  • 4. Свойства • Деклариране на свойства – Както повечето членове, свойствата имат видимост – Тип данни – Уникално наименование в рамките на класа – Блок с операции, които да се изпълнят при прочитане на стойността на свойството; задължително трябва да бъде върнат резултат от указания тип – Блок с операции, които да се изпълнят при присвояване на стойност на свойството; присвоената стойност се достъпва члез стандартната дума value, която играе ролята на параметър – Един от двата блока може да бъде пропуснат: свойства само за четене или свойства само за запис
  • 5. Свойства class Animal { // Частно поле за съхраняване на данните private string _species; // Свойство за капсулиране на данните public string Species { // Блок за четене get { return _species; } // Блок за запис set { if (!string.IsNullOrEmpty(value)) _species = value; } } } • Деклариране на свойства – Модификатор за достъп – Тип данни – Наименование – Блок, съдържащ get и/или set блок – get блок: • Ключова дума get • Блок с операции, които да бъдат изпълнени при прочитане на стойността на свойството • Трябва да бъде върната стойност от подходящ тип – set блок: • Ключова дума set • Блок с операции, които да бъдат изпълнени при присвояване на стойност на свойството • Присвоената стойност се достъпва чрез стандартната дума value
  • 6. Деклариране на свойства - демо // Демонстрация
  • 7. Свойства Animal cat = new Animal(); // Присвояване на стойност на свойство cat.Species = "Felis silvestris catus"; // Прочитане на стойността на свойство Console.WriteLine(cat.Species); // Присвояване на стойност при инстанциране // на обект с инициализация Animal dog = new Animal { Species = "Canis lupus familiaris", }; • Употреба на свойства – Стойността на свойство се достъпва по същия начин, както и тази на поле – Израз, рефериращ обекта – Оператор за достъпване на член „.“ – Наименование на свойството – Фундаменталната разлика е в това, че съответната прочетена или присвоена стойност не е задължително да се пази в паметта на обекта
  • 8. Употреба на свойства - демо // Демонстрация
  • 9. Свойства class User { private string _userName; private bool _isLocked; // Свойство само за четене public string UserName { get { return _userName; } } // Свойство само за запис public bool IsLocked { set { _isLocked = value; } } } • Деклариране на свойства само за четене – Декларира се само get блок – Компилаторът не разрешава присвояване на стойност на свойството • Деклариране на свойство само за запис – Декларира се само set блок – Компилаторът не разрешава прочитане на стойността на свойството
  • 10. Свойства само за четене и свойства само за запис - демо // Демонстрация
  • 11. Свойства class Shape2D { private double _area; public double Area { // Публичен достъп за четене get { return _area; } // Защитен достъп за запис protected set { if (value > 0.0) _area = value; } } } • Свойства с различна видимост на get и set блоковете – Пред един от get и set блоковете може да се постави модификатор за достъп – Видимостта на съответния блок трябва да е по-ограничена от видимостта на цялото свойство
  • 12. Свойства с различна видимост на get и set блоковете - демо // Демонстрация
  • 13. Свойства class Building { // Ръчно капсулирано със свойство поле private double _height; public double Height { get { return _height; } set { _height = value; } } // Автоматично генерирано свойство public double Area { get; set; } // Автоматично генерирано свойство с // различна видимост на блоковете public bool IsDemolished { get; private set; } } • Автоматично генерирани свойства – Вместо get и set блокове се поставят само двете ключови думи, следвани от точки и запетаи – Компилаторът автоматично създава частно поле за съхранение на данните за автоматично генерираното свойство – Удобно, когато не е необходимо специално поведение, освен прочитане и записване на данните в частно поле – Възможно е да се укаже различна видимост на get и set блоковете
  • 14. Автоматично генерирани свойства - демо // Демонстрация
  • 15. Индексатори • Какво е „индексатор“? – Вид член на клас – Описва поведение на класа – Служи за достъпване на елемент по пореден номер или друг/и параметър/ри, подобно на елементите на масив, чрез оператора за индексиране на елемент [] – Удобен за реализиране на класове, които представляват колекции от елементи
  • 16. Индексатори • Деклариране на индексатори – Както повечето членове, индексаторите имат видимост – Няма наименование – Тип данни на елементите, които се индексират – Списък от параметри (поне един) – Блокове от операции за четене и/или записване на стойност на съответния елемент – подобно на свойство – В един клас може да се декларират няколко индексатора, стига те да се различават по броя или типовете данни на параметрите си (подобно на методите)
  • 17. Индексатори class Song { // ... } class Album { // Частно поле за съхранение на песните private Song[] _songs; // Индексатор за достъпване на песните public Song this[int index] { // Блок за четене на елемент get { return _songs[index - 1]; } // Блок за записване на елемент set { _songs[index - 1] = value; } } } • Деклариране на индексатори – Модификатор за достъп – Тип данни на индексираните елементи – Ключова дума this – Списък от параметри, заградени в квадратни скоби – Блок, съдържащ get и/или set блок – Както и при свойствата, get и set блоковете може да са с различна видимост
  • 18. Деклариране на индексатори - демо // Демонстрация
  • 19. Индексатори Album album = new Album(11) { Artist = "Pearl Jam", Title = "Ten", }; // Записване на елемент по индекс album[1] = new Song { Title = "Once", }; album[2] = new Song { Title = "Even Flow", }; // Прочитане на елемент по индекс Console.WriteLine(album[1].Title); • Употреба на индексатори – Индексатор на обект се използва със същия синтаксис, както при индексиране на елемент в масив – Променлива или израз, който реферира обекта-колекция – Един или повече аргументи, заградени в квадратни скоби
  • 20. Употреба на индексатори - демо // Демонстрация
  • 21. Капсулиране чрез свойства и индексатори • Свойствата и индексаторите „обличат“ поведението на обекта в по-удобни и по-интуитивни за употреба синтактични конструкции • Всичко, което може да се осъществи чрез свойство или индексатор, може да бъде реализирано и чрез обикновен(и) метод(и) • Препоръчва се употребата на свойства и индексатори, където е възможно/уместно
  • 22. Капсулиране чрез свойства и индексатори - демо // Демонстрация
  • 23. Статични членове • Какво е „статичен член“ на клас/структура? – Не е обвързан с конкретен екземпляр на типа данни ,в който е деклариран – Обвързан е със самия тип данни – Достъпва се директно през типа данни – Декларира се подобно на обикновен (екземплярен) член, но се поставя ключовата дума static след модификатора за достъп
  • 24. Статични полета • Статични полета – Съхраняват характеристики на класа, а не на конкретни негови екземпляри – За всяко статично поле се заделя единствено място в паметта, обвързано със самия клас – Константните полета са статични по подразбиране – Често се използват за съхраняване на помощна информация, от която се нуждаят екземплярите на класа
  • 25. Статични полета class Book { // Деклариране на статично поле за брой // инстанцирани обекти от тип Book public static int BookCount; // Деклариране на статично поле за глобален // масив от книги public static Book[] Books = new Book[100]; } • Деклариране на статични полета – Модификатор за достъп – Ключова дума static – Тип данни – Наименование (уникално измежду всички членове на класа, независимо дали са статични) – Стойност по подразбиране (незадължителна)
  • 26. Статични полета class Book { // ... // Поле за номер на книга private int _bookNumber; // Екземплярен конструктор на класа public Book() { // Генериране на номера на новата книга _bookNumber = BookCount; // Вкарване на книгата в глобалния масив Books[BookCount] = this; // Увеличаване на броя книги с 1 BookCount++; } } // ... // Достъпване на списъка с книги в главната програма Book book = Book.Books[2]; • Използване на статични полета – Наименование на класа, в който е декларирано статичното поле – Оператор за достъп на член „.“ – Наименование на статичното поле – Могат да се достъпват директно в декларациите както на статичните, така и на екземплярните членове на класа – Не могат да се достъпват през екземпляр на класа (включително this)
  • 27. Статични полета - демо // Демонстрация
  • 28. Статични методи • Статични методи – Описват поведение, което не е обвързано с конкретен екземпляр на класа – Няма достъп до текущия екземпляр на класа (тъй като няма такъв) – не може да се използва ключовата дума this, нито могат да се достъпват пряко екземплярните членове на класа – Могат да се достъпват пряко статичните членове на класа – Много от стандартните методи, с които вече сте запознати, са статични – Главната програма на всяко приложение в C# на практика е статичен метод
  • 29. Статични методи class Book { // ... // Статичен метод за отстраняване на книга // от глобалния масив public static void RemoveBook(int index) { // Проверка за валиден индекс на книга if (index < 0 || index >= BookCount) return; // Преместване на следващите книги назад for (int i = index; i < BookCount - 1; i++) { Books[i] = Books[i + 1]; Books[i]._bookNumber--; } // Намаляване на броя книги с 1 BookCount--; } } • Деклариране на статични методи – Модификатор за достъп – Ключова дума static – Тип данни на връщания резултат (или ключова дума void) – Наименование – Списък от параметри в кръгли скоби – Блок с операции (тяло) – В тялото не може да се използва ключовата дума this, нито да се достъпват директно екземплярни членове – Могат да се достъпват директно статични членове – Могат да се декларират методи с еднакви наименования и различни по брой или типове параметри
  • 30. Статични методи class Book { // ... // Екземплярен метод за премахване на текущата // книга от глобалния масив public void RemoveFromList() { RemoveBook(_bookNumber); } } // Премахване на книги от списъка в главната програма Book.Books[3].RemoveFromList(); Book.RemoveBook(0); • Използване на статични методи – Наименование на класа, в който е декларирано статичният поле – Оператор за достъп на член „.“ – Наименование на статичния метод – Списък с аргументи в кръгли скоби – Могат да се достъпват директно в декларациите както на статичните, така и на екземплярните членове на класа – Не могат да се достъпват през екземпляр на класа (включително this)
  • 31. Статични методи - демо // Демонстрация
  • 32. Статични конструктори • Статични конструктори – Описват поведение, което се изпълнява еднократно при инициализацията на класа – Удобни за инициализиране на статични полета – Могат да се достъпват статичните членове на класа – Програмистът не извиква статичните конструктори явно и няма контрол кога точно да бъдат изпълнени – Не приемат параметри – Като правило се изпълняват непосредствено преди първата употреба на съответния клас в програмата
  • 33. Статични конструктори class Book { // ... // Статичен конструктор на класа static Book() { BookCount = 0; Books = new Book[100]; } } • Деклариране на статични конструктори – Не се поставя модификатор за достъп – Ключова дума static – Наименование на класа – Празни кръгли скоби (празен списък с параметри) – Блок с операции (тяло) – В тялото не може да се използва ключовата дума this, нито да се достъпват директно екземплярни членове – Могат да се достъпват директно статични членове
  • 34. Статични конструктори - демо // Демонстрация
  • 35. Статични свойства • Статични свойства – Представляват свойства, обвързани със самия клас, а не с конкретен негов екземпляр – Обвиват поведение, но за външния код се държат като статични полета – Удобни за обвиване на статични полета (например за отложено зареждане на стойността на статично поле или за капсулирането му) – Налице са всички възможности на екземплярните свойства, с описаните ограничения за статични методи
  • 36. Статични свойства class Book { // Частно статично поле за глобален масив от // книги private static Book[] _books = new Book[100]; // Публично свойство само за четене за // глобален масив от книги public static Book[] Books { get { return _books; } } // Автоматично генерирано статично свойство с // публичен достъп за брой инстанцирани обекти // от тип Book public static int BookCount { get; private set; } } • Деклариране на статични свойства – Модификатор за достъп – Ключова дума static – Тип данни – Наименование – Блок, съдържащ get и/или set блокове – В блоковете не може да се използва ключовата дума this, нито да се достъпват директно екземплярни членове – Могат да се достъпват директно статични членове – get и set блоковете може да имат различна видимост, както при екземплярните свойства – Могат да се създават автоматично генерирани статични свойства
  • 37. Статични свойства class Book { // ... // Поле за номер на книга private int _bookNumber; // Екземплярен конструктор на класа public Book() { // Генериране на номера на новата книга _bookNumber = BookCount; // Вкарване на книгата в глобалния масив Books[BookCount] = this; // Увеличаване на броя книги с 1 BookCount++; } } // ... // Достъпване на списъка с книги в главната програма Book book = 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

×