SlideShare a Scribd company logo
1 of 41
2013
Курс по програмиране на C#
Занятие №10
Свойства. Индексатори. Статични членове
Съдържание
• Свойства
• Индексатори
• Капсулиране със свойства и индексатори
• Статични членове
• Статични полета
• Статични методи
• Статични конструктори
• Статични свойства
Свойства
• Какво е „свойство“?
– Вид член на клас
– Описва поведение на класа
– За външния код изглежда като характеристика
– Служи за изпълнение на операции при прочитането или
присвояването на стойност на характеристика на обект
– Заменя аксесорите и мутаторите при капсулиране на класа
– Може да се използва за реализиране на характеристика, която не
се съхранява в поле на обекта, а може да бъде изчислена
посредством други вътрешни данни на обекта
Свойства
• Деклариране на свойства
– Както повечето членове, свойствата имат видимост
– Тип данни
– Уникално наименование в рамките на класа
– Блок с операции, които да се изпълнят при прочитане на стойността
на свойството; задължително трябва да бъде върнат резултат от
указания тип
– Блок с операции, които да се изпълнят при присвояване на
стойност на свойството; присвоената стойност се достъпва члез
стандартната дума value, която играе ролята на параметър
– Един от двата блока може да бъде пропуснат: свойства само за
четене или свойства само за запис
Свойства
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
Деклариране на свойства - демо
// Демонстрация
Свойства
Animal cat = new Animal();
// Присвояване на стойност на свойство
cat.Species = "Felis silvestris catus";
// Прочитане на стойността на свойство
Console.WriteLine(cat.Species);
// Присвояване на стойност при инстанциране
// на обект с инициализация
Animal dog = new Animal
{
Species = "Canis lupus familiaris",
};
• Употреба на свойства
– Стойността на свойство се достъпва по
същия начин, както и тази на поле
– Израз, рефериращ обекта
– Оператор за достъпване на член „.“
– Наименование на свойството
– Фундаменталната разлика е в това, че
съответната прочетена или присвоена
стойност не е задължително да се пази
в паметта на обекта
Употреба на свойства - демо
// Демонстрация
Свойства
class User
{
private string _userName;
private bool _isLocked;
// Свойство само за четене
public string UserName
{
get { return _userName; }
}
// Свойство само за запис
public bool IsLocked
{
set { _isLocked = value; }
}
}
• Деклариране на свойства само за
четене
– Декларира се само get блок
– Компилаторът не разрешава
присвояване на стойност на
свойството
• Деклариране на свойство само за
запис
– Декларира се само set блок
– Компилаторът не разрешава
прочитане на стойността на свойството
Свойства само за четене и свойства само за запис -
демо
// Демонстрация
Свойства
class Shape2D
{
private double _area;
public double Area
{
// Публичен достъп за четене
get { return _area; }
// Защитен достъп за запис
protected set
{
if (value > 0.0)
_area = value;
}
}
}
• Свойства с различна видимост на
get и set блоковете
– Пред един от get и set блоковете може
да се постави модификатор за достъп
– Видимостта на съответния блок трябва
да е по-ограничена от видимостта на
цялото свойство
Свойства с различна видимост на get и set блоковете -
демо
// Демонстрация
Свойства
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 блоковете
Автоматично генерирани свойства - демо
// Демонстрация
Индексатори
• Какво е „индексатор“?
– Вид член на клас
– Описва поведение на класа
– Служи за достъпване на елемент по пореден номер или друг/и
параметър/ри, подобно на елементите на масив, чрез оператора
за индексиране на елемент []
– Удобен за реализиране на класове, които представляват колекции
от елементи
Индексатори
• Деклариране на индексатори
– Както повечето членове, индексаторите имат видимост
– Няма наименование
– Тип данни на елементите, които се индексират
– Списък от параметри (поне един)
– Блокове от операции за четене и/или записване на стойност на
съответния елемент – подобно на свойство
– В един клас може да се декларират няколко индексатора, стига те
да се различават по броя или типовете данни на параметрите си
(подобно на методите)
Индексатори
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
блоковете може да са с различна
видимост
Деклариране на индексатори - демо
// Демонстрация
Индексатори
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);
• Употреба на индексатори
– Индексатор на обект се използва със
същия синтаксис, както при
индексиране на елемент в масив
– Променлива или израз, който
реферира обекта-колекция
– Един или повече аргументи, заградени
в квадратни скоби
Употреба на индексатори - демо
// Демонстрация
Капсулиране чрез свойства и индексатори
• Свойствата и индексаторите „обличат“ поведението на
обекта в по-удобни и по-интуитивни за употреба синтактични
конструкции
• Всичко, което може да се осъществи чрез свойство или
индексатор, може да бъде реализирано и чрез
обикновен(и) метод(и)
• Препоръчва се употребата на свойства и индексатори,
където е възможно/уместно
Капсулиране чрез свойства и индексатори - демо
// Демонстрация
Статични членове
• Какво е „статичен член“ на клас/структура?
– Не е обвързан с конкретен екземпляр на типа данни ,в който е
деклариран
– Обвързан е със самия тип данни
– Достъпва се директно през типа данни
– Декларира се подобно на обикновен (екземплярен) член, но се
поставя ключовата дума static след модификатора за достъп
Статични полета
• Статични полета
– Съхраняват характеристики на класа, а не на конкретни негови
екземпляри
– За всяко статично поле се заделя единствено място в паметта,
обвързано със самия клас
– Константните полета са статични по подразбиране
– Често се използват за съхраняване на помощна информация, от
която се нуждаят екземплярите на класа
Статични полета
class Book
{
// Деклариране на статично поле за брой
// инстанцирани обекти от тип Book
public static int BookCount;
// Деклариране на статично поле за глобален
// масив от книги
public static Book[] Books = new Book[100];
}
• Деклариране на статични полета
– Модификатор за достъп
– Ключова дума static
– Тип данни
– Наименование (уникално измежду
всички членове на класа, независимо
дали са статични)
– Стойност по подразбиране
(незадължителна)
Статични полета
class Book
{
// ...
// Поле за номер на книга
private int _bookNumber;
// Екземплярен конструктор на класа
public Book()
{
// Генериране на номера на новата книга
_bookNumber = BookCount;
// Вкарване на книгата в глобалния масив
Books[BookCount] = this;
// Увеличаване на броя книги с 1
BookCount++;
}
}
// ...
// Достъпване на списъка с книги в главната програма
Book book = Book.Books[2];
• Използване на статични полета
– Наименование на класа, в който е
декларирано статичното поле
– Оператор за достъп на член „.“
– Наименование на статичното поле
– Могат да се достъпват директно в
декларациите както на статичните, така
и на екземплярните членове на класа
– Не могат да се достъпват през
екземпляр на класа (включително this)
Статични полета - демо
// Демонстрация
Статични методи
• Статични методи
– Описват поведение, което не е обвързано с конкретен екземпляр
на класа
– Няма достъп до текущия екземпляр на класа (тъй като няма такъв) –
не може да се използва ключовата дума this, нито могат да се
достъпват пряко екземплярните членове на класа
– Могат да се достъпват пряко статичните членове на класа
– Много от стандартните методи, с които вече сте запознати, са
статични
– Главната програма на всяко приложение в C# на практика е
статичен метод
Статични методи
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, нито да се достъпват директно
екземплярни членове
– Могат да се достъпват директно статични
членове
– Могат да се декларират методи с еднакви
наименования и различни по брой или
типове параметри
Статични методи
class Book
{
// ...
// Екземплярен метод за премахване на текущата
// книга от глобалния масив
public void RemoveFromList()
{
RemoveBook(_bookNumber);
}
}
// Премахване на книги от списъка в главната програма
Book.Books[3].RemoveFromList();
Book.RemoveBook(0);
• Използване на статични методи
– Наименование на класа, в който е
декларирано статичният поле
– Оператор за достъп на член „.“
– Наименование на статичния метод
– Списък с аргументи в кръгли скоби
– Могат да се достъпват директно в
декларациите както на статичните, така
и на екземплярните членове на класа
– Не могат да се достъпват през
екземпляр на класа (включително this)
Статични методи - демо
// Демонстрация
Статични конструктори
• Статични конструктори
– Описват поведение, което се изпълнява еднократно при
инициализацията на класа
– Удобни за инициализиране на статични полета
– Могат да се достъпват статичните членове на класа
– Програмистът не извиква статичните конструктори явно и няма
контрол кога точно да бъдат изпълнени
– Не приемат параметри
– Като правило се изпълняват непосредствено преди първата
употреба на съответния клас в програмата
Статични конструктори
class Book
{
// ...
// Статичен конструктор на класа
static Book()
{
BookCount = 0;
Books = new Book[100];
}
}
• Деклариране на статични
конструктори
– Не се поставя модификатор за достъп
– Ключова дума static
– Наименование на класа
– Празни кръгли скоби (празен списък с
параметри)
– Блок с операции (тяло)
– В тялото не може да се използва ключовата
дума this, нито да се достъпват директно
екземплярни членове
– Могат да се достъпват директно статични
членове
Статични конструктори - демо
// Демонстрация
Статични свойства
• Статични свойства
– Представляват свойства, обвързани със самия клас, а не с
конкретен негов екземпляр
– Обвиват поведение, но за външния код се държат като статични
полета
– Удобни за обвиване на статични полета (например за отложено
зареждане на стойността на статично поле или за капсулирането
му)
– Налице са всички възможности на екземплярните свойства, с
описаните ограничения за статични методи
Статични свойства
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 блоковете може да имат различна
видимост, както при екземплярните
свойства
– Могат да се създават автоматично
генерирани статични свойства
Статични свойства
class Book
{
// ...
// Поле за номер на книга
private int _bookNumber;
// Екземплярен конструктор на класа
public Book()
{
// Генериране на номера на новата книга
_bookNumber = BookCount;
// Вкарване на книгата в глобалния масив
Books[BookCount] = this;
// Увеличаване на броя книги с 1
BookCount++;
}
}
// ...
// Достъпване на списъка с книги в главната програма
Book book = Book.Books[2];
• Използване на статични свойства
– Наименование на класа, в който е
декларирано статичното свойство
– Оператор за достъп на член „.“
– Наименование на статичното свойство
– Могат да се достъпват директно в
декларациите както на статичните, така
и на екземплярните членове на класа
– Не могат да се достъпват през
екземпляр на класа (включително this)
Статични свойства - демо
// Демонстрация
Задачи за упражнение
• Преработете програмите от предишните упражнения
(геометрични фигури, библиотека и походова конзолна
ролева игра), така че да се възползвате от новите
възможности на езика, за които научихте:
– Използвайте свойства и индексатори вместо методи, където е
уместно, за да капсулирате обектите
– Създайте статични методи за въвеждане на нов екземпляр на
съответния клас от клавиатурата
– Възползвайте се от статичните полета, конструктори и свойства, за
да споделите информация между отделните екземпляри на един
клас (например екземпляр на класа Random)
– Изнесете поведението, което не е обвързано с конкретен
екземпляр на класа, в статични методи
Въпроси?
Благодаря!
• Александър Далемски
– sasho@david.bg
– Skype: musasho
– https://facebook.com/adalemski
• ДАВИД академия
– acad@david.bg
– http://acad.david.bg/
– @david_academy
– https://facebook.com/DavidAcademy

More Related Content

What's hot

Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12DAVID Academy
 
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9DAVID Academy
 
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#DAVID Academy
 
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №2
Училищен курс по програмиране на C# (2013/2014), занятие №2Училищен курс по програмиране на C# (2013/2014), занятие №2
Училищен курс по програмиране на C# (2013/2014), занятие №2DAVID Academy
 
Курс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSSКурс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSSDAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №3Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №3DAVID Academy
 
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...DAVID Academy
 
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...DAVID Academy
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLDAVID Academy
 
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...DAVID Academy
 
Курс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSКурс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSDAVID Academy
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)DAVID Academy
 
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...DAVID Academy
 
JDK 1.5 New Features
JDK 1.5 New FeaturesJDK 1.5 New Features
JDK 1.5 New FeaturesSvetlin Nakov
 

What's hot (20)

Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12
 
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
 
Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9
 
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
 
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...
 
Училищен курс по програмиране на C# (2013/2014), занятие №2
Училищен курс по програмиране на C# (2013/2014), занятие №2Училищен курс по програмиране на C# (2013/2014), занятие №2
Училищен курс по програмиране на C# (2013/2014), занятие №2
 
Курс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSSКурс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSS
 
Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №3Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №3
 
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...
 
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTML
 
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
 
Въведение в Perl
Въведение в PerlВъведение в Perl
Въведение в Perl
 
Курс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSКурс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSS
 
Скаларни типове данни
Скаларни типове данниСкаларни типове данни
Скаларни типове данни
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
 
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
 
JDK 1.5 New Features
JDK 1.5 New FeaturesJDK 1.5 New Features
JDK 1.5 New Features
 
Хешове
ХешовеХешове
Хешове
 
Въведение в Python
Въведение в PythonВъведение в Python
Въведение в Python
 

Viewers also liked

Understanding the livestock to nutrition pathway for better outcomes
Understanding the livestock to nutrition pathway for better outcomesUnderstanding the livestock to nutrition pathway for better outcomes
Understanding the livestock to nutrition pathway for better outcomesFrancois Stepman
 
Mycotoxins contamination of animal feed
Mycotoxins contamination of animal feedMycotoxins contamination of animal feed
Mycotoxins contamination of animal feedFrancois Stepman
 
Animal nutrition
Animal nutritionAnimal nutrition
Animal nutrition10frillingb
 
Principles of animal nutrition
Principles of animal nutritionPrinciples of animal nutrition
Principles of animal nutritionSyed Taimur Rahim
 
Dairy Feeding Management
Dairy Feeding ManagementDairy Feeding Management
Dairy Feeding ManagementOsama Zahid
 
Dairy nutrition management
Dairy nutrition managementDairy nutrition management
Dairy nutrition managementVetco India
 
Animal nutrition , 7th edition
Animal nutrition , 7th editionAnimal nutrition , 7th edition
Animal nutrition , 7th editionDrAyman Sayed
 
Feeds, Nutrients and Animal Requirements
Feeds, Nutrients and Animal RequirementsFeeds, Nutrients and Animal Requirements
Feeds, Nutrients and Animal RequirementsNDSUExt
 
Factors affecting quality and quantity of milk in dairy cattle
Factors affecting quality and quantity of milk in dairy cattleFactors affecting quality and quantity of milk in dairy cattle
Factors affecting quality and quantity of milk in dairy cattleDr. IRSHAD A
 

Viewers also liked (11)

Understanding the livestock to nutrition pathway for better outcomes
Understanding the livestock to nutrition pathway for better outcomesUnderstanding the livestock to nutrition pathway for better outcomes
Understanding the livestock to nutrition pathway for better outcomes
 
Mycotoxins contamination of animal feed
Mycotoxins contamination of animal feedMycotoxins contamination of animal feed
Mycotoxins contamination of animal feed
 
Animal nutrition
Animal nutritionAnimal nutrition
Animal nutrition
 
Animal nutrition
Animal nutritionAnimal nutrition
Animal nutrition
 
Principles of animal nutrition
Principles of animal nutritionPrinciples of animal nutrition
Principles of animal nutrition
 
Animal nutrition
Animal nutritionAnimal nutrition
Animal nutrition
 
Dairy Feeding Management
Dairy Feeding ManagementDairy Feeding Management
Dairy Feeding Management
 
Dairy nutrition management
Dairy nutrition managementDairy nutrition management
Dairy nutrition management
 
Animal nutrition , 7th edition
Animal nutrition , 7th editionAnimal nutrition , 7th edition
Animal nutrition , 7th edition
 
Feeds, Nutrients and Animal Requirements
Feeds, Nutrients and Animal RequirementsFeeds, Nutrients and Animal Requirements
Feeds, Nutrients and Animal Requirements
 
Factors affecting quality and quantity of milk in dairy cattle
Factors affecting quality and quantity of milk in dairy cattleFactors affecting quality and quantity of milk in dairy cattle
Factors affecting quality and quantity of milk in dairy cattle
 

More from DAVID Academy

Курс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLКурс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLDAVID Academy
 
Училищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоУчилищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоDAVID Academy
 
Училищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияУчилищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияDAVID Academy
 
Курс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web ServicesКурс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web ServicesDAVID Academy
 
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET FrameworkКурс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET FrameworkDAVID Academy
 
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLКурс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLDAVID Academy
 
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...DAVID Academy
 
Курс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - 0. ПредставянеКурс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - 0. ПредставянеDAVID Academy
 
Курс по информационни технологии (2013) - Помагало
Курс по информационни технологии (2013) - ПомагалоКурс по информационни технологии (2013) - Помагало
Курс по информационни технологии (2013) - ПомагалоDAVID Academy
 
Курс по програмиране на C# (2013) - Упражнения
Курс по програмиране на C# (2013) - УпражненияКурс по програмиране на C# (2013) - Упражнения
Курс по програмиране на C# (2013) - УпражненияDAVID Academy
 
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функцииКурс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функцииDAVID Academy
 

More from DAVID Academy (11)

Курс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLКурс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTML
 
Училищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоУчилищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - Помагало
 
Училищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияУчилищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - Упражнения
 
Курс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web ServicesКурс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web Services
 
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET FrameworkКурс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
 
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLКурс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
 
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
 
Курс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - 0. ПредставянеКурс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - 0. Представяне
 
Курс по информационни технологии (2013) - Помагало
Курс по информационни технологии (2013) - ПомагалоКурс по информационни технологии (2013) - Помагало
Курс по информационни технологии (2013) - Помагало
 
Курс по програмиране на C# (2013) - Упражнения
Курс по програмиране на C# (2013) - УпражненияКурс по програмиране на C# (2013) - Упражнения
Курс по програмиране на C# (2013) - Упражнения
 
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функцииКурс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
 

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

  • 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) – Изнесете поведението, което не е обвързано с конкретен екземпляр на класа, в статични методи
  • 41. Благодаря! • Александър Далемски – sasho@david.bg – Skype: musasho – https://facebook.com/adalemski • ДАВИД академия – acad@david.bg – http://acad.david.bg/ – @david_academy – https://facebook.com/DavidAcademy