- •Глава 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. Работа с файлами
- •Список использованных источников
Interface iOutput
{
Void outputName();
...
}
class CStudent : IOutput
{
public void outputName()
{
Console.WriteLine("ФИО студента: "+ name);
}
}
class CLector : IOutput
{
public void outputName()
{
Console.WriteLine("ФИО преподавателя: "+ name);
}
}
Заголовки методов в интерфейсе и реализации должны полностью совпадать.
Заметим, что методы интерфейса могут быть реализованы в классе наследнике как открытые и как закрытые. В нашем примере метод outputNameреализован как открытый.
К этим переопределенным методам интерфейса можно обращаться как через объект класса, так и через объект типа соответствующего интерфейса:
CStudent s1 = new CStudent("Сидорова", "Информатика", gender_type.female, 1);
s1.outputName();
Ioutput s2 = new CStudent("Иванов", "Математика", gender_type.male, 2);
s2.outputName();
Второй способ удобен тем, что объектам типа интерфейса можно присваивать объекты различных классов, поддерживающих этот интерфейс
static void output (IOutput A) {A.outputName();}
CStudent ob1=new CStudent();
CLector ob2= CLector ();
output(ob1);// ФИО студента: Unknown
output (ob2);// ФИО преподавателя: Unknown
При работе с некоторым объектом бывает необходимо убедиться, что объект поддерживает данный интерфейс. Проверка выполняется с помощью бинарной операции is.
имя_объекта isимя_типа данных
Эта операция определяет, совместим ли текущий тип объекта, находящегося слева от ключевого слова is, с типом, заданным справа. Результат операции равен true, если объект можно преобразовать к заданному типу, и false в противном случае.
Операцию обычно используют с целью последующего явного преобразования объекта к типу интерфейса.
Например, определен метод с параметром типа object. Прежде чем использовать этот параметр для обращения к методам интерфейса требуется выполнить преобразование параметра к типу интерфейса. Для безопасного преобразования следует проверить, возможно ли оно, например так:
static void output( object A )
{
If ( a is iOutput )
{
((IOutput)A).outputName();
}
}
В метод outputможно передавать любые объекты, но на экран будут выведены только те, которые поддерживают интерфейс IOutput.
Недостатком использования операции is является то, что преобразование фактически выполняется дважды: при проверке и при собственно преобразовании. Более эффективной является другая операция — as. Она выполняет преобразование к заданному типу, а если это невозможно, формирует результат null, например:
static void output( object A )
{
IOutput person = A as IOutput;
if (person != null ) person. outputName ();
}
Обе рассмотренные операции применяются как к интерфейсам, так и к классам.
В библиотеке классов .NET определено множество стандартных интерфейсов, задающих желаемое поведение объектов. Например, интерфейс IComparable задает метод сравнения объектов на больше-меньше, что позволяет выполнять их сортировку. Реализация интерфейсов IEnumerable и IEnumerator дает возможность просматривать содержимое объекта с помощью конструкции foreach, а реализация интерфейса ICloneable — клонировать объекты.
Стандартные интерфейсы поддерживаются многими стандартными классами библиотеки. Например, работа с массивами с помощью цикла foreach возможна именно потому, что тип Array реализует интерфейсы IEnumerable и IEnumerator. Можно создавать и собственные классы, поддерживающие стандартные интерфейсы, что позволит использовать объекты этих классов стандартными способами.
Сравнение объектов
Интерфейс IComparable определен в пространстве имен System. Он содержит всего один метод CompareTo, возвращающий результат сравнения двух объектов — текущего и переданного ему в качестве параметра: