SlideShare a Scribd company logo
1 of 41
Курс по програмиране на
C#
Занятие №7
Свойства. Индексатори.
Наследяване. Изключения

2013
Съдържание 1/1
•
•
•
•

Свойства
Индексатори
Наследяване
Изключения
Какво ще бъде изведено в конзолата?
class Book
{
private string _title;
public Book(string title)
{
_title = title;
}
}
class Program
{
static void Main(string[] args)
{
Book book1 = new Book("The Hobbit");
Book book2 = new Book("The Hobbit");
Console.WriteLine(book1 == book2);
}
}
Къде е проблемът в кода?
class Person
{
public string FirstName;
public string LastName;
public Person(string firstName, string lastName)
{
this.FirstName = firstName;
this.LastName = lastName;
}
}
Къде е проблемът в кода?
class Institution
{
private string _name;
private string _address;
public Institution(string name)
{
_name = name;
}
public Institution(string address)
{
_address = address;
}
public string GetName()
{
return _name;
}
public string GetAddress()
{
return _address;
}
}
Къде е проблемът в кода?
class Animal
{
private static int _animalCount;
private readonly string _species;
static Animal(int initialCount)
{
_animalCount = initialCount;
}

public Animal(string species)
{
this._animalCount++;
_species = species;
}
}
Свойства
• Какво е „свойство“?
– Член, с който се борави, както с поле
– Не се асоциира с част от паметта на обекта
– Не съхранява характеристики на обекта, но може да
служи за достъпването им
– Тип данни и наименование
– Уникалност на наименованието
– Много удобно при капсулиране
Свойства
• Деклариране на свойства
– Тип данни
– Наименование – съществително или фраза в Pascal
case
– Тяло – блок, съдържащ поне един от следните
блокове:
• Блок за четене – префиксира се със служебната дума get и
задължително връща стойност
• Блок за записване – префиксира се със служебната дума set
и в него може да се използва служебната дума value за
достъпване на присвоената стойност
Свойства
class Dog
{
private string _name;
private string _breed;
public string Name
{
get { return _name; }
}
public string Breed
{
get { return _breed; }
set { _breed = value; }
}
public string Description
{
get { return string.Format("{0} is a {1}.", _name, _breed); }
}

}
Свойства
• Пред блоковете за четене или записване може
да бъдат поставени модификатори за достъп
public string Name
{
get { return _name; }
protected set { _name = value; }
}

• Позволява различни нива на видимост за двете
операции
Свойства
• Използване на свойства – аналогично с
използването на полета
Dog dog = new Dog();
dog.Breed = "poodle";
Console.WriteLine(dog.Description);
Свойства
• Автоматично генерирани свойства
– Кодът в тялото им не се декларира от програмиста
– Компилаторът създава служебно поле за съхранение
на данните
– Удобни за капсулиране на полета – всички полета
трябва да са частни
Свойства
• Деклариране на автоматично генерирани
свойства
– Вместо блокове за четене и записване се поставят
само двете служебни думи get и set с точка и запетая
след всяка от тях
– Задължително трябва да присъстват и двете служебни
думи
– Могат да се използват модификатори за достъп
class Dog
{
public string Name { get; protected set; }

public string Breed { get; set; }
}
Свойства
• Статични свойства
– Не са обвързани с конктрена инстанция на класа, а
със самия клас
– В блоковете за четене и записване не могат да се
използват пряко нестатични членове на класа
– Декларират се с ключовата дума static
– Също могат да са автоматично генерирани
Свойства
class Animal
{
private static int _animalCount = 0;

public static int AnimalCount
{
get { return _animalCount; }
set { _animalCount = value; }
}
}
// Използване на статично свойство
Console.WriteLine(Animal.AnimalCount);
Индексатори
• Какво е „индексатор“?
– Член, служещ за презаписване на оператора за
достъпване на индексиран елемент []
– Един или повече параметри; тип на връщания
резултат
– Повече от един индексатори с различни параметри
– Няма статични индексатори
Индексатори
• Деклариране на индексатори
Сходно с декларирането на свойства
Тип данни на индексирания елемент
Ключова дума this
Списък от един или повече параметри, заградени в
квадратни скоби
– Тяло – блок с блокове за четене и/или запис
–
–
–
–
Индексатори
class Dogs
{
private readonly Dog[] _dogs = new Dog[50];
public Dog this[int index]
{
get { return _dogs[index]; }
set { _dogs[index] = value; }
}
public Dog this[string name]
{
get
{
foreach (Dog dog in _dogs)
{
if (dog != null && dog.Name == name)
return dog;
}
return null;
}
}
}
Индексатори
• Използване на индексатори
– Сходно с индексирането на елементите на масив
– След променливата/израза се поставя списък от
аргументи в квадратни скоби
Dogs dogs = new Dogs();
dogs[0] = new Dog("Lassie");
Console.WriteLine(dogs["Lassie"].Description);
Наследяване
• Какво е „наследяване“?
– Друг от основните принципи на ООП
– Един клас може да наследи друг (родителски)
– Наследеният клас придобива всички членове на
родителския
– Наследеният клас може да декларира собствени
членове
– Част от членовете на родителския клас може да са
недостъпни за наследения заради видимостта си
– Множествено наследяване – в C# няма
– Дървовидни йерархии от класове
– Класът object – прародител на всички типове данни
Наследяване
• Деклариране на наследен клас
– Между наименованието на класа и тялото с
декларации на членовете му се поставя
двоеточие, следвано от наименованието на
родителския клас
class Organism
{
}
class Animal : Organism
{
}
Наследяване
• Конструктори на наследен клас
– По подразбиране изпълняват конструктора без
параметри на родителския клас
– Може да се посочи кой конструктор на родителския
клас да се изпълни – ключовата дума base и списък от
аргументи преди тялото на конструктора
Наследяване
class Organism
{
private readonly bool _needsOxygen;
public Organism(bool needsOxygen)
{
_needsOxygen = needsOxygen;
}
public bool NeedsOxygen
{
get { return _needsOxygen; }
}
}
Наследяване
class Animal : Organism
{
private readonly bool _isHerbivorous;
public Animal(bool isHerbivorous)
: base(true)
{
_isHerbivorous = isHerbivorous;
}
public bool IsHerbivorous
{
get { return _isHerbivorous; }
}
}
Наследяване
class Dog : Animal
{
private readonly string _name;
public Dog(string name)
: base(false)
{
_name = name;
}
public string Name
{
get { return _name; }
}
}
Наследяване
• Използване на наследени класове
– Обектите от наследен клас съдържат членовете,
декларирани в този клас, както и тези, декларирани в
родителските класове нагоре по йерархията
– Някои от тези членове може да са с ограничена
видимост
Dog dog = new Dog("Bolt");
if (dog.NeedsOxygen)
{
Console.WriteLine(
"{0} needs oxygen to survive.", dog.Name);
}
Наследяване
• Какво е превръщане на типове нагоре по
йерархията (upcasting)?
– Променлива с тип данни родителски клас
– Присвояваме израз с тип данни наследен клас
– Обектите от наследения клас винаги са съвместими с
родителския клас
– Извършва се неявно
Animal animal = new Dog("Шаро");
Наследяване
• Какво е превръщане на типове надолу по
йерархията (downcasting)?
– Променлива с тип данни наследен клас
– Присвояваме израз с тип данни родителски клас
– Грешка, ако обектът в паметта не е съместим с
наследения клас (неговият тип данни трябва да
съвпада с този наследен клас или да го наследява)
– Извършва се явно
Animal animal = new Dog("Шаро");
Dog dog = (Dog)animal;
Наследяване
• Безопасно превръщане на типове
– Операторът is
– Връща true, когато типът на стойността на израза
отляво съвпада с типа отдясно или го наследява
if (animal is Dog)
{
Dog dog = (Dog)animal;
// операции
}
Наследяване
• Безопасно превръщане на типове
– Операторът as
– Превръща типа на стойността отляво към типа
отдясно, когато типовете са съвместими
– Връща null, когато типовете не са съвместими
– Не може да се използва за нереферентни типове
Dog dog = animal as Dog;
if (dog != null)
{
// операции
}
Изключения
• Какво е „изключение“?
– Обект
– Сигнализира за проблем в изпълнението на
програмата (изключителна ситуация)
– Съдържа информация за вида на проблема и
състоянието на програмата при възникването му
– Прекратява се изпълнението на текущия код
– Търси се блок за обработка на изключения, който да
го обработи
– Ако не бъде обработено, преустановява се
изпълнението на програмата с грешка
Изключения
• Блокове за обработка на изключения
– Предоставят механизъм за обработка на изключения
– Операции, възникналите изключения в които да бъдат
обработени
– Операции за обработка на изключения
– Операции, които да бъдат изпълнени независимо от
възникването на изключения
Изключения
• Изключения в C#
– Базов клас за всички изключения – Exception
– Вградени класове за изключения, например
ArgumentException, IndexOutOfRangeException и
IOException
– Декларирани от програмиста класове за изключения
– наименованията им завършват с Exception
Изключения
• Класът Exception
– Message – съобщение за проблема в свободен текст
– StackTrace – състояние на стека от извиквания на
функции при възникването на изключението
– InnerException – вложено изключение
Изключения
• Предизвикване на изключения
– Ключовата дума throw
– Израз от тип за изключение
Изключения
class Dog
{
private readonly string _name;
public Dog(string name)
{
if (string.IsNullOrEmpty(name))
{
throw new ArgumentException(
"Every self-respecting dog should have a name.");
}
_name = name;
}
public string Name
{
get { return _name; }
}
}
Изключения
• Обработка на изключения – try...catch...
finally блокове
try
{

// Операции
}
catch (ArgumentException ex)
{
// Обработване на ArgumentException
}
catch (Exception ex)
{
// Обработване на Exception
}
finally
{
// Операции, които да винаги ще бъдат изпълнени
}
Изключения
• Възможно е при обработката на изключение да
се предизвика друго изключение, както и да се
предизвика същото отново
Organism organism = new Organism(true);
try
{
Animal animal = (Animal)organism;
}
catch (InvalidCastException ex)
{
Console.WriteLine("The organism is not an animal.");
throw;
}
Изключения
• Задължително изпълняване на операции,
независимо от възникването на изключения
FileStream fileStream = File.OpenRead(@"C:File.txt");
try
{
// Операции
}
finally
{
fileStream.Close();
}
Въпроси?
Благодаря!
• Александър Далемски
–
–
–
–

sasho@david.bg
musashi.bg@gmail.com
Skype: musasho
https://www.facebook.com/adalemski

• ДАВИД академия
–
–
–
–

acad@david.bg
http://acad.david.bg/
@david_academy
https://www.facebook.com/groups/david.academy/

More Related Content

What's hot

Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №4
Училищен курс по програмиране на C# (2013/2014), занятие №4Училищен курс по програмиране на C# (2013/2014), занятие №4
Училищен курс по програмиране на C# (2013/2014), занятие №4DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13DAVID Academy
 
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)DAVID Academy
 
JDK 1.5 New Features
JDK 1.5 New FeaturesJDK 1.5 New Features
JDK 1.5 New FeaturesSvetlin Nakov
 
Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12DAVID Academy
 
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#DAVID Academy
 
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №3Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №3DAVID 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), занятие №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
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLDAVID Academy
 
Курс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSКурс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSDAVID Academy
 

What's hot (15)

Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9
 
Училищен курс по програмиране на C# (2013/2014), занятие №4
Училищен курс по програмиране на C# (2013/2014), занятие №4Училищен курс по програмиране на C# (2013/2014), занятие №4
Училищен курс по програмиране на C# (2013/2014), занятие №4
 
Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13Училищен курс по програмиране на C# (2013/2014), занятие №13
Училищен курс по програмиране на C# (2013/2014), занятие №13
 
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
Курс по уеб програмиране (2014), занятие №4 - JavaScript (част 2/2)
 
JDK 1.5 New Features
JDK 1.5 New FeaturesJDK 1.5 New Features
JDK 1.5 New Features
 
Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12
 
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
 
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...
 
Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №3Училищен курс по програмиране на C# (2013/2014), занятие №3
Училищен курс по програмиране на C# (2013/2014), занятие №3
 
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
 
Училищен курс по програмиране на 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
 
Скаларни типове данни
Скаларни типове данниСкаларни типове данни
Скаларни типове данни
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTML
 
Курс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSКурс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSS
 

Viewers also liked

Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...
Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...
Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...DAVID Academy
 
Ecommerce SEO - Lily Grozeva
Ecommerce SEO - Lily GrozevaEcommerce SEO - Lily Grozeva
Ecommerce SEO - Lily GrozevaLily Grozeva
 
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...DAVID Academy
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)DAVID Academy
 
SEO курс, лекция 12 - Статистики и измерване
SEO курс, лекция 12 - Статистики и измерванеSEO курс, лекция 12 - Статистики и измерване
SEO курс, лекция 12 - Статистики и измерванеLily Grozeva
 
SEO курс 2014, лекция 9 - Линк бейт, който носи линкове, част 1
SEO курс 2014, лекция 9 - Линк бейт, който носи линкове, част 1SEO курс 2014, лекция 9 - Линк бейт, който носи линкове, част 1
SEO курс 2014, лекция 9 - Линк бейт, който носи линкове, част 1Lily Grozeva
 
Курс по програмиране за напреднали (2012) - 8. Софтуерни проекти. Софтуерни и...
Курс по програмиране за напреднали (2012) - 8. Софтуерни проекти. Софтуерни и...Курс по програмиране за напреднали (2012) - 8. Софтуерни проекти. Софтуерни и...
Курс по програмиране за напреднали (2012) - 8. Софтуерни проекти. Софтуерни и...DAVID Academy
 
SEO курс, лекция 11 - От заявка до рендиране
SEO курс, лекция 11 - От заявка до рендиранеSEO курс, лекция 11 - От заявка до рендиране
SEO курс, лекция 11 - От заявка до рендиранеLily Grozeva
 
SEO курс 2014, лекция 10 - Линк бейт, който носи линкове, част 2
SEO курс 2014, лекция 10  - Линк бейт, който носи линкове, част 2SEO курс 2014, лекция 10  - Линк бейт, който носи линкове, част 2
SEO курс 2014, лекция 10 - Линк бейт, който носи линкове, част 2Lily Grozeva
 
SEO курс 2014, лекция 7 - Анализ на конкуренцията
SEO курс 2014, лекция 7 - Анализ на конкуренциятаSEO курс 2014, лекция 7 - Анализ на конкуренцията
SEO курс 2014, лекция 7 - Анализ на конкуренциятаLily Grozeva
 
SEO курс 2014, лекция 4: Техническа оптимизация, част 2
SEO курс 2014, лекция 4: Техническа оптимизация, част 2SEO курс 2014, лекция 4: Техническа оптимизация, част 2
SEO курс 2014, лекция 4: Техническа оптимизация, част 2Lily Grozeva
 
SEO курс, лекция 5 - Анализ на ключови думи
SEO курс, лекция 5 - Анализ на ключови думиSEO курс, лекция 5 - Анализ на ключови думи
SEO курс, лекция 5 - Анализ на ключови думиLily Grozeva
 
SEO курс 2014, лекция 8 - Линк анализ
SEO курс 2014, лекция 8 - Линк анализSEO курс 2014, лекция 8 - Линк анализ
SEO курс 2014, лекция 8 - Линк анализLily Grozeva
 
Училищен курс по програмиране на C# (2013/2014), занятие №1
Училищен курс по програмиране на C# (2013/2014), занятие №1Училищен курс по програмиране на C# (2013/2014), занятие №1
Училищен курс по програмиране на C# (2013/2014), занятие №1DAVID Academy
 
SEO курс 2014, лекция 3: Техническа оптимизация, част 1
SEO курс 2014, лекция 3: Техническа оптимизация, част 1SEO курс 2014, лекция 3: Техническа оптимизация, част 1
SEO курс 2014, лекция 3: Техническа оптимизация, част 1Lily Grozeva
 
SEO курс 2014, лекция 2 - Onpage оптимизация
SEO курс 2014, лекция 2 - Onpage оптимизацияSEO курс 2014, лекция 2 - Onpage оптимизация
SEO курс 2014, лекция 2 - Onpage оптимизацияLily Grozeva
 
SEO курс 2014, лекция 6 - Информационна архитектура
SEO курс 2014, лекция 6 - Информационна архитектураSEO курс 2014, лекция 6 - Информационна архитектура
SEO курс 2014, лекция 6 - Информационна архитектураLily Grozeva
 
SEO курс, лекция 13 - SEO инструментариум
SEO курс, лекция 13 - SEO инструментариумSEO курс, лекция 13 - SEO инструментариум
SEO курс, лекция 13 - SEO инструментариумLily Grozeva
 

Viewers also liked (18)

Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...
Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...
Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...
 
Ecommerce SEO - Lily Grozeva
Ecommerce SEO - Lily GrozevaEcommerce SEO - Lily Grozeva
Ecommerce SEO - Lily Grozeva
 
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
 
SEO курс, лекция 12 - Статистики и измерване
SEO курс, лекция 12 - Статистики и измерванеSEO курс, лекция 12 - Статистики и измерване
SEO курс, лекция 12 - Статистики и измерване
 
SEO курс 2014, лекция 9 - Линк бейт, който носи линкове, част 1
SEO курс 2014, лекция 9 - Линк бейт, който носи линкове, част 1SEO курс 2014, лекция 9 - Линк бейт, който носи линкове, част 1
SEO курс 2014, лекция 9 - Линк бейт, който носи линкове, част 1
 
Курс по програмиране за напреднали (2012) - 8. Софтуерни проекти. Софтуерни и...
Курс по програмиране за напреднали (2012) - 8. Софтуерни проекти. Софтуерни и...Курс по програмиране за напреднали (2012) - 8. Софтуерни проекти. Софтуерни и...
Курс по програмиране за напреднали (2012) - 8. Софтуерни проекти. Софтуерни и...
 
SEO курс, лекция 11 - От заявка до рендиране
SEO курс, лекция 11 - От заявка до рендиранеSEO курс, лекция 11 - От заявка до рендиране
SEO курс, лекция 11 - От заявка до рендиране
 
SEO курс 2014, лекция 10 - Линк бейт, който носи линкове, част 2
SEO курс 2014, лекция 10  - Линк бейт, който носи линкове, част 2SEO курс 2014, лекция 10  - Линк бейт, който носи линкове, част 2
SEO курс 2014, лекция 10 - Линк бейт, който носи линкове, част 2
 
SEO курс 2014, лекция 7 - Анализ на конкуренцията
SEO курс 2014, лекция 7 - Анализ на конкуренциятаSEO курс 2014, лекция 7 - Анализ на конкуренцията
SEO курс 2014, лекция 7 - Анализ на конкуренцията
 
SEO курс 2014, лекция 4: Техническа оптимизация, част 2
SEO курс 2014, лекция 4: Техническа оптимизация, част 2SEO курс 2014, лекция 4: Техническа оптимизация, част 2
SEO курс 2014, лекция 4: Техническа оптимизация, част 2
 
SEO курс, лекция 5 - Анализ на ключови думи
SEO курс, лекция 5 - Анализ на ключови думиSEO курс, лекция 5 - Анализ на ключови думи
SEO курс, лекция 5 - Анализ на ключови думи
 
SEO курс 2014, лекция 8 - Линк анализ
SEO курс 2014, лекция 8 - Линк анализSEO курс 2014, лекция 8 - Линк анализ
SEO курс 2014, лекция 8 - Линк анализ
 
Училищен курс по програмиране на C# (2013/2014), занятие №1
Училищен курс по програмиране на C# (2013/2014), занятие №1Училищен курс по програмиране на C# (2013/2014), занятие №1
Училищен курс по програмиране на C# (2013/2014), занятие №1
 
SEO курс 2014, лекция 3: Техническа оптимизация, част 1
SEO курс 2014, лекция 3: Техническа оптимизация, част 1SEO курс 2014, лекция 3: Техническа оптимизация, част 1
SEO курс 2014, лекция 3: Техническа оптимизация, част 1
 
SEO курс 2014, лекция 2 - Onpage оптимизация
SEO курс 2014, лекция 2 - Onpage оптимизацияSEO курс 2014, лекция 2 - Onpage оптимизация
SEO курс 2014, лекция 2 - Onpage оптимизация
 
SEO курс 2014, лекция 6 - Информационна архитектура
SEO курс 2014, лекция 6 - Информационна архитектураSEO курс 2014, лекция 6 - Информационна архитектура
SEO курс 2014, лекция 6 - Информационна архитектура
 
SEO курс, лекция 13 - SEO инструментариум
SEO курс, лекция 13 - SEO инструментариумSEO курс, лекция 13 - SEO инструментариум
SEO курс, лекция 13 - SEO инструментариум
 

Similar to Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изключения

Web applications with Catalyst BG
Web applications with Catalyst BGWeb applications with Catalyst BG
Web applications with Catalyst BGsvilen.ivanov
 
Курс по информационни технологии (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
 
18 operatori i funkcii
18 operatori i funkcii18 operatori i funkcii
18 operatori i funkciiIvan Peev
 
BARS - Regular Expressions - Svetlin Nakov, George Penkov
BARS - Regular Expressions - Svetlin Nakov, George PenkovBARS - Regular Expressions - Svetlin Nakov, George Penkov
BARS - Regular Expressions - Svetlin Nakov, George PenkovSvetlin Nakov
 
Курс по информационни технологии (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
 
Информационни системи - упражнение № 1
Информационни системи - упражнение № 1Информационни системи - упражнение № 1
Информационни системи - упражнение № 1Tsvetelin Pavlov
 
High Quality Code Introduction
High Quality Code IntroductionHigh Quality Code Introduction
High Quality Code IntroductionSvetlin Nakov
 
Nakov High Quality Code
Nakov High Quality CodeNakov High Quality Code
Nakov High Quality CodeSvetlin Nakov
 

Similar to Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изключения (10)

Web applications with Catalyst BG
Web applications with Catalyst BGWeb applications with Catalyst BG
Web applications with Catalyst BG
 
Курс по информационни технологии (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
 
18 operatori i funkcii
18 operatori i funkcii18 operatori i funkcii
18 operatori i funkcii
 
BARS - Regular Expressions - Svetlin Nakov, George Penkov
BARS - Regular Expressions - Svetlin Nakov, George PenkovBARS - Regular Expressions - Svetlin Nakov, George Penkov
BARS - Regular Expressions - Svetlin Nakov, George Penkov
 
Writing tests in Go
Writing tests in GoWriting tests in Go
Writing tests in Go
 
Курс по информационни технологии (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
 
Информационни системи - упражнение № 1
Информационни системи - упражнение № 1Информационни системи - упражнение № 1
Информационни системи - упражнение № 1
 
Въведение в Perl
Въведение в PerlВъведение в Perl
Въведение в Perl
 
High Quality Code Introduction
High Quality Code IntroductionHigh Quality Code Introduction
High Quality Code Introduction
 
Nakov High Quality Code
Nakov High Quality CodeNakov High Quality Code
Nakov High Quality Code
 

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) - 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 (9)

Курс по уеб програмиране (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) - 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 - 7. Свойства. Индексатори. Наследяване. Изключения

  • 1. Курс по програмиране на C# Занятие №7 Свойства. Индексатори. Наследяване. Изключения 2013
  • 3. Какво ще бъде изведено в конзолата? class Book { private string _title; public Book(string title) { _title = title; } } class Program { static void Main(string[] args) { Book book1 = new Book("The Hobbit"); Book book2 = new Book("The Hobbit"); Console.WriteLine(book1 == book2); } }
  • 4. Къде е проблемът в кода? class Person { public string FirstName; public string LastName; public Person(string firstName, string lastName) { this.FirstName = firstName; this.LastName = lastName; } }
  • 5. Къде е проблемът в кода? class Institution { private string _name; private string _address; public Institution(string name) { _name = name; } public Institution(string address) { _address = address; } public string GetName() { return _name; } public string GetAddress() { return _address; } }
  • 6. Къде е проблемът в кода? class Animal { private static int _animalCount; private readonly string _species; static Animal(int initialCount) { _animalCount = initialCount; } public Animal(string species) { this._animalCount++; _species = species; } }
  • 7. Свойства • Какво е „свойство“? – Член, с който се борави, както с поле – Не се асоциира с част от паметта на обекта – Не съхранява характеристики на обекта, но може да служи за достъпването им – Тип данни и наименование – Уникалност на наименованието – Много удобно при капсулиране
  • 8. Свойства • Деклариране на свойства – Тип данни – Наименование – съществително или фраза в Pascal case – Тяло – блок, съдържащ поне един от следните блокове: • Блок за четене – префиксира се със служебната дума get и задължително връща стойност • Блок за записване – префиксира се със служебната дума set и в него може да се използва служебната дума value за достъпване на присвоената стойност
  • 9. Свойства class Dog { private string _name; private string _breed; public string Name { get { return _name; } } public string Breed { get { return _breed; } set { _breed = value; } } public string Description { get { return string.Format("{0} is a {1}.", _name, _breed); } } }
  • 10. Свойства • Пред блоковете за четене или записване може да бъдат поставени модификатори за достъп public string Name { get { return _name; } protected set { _name = value; } } • Позволява различни нива на видимост за двете операции
  • 11. Свойства • Използване на свойства – аналогично с използването на полета Dog dog = new Dog(); dog.Breed = "poodle"; Console.WriteLine(dog.Description);
  • 12. Свойства • Автоматично генерирани свойства – Кодът в тялото им не се декларира от програмиста – Компилаторът създава служебно поле за съхранение на данните – Удобни за капсулиране на полета – всички полета трябва да са частни
  • 13. Свойства • Деклариране на автоматично генерирани свойства – Вместо блокове за четене и записване се поставят само двете служебни думи get и set с точка и запетая след всяка от тях – Задължително трябва да присъстват и двете служебни думи – Могат да се използват модификатори за достъп class Dog { public string Name { get; protected set; } public string Breed { get; set; } }
  • 14. Свойства • Статични свойства – Не са обвързани с конктрена инстанция на класа, а със самия клас – В блоковете за четене и записване не могат да се използват пряко нестатични членове на класа – Декларират се с ключовата дума static – Също могат да са автоматично генерирани
  • 15. Свойства class Animal { private static int _animalCount = 0; public static int AnimalCount { get { return _animalCount; } set { _animalCount = value; } } } // Използване на статично свойство Console.WriteLine(Animal.AnimalCount);
  • 16. Индексатори • Какво е „индексатор“? – Член, служещ за презаписване на оператора за достъпване на индексиран елемент [] – Един или повече параметри; тип на връщания резултат – Повече от един индексатори с различни параметри – Няма статични индексатори
  • 17. Индексатори • Деклариране на индексатори Сходно с декларирането на свойства Тип данни на индексирания елемент Ключова дума this Списък от един или повече параметри, заградени в квадратни скоби – Тяло – блок с блокове за четене и/или запис – – – –
  • 18. Индексатори class Dogs { private readonly Dog[] _dogs = new Dog[50]; public Dog this[int index] { get { return _dogs[index]; } set { _dogs[index] = value; } } public Dog this[string name] { get { foreach (Dog dog in _dogs) { if (dog != null && dog.Name == name) return dog; } return null; } } }
  • 19. Индексатори • Използване на индексатори – Сходно с индексирането на елементите на масив – След променливата/израза се поставя списък от аргументи в квадратни скоби Dogs dogs = new Dogs(); dogs[0] = new Dog("Lassie"); Console.WriteLine(dogs["Lassie"].Description);
  • 20. Наследяване • Какво е „наследяване“? – Друг от основните принципи на ООП – Един клас може да наследи друг (родителски) – Наследеният клас придобива всички членове на родителския – Наследеният клас може да декларира собствени членове – Част от членовете на родителския клас може да са недостъпни за наследения заради видимостта си – Множествено наследяване – в C# няма – Дървовидни йерархии от класове – Класът object – прародител на всички типове данни
  • 21. Наследяване • Деклариране на наследен клас – Между наименованието на класа и тялото с декларации на членовете му се поставя двоеточие, следвано от наименованието на родителския клас class Organism { } class Animal : Organism { }
  • 22. Наследяване • Конструктори на наследен клас – По подразбиране изпълняват конструктора без параметри на родителския клас – Може да се посочи кой конструктор на родителския клас да се изпълни – ключовата дума base и списък от аргументи преди тялото на конструктора
  • 23. Наследяване class Organism { private readonly bool _needsOxygen; public Organism(bool needsOxygen) { _needsOxygen = needsOxygen; } public bool NeedsOxygen { get { return _needsOxygen; } } }
  • 24. Наследяване class Animal : Organism { private readonly bool _isHerbivorous; public Animal(bool isHerbivorous) : base(true) { _isHerbivorous = isHerbivorous; } public bool IsHerbivorous { get { return _isHerbivorous; } } }
  • 25. Наследяване class Dog : Animal { private readonly string _name; public Dog(string name) : base(false) { _name = name; } public string Name { get { return _name; } } }
  • 26. Наследяване • Използване на наследени класове – Обектите от наследен клас съдържат членовете, декларирани в този клас, както и тези, декларирани в родителските класове нагоре по йерархията – Някои от тези членове може да са с ограничена видимост Dog dog = new Dog("Bolt"); if (dog.NeedsOxygen) { Console.WriteLine( "{0} needs oxygen to survive.", dog.Name); }
  • 27. Наследяване • Какво е превръщане на типове нагоре по йерархията (upcasting)? – Променлива с тип данни родителски клас – Присвояваме израз с тип данни наследен клас – Обектите от наследения клас винаги са съвместими с родителския клас – Извършва се неявно Animal animal = new Dog("Шаро");
  • 28. Наследяване • Какво е превръщане на типове надолу по йерархията (downcasting)? – Променлива с тип данни наследен клас – Присвояваме израз с тип данни родителски клас – Грешка, ако обектът в паметта не е съместим с наследения клас (неговият тип данни трябва да съвпада с този наследен клас или да го наследява) – Извършва се явно Animal animal = new Dog("Шаро"); Dog dog = (Dog)animal;
  • 29. Наследяване • Безопасно превръщане на типове – Операторът is – Връща true, когато типът на стойността на израза отляво съвпада с типа отдясно или го наследява if (animal is Dog) { Dog dog = (Dog)animal; // операции }
  • 30. Наследяване • Безопасно превръщане на типове – Операторът as – Превръща типа на стойността отляво към типа отдясно, когато типовете са съвместими – Връща null, когато типовете не са съвместими – Не може да се използва за нереферентни типове Dog dog = animal as Dog; if (dog != null) { // операции }
  • 31. Изключения • Какво е „изключение“? – Обект – Сигнализира за проблем в изпълнението на програмата (изключителна ситуация) – Съдържа информация за вида на проблема и състоянието на програмата при възникването му – Прекратява се изпълнението на текущия код – Търси се блок за обработка на изключения, който да го обработи – Ако не бъде обработено, преустановява се изпълнението на програмата с грешка
  • 32. Изключения • Блокове за обработка на изключения – Предоставят механизъм за обработка на изключения – Операции, възникналите изключения в които да бъдат обработени – Операции за обработка на изключения – Операции, които да бъдат изпълнени независимо от възникването на изключения
  • 33. Изключения • Изключения в C# – Базов клас за всички изключения – Exception – Вградени класове за изключения, например ArgumentException, IndexOutOfRangeException и IOException – Декларирани от програмиста класове за изключения – наименованията им завършват с Exception
  • 34. Изключения • Класът Exception – Message – съобщение за проблема в свободен текст – StackTrace – състояние на стека от извиквания на функции при възникването на изключението – InnerException – вложено изключение
  • 35. Изключения • Предизвикване на изключения – Ключовата дума throw – Израз от тип за изключение
  • 36. Изключения class Dog { private readonly string _name; public Dog(string name) { if (string.IsNullOrEmpty(name)) { throw new ArgumentException( "Every self-respecting dog should have a name."); } _name = name; } public string Name { get { return _name; } } }
  • 37. Изключения • Обработка на изключения – try...catch... finally блокове try { // Операции } catch (ArgumentException ex) { // Обработване на ArgumentException } catch (Exception ex) { // Обработване на Exception } finally { // Операции, които да винаги ще бъдат изпълнени }
  • 38. Изключения • Възможно е при обработката на изключение да се предизвика друго изключение, както и да се предизвика същото отново Organism organism = new Organism(true); try { Animal animal = (Animal)organism; } catch (InvalidCastException ex) { Console.WriteLine("The organism is not an animal."); throw; }
  • 39. Изключения • Задължително изпълняване на операции, независимо от възникването на изключения FileStream fileStream = File.OpenRead(@"C:File.txt"); try { // Операции } finally { fileStream.Close(); }
  • 41. Благодаря! • Александър Далемски – – – – sasho@david.bg musashi.bg@gmail.com Skype: musasho https://www.facebook.com/adalemski • ДАВИД академия – – – – acad@david.bg http://acad.david.bg/ @david_academy https://www.facebook.com/groups/david.academy/