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

41
2013 Copyright © 2013 DAVID Holding Company Курс по програмиране на C# Занятие №7 Свойства. Индексатори. Наследяване. Изключения

Upload: adelie

Post on 07-Jan-2016

51 views

Category:

Documents


1 download

DESCRIPTION

Курс по програмиране на C#. Занятие № 7 Свойства. Индексатори. Наследяване. Изключения. Съдържание 1/1. Свойства Индексатори Наследяване Изключения. Какво ще бъде изведено в конзолата?. - PowerPoint PPT Presentation

TRANSCRIPT

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

2013Copyright © 2013 DAVID Holding Company

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

Занятие №7Свойства.

Индексатори.Наследяване. Изключения

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

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

• Свойства• Индексатори• Наследяване• Изключения

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Какво ще бъде изведено в конзолата?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); }}

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Къде е проблемът в кода?

class Person{ public string FirstName; public string LastName;

public Person(string firstName, string lastName) { this.FirstName = firstName; this.LastName = lastName; }}

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Къде е проблемът в кода?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; }}

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Къде е проблемът в кода?class Animal{ private static int _animalCount;

private readonly string _species;

static Animal(int initialCount) { _animalCount = initialCount; }

public Animal(string species) { this._animalCount++; _species = species; }}

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Свойства

• Какво е „свойство“?– Член, с който се борави, както с поле– Не се асоциира с част от паметта на обекта– Не съхранява характеристики на обекта, но

може да служи за достъпването им– Тип данни и наименование– Уникалност на наименованието– Много удобно при капсулиране

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Свойства

• Деклариране на свойства– Тип данни– Наименование – съществително или фраза в

Pascal case– Тяло – блок, съдържащ поне един от следните

блокове:• Блок за четене – префиксира се със служебната

дума get и задължително връща стойност• Блок за записване – префиксира се със служебната

дума set и в него може да се използва служебната дума value за достъпване на присвоената стойност

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Свойства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); } }}

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Свойства

• Пред блоковете за четене или записване може да бъдат поставени модификатори за достъп

public string Name{ get { return _name; } protected set { _name = value; }}

• Позволява различни нива на видимост за двете операции

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Свойства

• Използване на свойства – аналогично с използването на полета

Dog dog = new Dog();dog.Breed = "poodle";Console.WriteLine(dog.Description);

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Свойства

• Автоматично генерирани свойства– Кодът в тялото им не се декларира от

програмиста– Компилаторът създава служебно поле за

съхранение на данните– Удобни за капсулиране на полета – всички

полета трябва да са частни

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Свойства

• Деклариране на автоматично генерирани свойства– Вместо блокове за четене и записване се

поставят само двете служебни думи get и set с точка и запетая след всяка от тях

– Задължително трябва да присъстват и двете служебни думи

– Могат да се използват модификатори за достъп

class Dog{ public string Name { get; protected set; }

public string Breed { get; set; }}

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Свойства

• Статични свойства– Не са обвързани с конктрена инстанция на

класа, а със самия клас– В блоковете за четене и записване не могат да

се използват пряко нестатични членове на класа

– Декларират се с ключовата дума static– Също могат да са автоматично генерирани

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Свойства

class Animal{ private static int _animalCount = 0;

public static int AnimalCount { get { return _animalCount; } set { _animalCount = value; } }}

// Използване на статично свойствоConsole.WriteLine(Animal.AnimalCount);

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Индексатори

• Какво е „индексатор“?– Член, служещ за презаписване на оператора

за достъпване на индексиран елемент []– Един или повече параметри; тип на връщания

резултат– Повече от един индексатори с различни

параметри– Няма статични индексатори

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Индексатори

• Деклариране на индексатори– Сходно с декларирането на свойства– Тип данни на индексирания елемент– Ключова дума this– Списък от един или повече параметри,

заградени в квадратни скоби– Тяло – блок с блокове за четене и/или запис

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Индексатори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; } }}

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Индексатори

• Използване на индексатори– Сходно с индексирането на елементите на

масив– След променливата/израза се поставя списък

от аргументи в квадратни скоби

Dogs dogs = new Dogs();dogs[0] = new Dog("Lassie");Console.WriteLine(dogs["Lassie"].Description);

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Наследяване

• Какво е „наследяване“?– Друг от основните принципи на ООП– Един клас може да наследи друг (родителски)– Наследеният клас придобива всички членове

на родителския– Наследеният клас може да декларира

собствени членове– Част от членовете на родителския клас може

да са недостъпни за наследения заради видимостта си

– Множествено наследяване – в C# няма– Дървовидни йерархии от класове– Класът object – прародител на всички типове

данни

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Наследяване

• Деклариране на наследен клас– Между наименованието на класа и тялото с

декларации на членовете му се поставя двоеточие, следвано от наименованието на родителския клас

class Organism{

}

class Animal : Organism{

}

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Наследяване

• Конструктори на наследен клас– По подразбиране изпълняват конструктора

без параметри на родителския клас– Може да се посочи кой конструктор на

родителския клас да се изпълни – ключовата дума base и списък от аргументи преди тялото на конструктора

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Наследяване

class Organism{ private readonly bool _needsOxygen;

public Organism(bool needsOxygen) { _needsOxygen = needsOxygen; }

public bool NeedsOxygen { get { return _needsOxygen; } }}

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Наследяване

class Animal : Organism{ private readonly bool _isHerbivorous;

public Animal(bool isHerbivorous) : base(true) { _isHerbivorous = isHerbivorous; }

public bool IsHerbivorous { get { return _isHerbivorous; } }}

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Наследяване

class Dog : Animal{ private readonly string _name;

public Dog(string name) : base(false) { _name = name; }

public string Name { get { return _name; } }}

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Наследяване

• Използване на наследени класове– Обектите от наследен клас съдържат

членовете, декларирани в този клас, както и тези, декларирани в родителските класове нагоре по йерархията

– Някои от тези членове може да са с ограничена видимост

Dog dog = new Dog("Bolt");if (dog.NeedsOxygen){ Console.WriteLine( "{0} needs oxygen to survive.", dog.Name);}

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Наследяване

• Какво е превръщане на типове нагоре по йерархията (upcasting)?– Променлива с тип данни родителски клас– Присвояваме израз с тип данни наследен клас– Обектите от наследения клас винаги са

съвместими с родителския клас– Извършва се неявно

Animal animal = new Dog("Шаро");

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Наследяване

• Какво е превръщане на типове надолу по йерархията (downcasting)?– Променлива с тип данни наследен клас– Присвояваме израз с тип данни родителски

клас– Грешка, ако обектът в паметта не е съместим

с наследения клас (неговият тип данни трябва да съвпада с този наследен клас или да го наследява)

– Извършва се явно

Animal animal = new Dog("Шаро");Dog dog = (Dog)animal;

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Наследяване

• Безопасно превръщане на типове– Операторът is– Връща true, когато типът на стойността на

израза отляво съвпада с типа отдясно или го наследява

if (animal is Dog){ Dog dog = (Dog)animal; // операции}

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Наследяване

• Безопасно превръщане на типове– Операторът as– Превръща типа на стойността отляво към типа

отдясно, когато типовете са съвместими– Връща null, когато типовете не са

съвместими– Не може да се използва за нереферентни

типове

Dog dog = animal as Dog;if (dog != null){ // операции}

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Изключения

• Какво е „изключение“?– Обект– Сигнализира за проблем в изпълнението на

програмата (изключителна ситуация)– Съдържа информация за вида на проблема и

състоянието на програмата при възникването му

– Прекратява се изпълнението на текущия код– Търси се блок за обработка на изключения,

който да го обработи– Ако не бъде обработено, преустановява се

изпълнението на програмата с грешка

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Изключения

• Блокове за обработка на изключения– Предоставят механизъм за обработка на

изключения– Операции, възникналите изключения в които

да бъдат обработени– Операции за обработка на изключения– Операции, които да бъдат изпълнени

независимо от възникването на изключения

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Изключения

• Изключения в C#– Базов клас за всички изключения – Exception– Вградени класове за изключения, например ArgumentException, IndexOutOfRangeException и IOException

– Декларирани от програмиста класове за изключения – наименованията им завършват с Exception

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Изключения

• Класът Exception– Message – съобщение за проблема в свободен

текст– StackTrace – състояние на стека от

извиквания на функции при възникването на изключението

– InnerException – вложено изключение

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Изключения

• Предизвикване на изключения– Ключовата дума throw– Израз от тип за изключение

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Изключения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; } }}

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Изключения

• Обработка на изключения – try...catch... finally блокове

try{ // Операции}catch (ArgumentException ex){ // Обработване на ArgumentException}catch (Exception ex){ // Обработване на Exception}finally{ // Операции, които да винаги ще бъдат изпълнени}

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Изключения

• Възможно е при обработката на изключение да се предизвика друго изключение, както и да се предизвика същото отново

Organism organism = new Organism(true);try{ Animal animal = (Animal)organism;}catch (InvalidCastException ex){ Console.WriteLine("The organism is not an animal."); throw;}

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Изключения

• Задължително изпълняване на операции, независимо от възникването на изключения

FileStream fileStream = File.OpenRead(@"C:\File.txt");try{ // Операции}finally{ fileStream.Close();}

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Въпроси?

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

Copyright © 2013 DAVID Holding CompanyCopyright © 2013 DAVID Holding Company

Благодаря!

• Александър Далемски– [email protected][email protected]– Skype: musasho– https://www.facebook.com/adalemski

• ДАВИД академия– [email protected]– http://acad.david.bg/– @david_academy– https://www.facebook.com/groups/david.academy/