ExpC_Module 14ru_1.ppt
- Количество слайдов: 22
Модуль 14 Средства обобщенного программирования и итераторы
Обзор модуля В этом модуле вы изучите n Средства обобщённого программирования n Создание и использование средств обобщённого программирования n Итераторы Изучение C#/ Модуль 14/ 2 из 22
обобщённого программирования На первом занятии, Средства обобщённого программирования, вы изучите: n Объяснение принципов обобщённого программирования в C#. n Объяснение создания обобщенного типа n Преимущества обобщенного программирования. Изучение C#/ Модуль 14/ 3 из 22
Назначение n n Потребительские товары, например, одежда, могут быть фирменными (брендовыми) или базовыми (типовыми). Обычная футболка намного дешевле и проще в обслуживании, чем фирменная. Обычная футболка намного доступней на рынке, ее может купить кто угодно. Средства обобщенного программирования в C# это структуры данных, которые позволяют повторное использование определенных ранее функциональностей для различных типов данных C#. Изучение C#/ Модуль 14/ 4 из 22
Определение n Для гарантий безопасности типов, C# использует понятие обобщенных конструкций, которые имеют несколько особенностей, включая возможность определять шаблоны обобщенных типов, на основе которых позже может быть сконструирован тип. Изучение C#/ Модуль 14/ 5 из 22
Пространства имен для обобщенных конструкций n n Интерфейсывид параметризованных структур данных, Классы - Пространство имен Обобщения - - Пространство System. Collections. Generic содержит классы, состоит из которые могут работать и с типами значений, и со интерфейсов, позволяющих создавать коллекции позволяющие типами. ссылочными создавать коллекции безопасных типов. Класс Интерфейс Пространство имен Описания Comparer Абстрактный класс, позволяющий IComparer Определяет обобщенный метод Compare(), System. Collections. Object. Model создавать позволяет обобщенную коллекцию реализацией сранивающий значения в коллекции функциональности интерфейса IComparer создавать динамические, а также доступные только IEnumerable Определяет обобщенный метод Dictionary. Keобобщенные коллекции. для чтения Состоит из ключей, представленных в экземпляре Get. Enumerator(), осуществляющий y. Collection класса Dictionary итерации по коллекции Dictionary. Va Состоит из значений, представленных в экземпляре IEquality. Comparer Состоит из методов, проверяющих равенство n lue. Collection класса Dictionary Пространство имен System. Collections. Generic двух объектов состоит из классов и интерфейсов, позволяющих Equality. Compa Абстрактный класс, позволяющий создавать rer обобщенную коллекцию реализацией определять кастомизованные обобщенные коллекции. функциональности интерфейса Изучение C#/ Модуль 14/ 6 из 22 IEquality. Comparer
Создание обобщенных типов n n n Объявление обобщения всегда использует параметр типа, являющийся пропущенным шаблоном для требуемого типа данных. Процесс создания обобщенного типа начинается с определения обобщенного типа, содержащего параметры типа. Определение служит схемой. Изучение C#/ Модуль 14/ 7 из 22
Преимущества n n n Обобщения гарантируют безопасность типов во время компиляции. Обобщения позволяют повторное использование кода безопасным образом без приведения типа или упаковки. Помимо возможности повторного использования есть несколько иных преимуществ использования обобщений. Преимущества: n Улучшенная производительность n Гарантированная жестко-типизованная модель программирования n Уменьшение ошибок времени выполнения Изучение C#/ Модуль 14/ 8 из 22
Занятий 2 - Создание и использование обобщений На втором занятии, Создание и использование обобщений, вы изучите: n Определение синтаксиса создания обобщенного класса. n Описание обобщенных методов. n Определение синтаксиса создания обобщенного интерфейса. Изучение C#/ Модуль 14/ 9 из 22
Обобщенные классы n Обобщенные классы определяют функциональности, Вывод Синтаксис Пример которые System; voidиспользовать System. String parameter можно Display() <Class. Name> General<string>(3); using. General<string>classtype: Constructed Class is obj. Generalдля любого типа данных. of public <access_modififer> = new <<type usingobj. General. Add(“John”); of constructed class { System. Collections. Generic; Values stored in the parameter constraint clause>]are: list>> [where <type object class General<T> Console. Write. Line(“Constructed Class is of type: “ + John obj. General. Add(“Patrick”); { Patrickvalues; где, T[] typeof(T)); obj. General. Display(); n Обобщенные классы объявляются с помощью Console. Write. Line(“Values newобласть видимости stored in the object access_modifier: Определяет General<int>(2); of Constructed Class obj. General 2 =System. Int 32 int _counter = 0; is of type: General<int> объявления General(intскласса. Является опициональным. are: класса object of constructed class publicобобщенного max) Values stored in theпоследующим указанием obj. General 2. Add(200); are: “); for (int i = 0; создаваемого обобщенного класса. Class. Name: Имя 200 {obj. General 2. Add(35); параметра типа, T[max]; i < values. Length; i++) скобки. values = new заключенным в угловые { <type parameter list>: Используется как шаблон 35 }obj. General 2. Display(); Console. Write. Line(values[i]); void Add(T val) } publicзаполнения для актуального типа данных. } type parameter constraint clause: Опциональный класс } {} ifили обобщенного класса необходимо (_counter < values. Length) n При создании интерфейс, применимый к параметру типа с ключевым } { словом where. class Students обобщить типы данных в параметр типа и опционально values[_counter] = val; _counter++; { определить ограничения, применимые к параметру } static void Main(string[] args) типа. }{ Изучение C#/ Модуль 14/ 10 из 22
Ограничения параметров типа n Ограничение Ограничения Вывод Пример T : T : - это требуемое условие типа данных Описания для struct параметра типа. что параметр типа должен быть Указывает, using System; i = 0; i < _counter; i++) public 100 (int for John, int ID значащим типом, за исключением значения null. { { using System. Collections. Generic; James, 200 Console. Write. Line(_name[i]. Name + “, “ +должен быть class Employee Указывает, что параметр типа _name[i]. ID); class get 300 Patrich, } { ссылочным типом, например, классом, интерфейсом n{ } return _emp. ID; string _emp. Name; или делегатом. } } int _emp. ID; class } new() Class. Constraint. Demo Указывает, что параметр типа должен состоять из public Employee(string name, int num) { } конструктора class Generic. List<T> where T : args) без параметров, который может быть static void Main(string[] Employee { вызван { { _emp. Name = name; публично n T[] Generic. List<Employee> obj. List = new Generic. List<Employee>(); _name = new T[3]; _emp. ID = <base class name>num; Указывает, что параметр типа должен быть int obj. List. Add(new Employee(“John”, 100)); _counter = 0; } родительским классом или public void Add(T val) obj. List. Add(new Employee(“James”, 200)); должен наследоваться от public string Name родительского класса { obj. List. Add(new Employee(“Patrich”, 300)); { obj. List. Display(); val; _name[_counter] = <interface name> Указывает, что параметр типа должен быть get } _counter++; интерфейсом или должен наследовать интерфейс } } { public void Display() return _emp. Name; { } Ограничения задаются с помощью ключевого слова where. Они используются, если программисту необходимо ограничить типы данных параметра типа для гарантий целостности и согласованности данных в коллекции. } Изучение C#/ Модуль 14/ 11 из 22
Наследование обобщенных классов n Обобщенный Синтаксис класс может наследоваться как § любой другой класс в C#. наследования обобщенного Следующий синтаксис используется для необобщенного класса от существующего обобщенного класса. <access_modifier> class <Base. Class> <<generic type n parameter>>{} Обобщенный класс может вести себя как <access_modifier> class <Derived. Class> : базовый и как производный класс. <Base. Class><<type parameter value>>{} <Base. Class><<generic type parameter>>{} где, access_modifier: Определяет область видимости обобщенного <type parameter value>: Может быть типом данных, n При наследовании одного обобщенного класса в например, int, string или float. класса. Base. Class: Базовый обобщенный класс. другом обобщенном классе, можно использовать <generic type parameter>: Шаблон заполнения для обобщенный параметр типа базового класса указанного типа данных. Derived. Class: Производный обобщенный класс. вместо передачи типа данных параметра. Изучение C#/ Модуль 14/ 12 из 22
Обобщенные методы, объявляемые с Virtual - Обобщенные обрабатывают значения, типы данных которых становятся замещаться в ключевымswapping: virtual, могут известны только using System; Values before словом 23 & 45 <Method. Name> <<type <access_modifier> <return_type> using System. Collections. Generic; при доступе к переменным, хранящим эти Values after swapping: 45 & 23 parameter list>> классе. class Swap. Numbers производном значения. n Вывод Пример Синтаксис n { где, static void Swap<T>(ref T val. One, ref T val. Two) access_modifier: Определяет область видимости метода. тип значения, со списком n n Override - Обобщенный метод, объявляемый с Обобщенный метод объявляетсявозвращаемого ключевым словомобобщенного типа, заключенным в override, замещает метод } обобщенных параметров. метода. Method. Name: Имя static void <type скобки. parameter базового. Main(string[] args) угловые класса. list>: Используется как шаблон { int num. One = 23; заполнения для актуального типа данных. { T temp = val. One; return_type: Определяет val. One = val. Two; val. Two = temp; методом обобщеным nn } int num. Two = 45; Console. Write. Line(“Values before swapping: “ + num. One + “ & “ + num. Two); Swap<int>(ref num. One, ref num. Two); Console. Write. Line(“Values after swapping: “ + num. One + “ & “ + num. Two); Обобщенные методы могут объявляться со Abstract - Обобщенный метод, объявленный с следующими ключевыми словами: ключевым словом abstract, содержит только } n virtual объявление метода. n n override abstract Изучение C#/ Модуль 14/ 13 из 22
Обобщенные интерфейсы n Обобщенные Пример Вывод Синтаксис интерфейсы полезны для обобщенных integer values обобщенных классов, коллекций и using System; return Addition of two (val. One - val. Two); is: 68 <access_modifier> interface <Interface. Name> <<type using System. Collections. Generic; } Subtraction of two integer values is: 22 constraint parameter list>> элементы в parameter представляя [where <type коллекции. interface IMaths<T> else clause>] { { T Addition(T val. One, T val. Two); return (val. Two - val. One); где, T Subtraction(T val. One, T val. Two); } n } } access_modifier: Определяет область видимости class Numbers : IMaths<int> staticобобщенного интерфейса. void Main(string[] args) { { Interface. Name: Имя нового обобщенного интерфейса. public int Addition(int val. One, int val. Two) int num. One = 23; <type parameter list>: Используется как шаблон { int num. Two = 45; Numbers obj. Interface = new Numbers(); return val. One для актуального типа данных. заполнения + val. Two; } Console. Write(“Addition of two integer values is: “); type parameter constraint clause: Опциональный public int Subtraction(int val. One, int val. Two) Console. Write. Line(obj. Interface. Addition(num. One, num. Two)); класс или интерфейс, применимый к параметру типа с n { Console. Write(“Subtraction of two integer values is: “); Console. Write. Line(obj. Interface. Subtraction(num. One, num. Two)); ifключевым словом where. (val. One > val. Two) } { } Обобщенные классы могут реализовывать обобщенные интерфейсы передачей требуемых параметров, указанных в интерфейсе. Синтаксис для объявления интерфейса аналогичен синтаксису объявления класса. Изучение C#/ Модуль 14/ 14 из 22
Ограничения обобщенного интерфейса n Можно Вывод Пример указать интерфейс как ограничение для параметра типа. using System; Display() public void Get. Details() public void {{ using System. Collections. Generic; for (int i = 0; i < 3; i++) interface IDetails Console. Write. Line(_stud. ID + “t” + _stud. Name); { } _values[i]. Get. Details(); n {Это позволяет использовать элементы интерфейса } } void Get. Details(); } class Generic. List<T> where T : IDetails }в обобщенном классе. } { class Student : IDetails class Interface. Constraint. Demo { { T[] _values = new T [3]; static void Main(string[] args) int _counter = 0; string _stud. Name; n Это гарантирует, что используются только типы, { public void Add(T obj. List = new Generic. List<Student>(); int _stud. ID; Generic. List<Student> val) реализующие интерфейс. 120)); num) { obj. List. Add(new Student(“Wilson”, int public Student(string name, obj. List. Add(new Student(“Jack”, 130)); { obj. List. Add(new Student(“Peter”, 140)); _values[_counter] = val; _counter++; _stud. Name = obj. List. Display(); name; }} _stud. ID = num; } } Изучение C#/ Модуль 14/ 15 из 22
Занятие 3 - Итераторы На последнем занятии, Итераторы, вы изучите: n Описание итераторов в C#. n Преимущества итераторов. n Использование итераторов. Изучение C#/ Модуль 14/ 16 из 22
Назначение n n n Итератор в C# используется для прохождения по списку значений или коллекции. Это блок кода, использующий цикл foreach для обращения к коллекции значений последовательным образом. Для реализации логики вручную, программист может последовательно перемещаться с помощью итераторов по значениям для их сравнения. Изучение C#/ Модуль 14/ 17 из 22
Итераторы n n n Итератор - это не элемент данных, а способ доступа к элементу. Он может быть методом, аксессором get или оператором, позволяющим навигацию по значениям в коллекции. Итераторы указывают способ генерации значений при доступе выражения foreach к элементам внутри коллекции. Изучение C#/ Модуль 14/ 18 из 22
Преимущества n n Приветствуется использование итераторов для навигации по значениям коллекции с помощью выражения foreach. Это обеспечивает следующие преимущества: n Итераторы обеспечивают упрощенный и быстрый способ итерации по значениям в коллекции. n Итераторы уменьшают сложность реализации элемента нумерации для коллекции. n Итераторы могут возвращать большие объемы значений. n Итераторы могут использоваться для вычисления и возврата только необходимых значений. n Итераторы могут возвращать значения без затрат памяти, указывая на каждый элемент списка. Изучение C#/ Модуль 14/ 19 из 22
Реализация n Итераторы Вывод Пример могут создаваться реализацией метода Get. Enumerator(), возвращающего using System; static void Main (string [] args) ссылку на интерфейс using System. Collections; IEnumerator. { class Department : obj. Department = new Department(); Department IEnumerable { Console. Write. Line(“Department Names”); string[] department. Names = {“Marketing”, “Finance”, Console. Write. Line(); n Блок итератора использует ключевое слово “Information Technology”, obj. Department) foreach(string str in “Human Resources”}; yield{ для получения значений для экземпляра public IEnumerator Get. Enumerator() { элемента Console. Write. Line(str); прекращения i++) нумерации < department. Names. Length; } for (int i = 0; i или для } { итерации. } yield return department. Names[i]; } } n Выражение yield return возвращает значения, тогда как выражение yield break останавливает итерацию. Изучение C#/ Модуль 14/ 20 из 22
Реализация именованных итераторов n Другой Синтаксиспуть Вывод Пример создания итераторов - создание метода с void Main(string[] типом - интерфейсом возвращаемым <Iterator. Name> (<parameter Ferrari <access_modifier> IEnumerable args) using System; static IEnumerable, называемого именованным Mercedes list>){} class Named. Iterators { BMW { Named. Iterators obj. Iterator = new итератором. = { “Ferrari”, “Mercedes”, “BMW”, где, string[] cars Toyota Named. Iterators(); Nissan access_modifier: str in obj. Iterator. Get. Car. Names()) “Toyota”, “Nissan” }; Определяет область видимости foreach (string именованного итератора. public IEnumerable Get. Car. Names() { Iterator. Name: Имя метода итератора. { Console. Write. Line(str); n Именованные итераторы могут принимать parameter ilist: Определяет отсутствиеi++)наличие } for (int = 0; i < cars. Length; или параметры, которые можно использовать для параметров, передаваемых методу итератора. } { }управленияreturn cars[i]; конечной точками цикла yield начальной и } foreach. } n Эта гибкая технология позволяет выбирать требуемые значения из коллекции. Изучение C#/ Модуль 14/ 21 из 22
Резюме n n n Средства обобщённого программирования n Средства обобщенного программирования - структуры данных, позволяющие повторное использование кода для таких различных типов, как классы или интерфейсов. Создание и использование средств обобщённого программирования n Обобщенные классы могут создаваться объявлением класса, с последующим списком параметров типа, заключенным в угловые скобки, и опицональным использованием ограничений для параметров типа. Итераторы n Итератор - блок кода, возвращающий последовательно упорядоченные значения одного типа. Изучение C#/ Модуль 14/ 22 из 22
ExpC_Module 14ru_1.ppt