ExpC_Module 8ru_1.ppt
- Количество слайдов: 18
Модуль 8 Абстрактные классы и интерфейсы
Обзор модуля В этом модуле вы изучите n Абстрактные классы n Интерфейсы с реализацией множественного наследования n Абстрактные классы и интерфейсы Изучение C#/ Модуль 8/ 2 из 18
Занятие 1 - Абстрактные классы На первом занятии, Абстрактные классы, вы изучите: n Определение абстрактных классов. n Реализацию абстрактных классов. n Определение абстрактных методов. Изучение C#/ Модуль 8/ 3 из 18
Назначение n n Абстрактный класс можно назвать неполным базовым классом. Нельзя создавать экземпляры этого класса, а только подклассы. Изучение C#/ Модуль 8/ 4 из 18
Определение n Абстрактный Синтаксис Пример класс может реализовывать методы, аналогичные для Animal public abstract class всех подклассов. public abstract class <Class. Name> { { <access_modifier> реализация<return_type> //Не-абстрактная abstract метода public void Eat() n Он <Method. Name>(argument_list); может объявлять методы, различные для } { различных подклассов, без их реализации. Console. Write. Line(“Every animal eats food in где, order to survive”); abstract: Указывает, что объявляемый класс абстрактный. } Class. Name: определяет имя класса. //Объявление абстрактного метода n Класс, определяемый с помощью ключевого public abstract void Animal. Sound(); слова abstractvoid Habitat(); как минимум public abstract и содержащий } один метод, не реализованный в своем классе, называется абстрактным классом. Изучение C#/ Модуль 8/ 5 из 18
Реализация n Абстрактный Вывод Синтаксис Пример класс может быть реализован способом, аналогичным реализации нормального Lion abstract<Class. Name> : <Abstract. Class. Name> classroars Animal { Every animalкласса. {базового eats food in order to survive public void Eat() } { // элементы класса Console. Write. Line(“Every animal eats food in order to survive”); } public abstract void Animal. Sound(); Подкласс, наследующий абстрактный класс, имя должен замещать и реализоватьнаследуемого методы абстрактного класса. n где, n } class Lion Abstract. Class. Name: Указывает : Animal { абстрактного класса. public override void Animal. Sound() { Console. Write. Line(“Lion roars”); } static void Main(string[] args) { Lion obj. Lion = new Lion(); obj. Lion. Animal. Sound(); obj. Lion. Eat(); } } Подкласс может реализовать методы, реализованные в абстрактном класса с тем же именем и аргументами. Изучение C#/ Модуль 8/ 6 из 18
Абстрактные методы n n Методы в абстрактном классе, объявленные без тела метода, называются абстрактными. Они объявляются с модификатором доступа, возвращаемым типом и сигнатурой. Они не имеют тела, и объявление метода заканчивается точкой с запятой. Обеспечивают общую функциональность для классов, наследующих абстрактный класс. Изучение C#/ Модуль 8/ 7 из 18
Занятие 2 - Интерфейсы с реализацией множественного наследования На втором занятии, Интерфейсы с реализацией множественного наследования, вы изучите: n Объяснение интерфейса в C#. n Реализацию интерфейсов n Реализация множественного наследования в интерфейсах n Реализация явного множественного наследования в интерфейсах. n Наследование интерфейса. Изучение C#/ Модуль 8/ 8 из 18
Назначение n n Подкласс в C# не может наследовать два и более базовых класса. C# не поддерживает множественное наследование. Для преодоления этого недостатка существуют интерфейсы. Класс в C# может реализовывать множество интерфейсов. Изучение C#/ Модуль 8/ 9 из 18
Интерфейсы n Интерфейс Пример Синтаксис элементы. содержит только абстрактные interface <Interface. Name> IAnimal { // элементы интерфейса void Animal. Type(); n } Интерфейс может только наследоваться классами или другими интерфейсами. где, interface: Объявление интерфейса. Interface. Name: Имя интерфейса. n n Интерфейс объявляется ключевым словом interface. По умолчанию в C# все элементы, объявленные в интерфейсе, имеют модификатор доступа public. Изучение C#/ Модуль 8/ 10 из 18
Реализация интерфейса n Интерфейс Вывод Пример Синтаксис реализуется классом или способом, аналогичным Can be <Class. Name>наследованию класса. interface IAnimal class housed with : human beings <Interface. Name> { { void Habitat(); методов интерфейса. //Реализация Если все методы не реализованы, класс не } {может быть скомпилирован. public void Habitat() } n class// элементы класса Dog : IAnimal где, { n Interface. Name: определяет имя интерфейса. Console. Write. Line(“Can be housed with human beings”); Методы, реализованные в классе, должны быть } static void с теми же именами и сигнатурами, объявлены Main(string[] args) { как описано в= интерфейсе. Dog obj. Dog new Dog(); obj. Dog. Habitat(); } } Изучение C#/ Модуль 8/ 11 из 18
Интерфейсы с реализацией множественного наследования n Несколько Вывод Пример Синтаксис интерфейсов могут быть реализованы в Crocodile eats Theодном классе. flesh class <Class. Name> : <Interface 1>, <Interface 2> interface ITerrestrial. Animal { void Eat(); } interface IMarine. Animal { void Swim(); } class Crocodile : ITerrestrial. Animal, IMarine. Animal { public void Eat() { Console. Write. Line(“The Crocodile eats flesh”); } public void Swim() { Console. Write. Line(“The Crocodile can swim four times faster than an Olympic swimmer”); } static void Main(string[] args) { Crocodile obj. Crocodile = new Crocodile(); obj. Crocodile. Eat(); obj. Crocodile. Swim(); } } The Crocodile can swim four times faster than an Olympic { swimmer //Реализация методов интерфейса. n } Реализация возможна размещением запятых между именами интерфейсов при реализации их Interface 1: Имя первого интерфейса. в классе. где, Interface 2: Имя второго интерфейса. n Ключевое слово override не используется при реализации абстрактных методов интерфейса. Изучение C#/ Модуль 8/ 12 из 18
Явная реализация интерфейса n Класс должен явно реализовать несколько Вывод Пример Синтаксис интерфейсов, если они имеют методы с public ITerrestrial. Animal interface string Eat. Terrestrial() Crocodile eats other animals class <Class. Name> : <Interface 1>, <Interface 2> { { одинаковыми именами. { Crocodile eats fish and marine animals ITerrestrial. Animal obj. Ter. Animal; string Eat(); <access modifier> Interface 1. Method(); n n obj. Ter. Animal = this; } { return obj. Ter. Animal. Eat(); interface IMarine. Animal } { //выражения; public string Eat. Marine() string Eat(); { } } IMarine. Animal obj. Mar. Animal; <access modifier> Interface 2. Method(); class Crocodile : ITerrestrial. Animal, IMarine. Animal obj. Mar. Animal = this; { return obj. Mar. Animal. Eat(); { ITerrestrial. Animal. Eat() }string//выражения; public static void Main(string[] args) {} { string ter. Croc = “Crocodile eats other animals”; } Crocodileter. Croc; return obj. Crocodile = new Crocodile(); string ter. Croc = obj. Crocodile. Eat. Terrestrial(); } где, Console. Write. Line(ter. Croc); string IMarine. Animal. Eat() string mar. Croc = obj. Crocodile. Eat. Marine(); { Interface 1: Первый реализованный интерфейс. Console. Write. Line(mar. Croc); string mar. Croc = “Crocodile eats fish and marine animals”; } Interface 2: Второй реализованный интерфейс. return mar. Croc; } Method(): Одинаковый метод, объявленных в обоих } Если интерфейс и наследуемый класс имеют метод с идентичным именем, интерфейс должен быть явно реализован. При явной реализации интерфейса нелья использовать мтодификаторы abstract, virtual, override или new. интерфейсах Изучение C#/ Модуль 8/ 13 из 18
Наследование интерфейса n n Интерфейс Пример Синтаксис Вывод может наследовать несколько интерфейсов, and Land: <Inherited_Interface. Name> interface IAnimal Canpublic void Water но не реализовывать их. stay <Interface. Name> interface in Habitat() { { Eats Flesh { void. Console. Write. Line(“Can stay in Water and Land”); Drink(); Crocodiles drink fresh water } } // Объявление метода interface ICarnivorous } public void Eat() { { void Console. Write. Line(“Eats Flesh”); Eat(); где, } } interface IReptile : IAnimal, определяет имя интерфейса, static Interface. Name: ICarnivorous void Main(string[] args) { { другой интерфейс. void. Crocodile obj. Crocodile = new Crocodile(); Habitat(); Inherited_Interface. Name: Определяет имя } obj. Crocodile. Habitat(); class Crocodile : IReptile obj. Crocodile. Eat(); наследуемого интерфейса. { obj. Crocodile. Drink(); } public void Drink() } { Console. Write. Line(“Crocodiles drink fresh water”); } Реализация должна быть выполнена для класса. наследующего. Изучение C#/ Модуль 8/ 14 из 18
Занятие 3 - Абстактные классы и интерфейсы На последнем занятии, Абстрактные классы и интерфейсы, вы изучите: n Список аналогий между абстрактными классами и интерфейсами n Список различий между абстрактными классами и интерфейсами Изучение C#/ Модуль 8/ 15 из 18
Аналогии n Аналогии между абстрактными классами и интерфейсами: Абстрактный класс и интерфейс не могут иметь экземпляров. Абстрактные классы и интерфейсы содержат абстрактные методы. Абстрактные методы реализуются наследованием подкласса. Абстрактные классы и интерфейсы могут наследовать несколько интерфейсов. Изучение C#/ Модуль 8/ 16 из 18
Различия Абстрактные классы Интерфейсы Абстрактный класс может наследовать класс и несколько интерфейсов. Интерфейс может наследовать несколько интерфейсов, но не может наследовать класс. Абстрактный класс может иметь методы с телом. Интерфейс не может иметь методы с телом. Метод абстрактного класса реализуется с помощью ключевого слова override. Метод интерфейса реализуется без ключевого слова override. Абстрактный класс - наилучший Интерфейс - наилучший выбор, если необходимо реализовать необходимо объявить только общие методы и объявить общие абстрактные методы. Абстрактный класс может объявлять конструкторы и деструкторы. Интерфейс не может объявлять конструкторы и деструкторы. Изучение C#/ Модуль 8/ 17 из 18
Резюме n n n Абстрактные классы n Абстрактный класс объявляет как минимум один метод без реализации его в классе. Интерфейсы с реализацией множественного наследования n Интерфейс может наследовать методы нескольких интерфейсов. Абстрактные классы и интерфейсы n Абстрактные классы и интерфейсы объявляют абстрактные методы. Изучение C#/ Модуль 8/ 18 из 18
ExpC_Module 8ru_1.ppt