Некоторые станд.интерфейсы среды .NET Framework

В С# пр-мах можно исп-ть станд.интерфейсы среды.

#1. IEnumerable и IEnumerator служат для работы с перечислимыми типами. Используются в коллекциях. Опрос содержимого коллекций производится с помощью цикла

foreach elem In Коллекция

{

}

#2.Интерфейс иCloneable. Служит для создания клонированных объектов. В нем имеется только один метод object Clone();.

#3. ICompareable– создание сравнимых объектов. С помощью этого интерфейса можно определить поведение, позволяющее сортировать объекты по заданному ключу. Например, в классе System.Array имеется метод Sort(Имя_массива), но этот метод сортирует лишь числовые массивы. Если ему передать массив точек, то возникнет ошибка. Нужно для класса Point реализовать интерфейс ICompareable, в котором имеется метод: int CompareTo(object Ob);

Этот метод возвращает –1, если текущий объект размещается ДО текущего объекта; 0 – если текущий объект РАВЕН указанному объекту; 1 – если текущий объект размещается ПОСЛЕ указанного объекта.

Итак, какова же причина появления в ООП (объектно-ориентированном программировании) интерфейсов? Казалось бы, достаточно абстрактных методов и классов. Но абстрактные методы и классы используются лишь при наследовании, где четко нужно знать иерархию базовых классов. Интерфейсы же – это чистый протокол, стандарт, так как в них нет членов-переменных и нет реализации методов, свойств индексаторов. Такой протокол позволяет поддерживать множество вариантов поведения, избегая при этом проблем, возникающих при наследовании. В С# нет множественного наследования, но интерфейсы имитируют множественное наследование.

Еще более важно то, что программирование на основе интерфейсов обеспечивает альтернативный способ реализации полиморфного поведения. Хотя множество структур, классов реализуют один и тот же интерфейс по-разному, можно обращаться со всеми типами (объектами классов) по одной схеме.


 

35. Механизмы реализации полиморфизма в C#.

Полиморфизм (от греческого слова polymorphism, означающего "много форм") — это качество, которое позволяет одному интерфейсу получать доступ к целому классу действий. Простым примером полиморфизма может послужить руль автомобиля. Руль(интерфейс) остается рулем независимо от того, какой тип рулевого механизма используется в автомобиле. Другими словами, руль работает одинаково в любом случае: оснащен ли ваш автомобиль рулевым управлением прямого действия, рулевым управлением с усилителем или реечным управлением. Таким образом, поворот руля влево заставит автомобиль поехать влево независимо от типа используемого в нем рулевого управления. Достоинство такого единообразного интерфейса состоит, безусловно, в том, что, если вы знаете, как обращаться с рулем, вы сможете водить автомобиль любого типа. Тот же принцип можно применить и к программированию. Рассмотрим, например, стек (stack), т.е. область памяти, функционирующую по принципу "последним пришел — первым обслужен". Предположим, вы пишете программу, для которой нужно организовать три различных типа стека. Один стек предназначен для целочисленных значений, второй — для значений с плавающей точкой, а третий — для символов. В этом случае для реализации каждого стека используется один и тот же алгоритм, несмотря на различие в типах сохраняемых данных. В случае не объектно-ориентированного языка вам пришлось бы создать три набора "стековых" подпрограмм, имеющих различные имена. Но благодаря полиморфизму в среде С# можно создать один общий набор "стековых" подпрограмм, который обрабатывает все три типа стека. Иными словами, зная, как использовать один стек, можно использовать все остальные. Концепцию полиморфизма часто выражают такой фразой: "один интерфейс — много методов". Это означает, что для выполнения группы подобных действий можно разработать общий интерфейс. Полиморфизм позволяет понизить степень сложности программы, предоставляя программисту возможность использовать один и тот же интерфейс для задания общего класса действий. Конкретное (нужное в том или ином случае) действие (метод) выбирается компилятором. Программисту нет необходимости делать это вручную. Его задача — правильно использовать общий интерфейс.