- •Глава 1. Структура программы на языке с# 6
- •Глава 1. Структура программы на языке с#
- •Задание 1. Вывод строки на экран с использованием esp-последовательности
- •Глава 2. Переменные. Основные типы данных
- •Int.MinValue
- •Задание 2. Описание переменных и преобразование типов
- •Глава 3. Ввод – вывод значений переменных
- •Задание 3. Форматирование вывода
- •Глава 4. Обработка исключительных ситуаций
- •Задание 4. Обработка стандартных исключений
- •Задание 5. Генерация исключений
- •Глава 5. Массивы в c#
- •Initially,
- •Integer array: 1 2 3 4 5
- •Integer array: 1 2 3 4 5
- •Integerarray: 1 2 3 29 30
- •Задание 6. Одномерные массивы
- •Задание 7. Многомерные массивы и массивы массивов
- •Глава 6. Символы и строки
- •If (char.IsLetter(a)) Console.WriteLine("Буква");
- •Задание 8. Работа со строками
- •Глава 7. Описание классов
- •Int m, n;// числитель и знаменатель
- •Пример решения задачи
- •Intyear_tr;
- •If (Enum.IsDefined(typeof(gender_type),value))
- •Int year_tr;
- •If (Enum.IsDefined(typeof(gender_type),value))
- •Задание 9. Описание классов
- •Глава 8. Наследование
- •Задание 10. Наследование
- •Глава 9. Итерфейсы
- •Interface iOutput
- •Void outputName();
- •Interface iOutput
- •Void outputName();
- •If ( a is iOutput )
- •Interface iComparable
- •Int CompareTo( object obj )
- •Задание 11. Стандартные интерфейсы.
- •Глава 10. Файлы
- •Задание 12. Работа с файлами
- •Список использованных источников
Глава 9. Итерфейсы
В программировании слово «Интерфейс» может иметь несколько значений. До этого момента открытые элементы класса мы называли его интерфейсом, так как именно через них осуществляется работа с объектами класса.
В данной лекции мы рассмотрим интерфейсы языка С#.
Интерфейс в С# - это абстрактный класс, содержащий только абстрактные методы.
Отличия интерфейса от абстрактного класса:
интерфейс не может содержать полей и обычных методов — все элементы интерфейса должны быть абстрактными методами;
методы интерфейса описываются без спецификатора доступа (по умолчанию имеют спецификатор доступа public);
класс, в списке предков которого задается интерфейс, должен определять все его элементы;
класс может иметь в списке предков несколько интерфейсов.
Синтаксис интерфейса аналогичен синтаксису класса:
[ атрибуты ] [ спецификаторы ] interface имя_интерфейса [ : предки ]
{тело_интерфейса }
Интерфейсы позволяют частично реализовать идею множественного наследования классов, что расширяет возможности языка. В языке C# фактически каждый класс может иметь несколько родителей - один полноценный класс, а остальные в виде интерфейсов, - в этом и состоит основное назначение интерфейсов.
Кроме того, интерфейсы задают дополнительные свойства класса, в то время как абстрактный класс представляет собой начальный этап проектирования класса, который в будущем получит конкретнуюреализацию. Один и тот же интерфейс позволяет описывать свойства, которыми могут обладать разные классы и по-разному их реализовывать. Таким образом, использование интерфейсов также реализуют принцип полиморфизма.
В библиотеке классов .NETбольшое число интерфейсов, наследуя которые, классы получают полезные дополнительные свойства, некоторые из них будут рассмотрены ниже. Например, интерфейс IComparable задает метод сравнения объектов на больше-меньше, что позволяет выполнять их сортировку.
Пречислим правила описания интерфейсов.
Для интерфейса могут быть указаны спецификаторы new, public, protected, internal и private.
По умолчанию интерфейс доступен только из сборки, в которой он описан ( internal ).
Интерфейс может не иметь или иметь сколько угодно предков-интерфейсов.
Если интерфейс имеет несколько предков, то предки в заголовке интерфейса перечисляются через запятую.
Тело интерфейса составляют абстрактные методы, шаблоны свойств и индексаторов, а также события.
В качестве примера рассмотрим интерфейс Ioutput, определяющий методы вывода на экран общих данных для всех членов университета, например вывод ФИО, даты рождения, номер паспорта и т.д.
Interface iOutput
{
Void outputName();
...
}
В интерфейсе могут быть заданы также шаблоны свойств. В этом случае в абстрактном свойстве следует указать какие из секций (get,set) должны присутствовать, например:
stingName{ get; set; }
Реализация интерфейса происходит в классе, который его наследует. В списке предков класса сначала указывается его базовый класс, если он есть, а затем через запятую интерфейсы, которые реализует этот класс. Например, реализация интерфейса IOutputв классеCStudentможет выглядеть следующим образом:
namespace ConsoleApplication1
{