- •Предисловие
- •1 Среда визуального программирования visual studio.Net
- •1.1 Введение в объектно - ориентированное программирование
- •1.2 Понятие о событийном управлении Windows
- •1.3 Основные окна среды Visual Studio.Net
- •1.4 Основные структурные элементы разработки проекта c#
- •1.5 Пример первой учебной программы
- •2.1 Технология визуального проектирования форм
- •1.6 Вопросы для самопроверки
- •2 Элементы управления
- •2.2 Элементы управления панели Toolbox
- •2.3 Пример использования элементов управления
- •2.4 Вопросы для самопроверки
- •3 Графический интерфейс языка c#
- •3.1 Пространство имен System.Drawing
- •3.2 Класс Graphics
- •3.3 Пример программной реализации
- •3.4 Вопросы для самопроверки
- •4 Использование меню в приложении
- •4.1 Меню программы
- •4.2 Создание инструментальной панели приложения
- •4.3.Вопросы для самопроверки
- •5 Использование диалоговых меню
- •5.1 Обработчики событий для работы с матрицей
- •5.2 Обработчик событий для открытия файла
- •5.3 Обработчик событий для записи в файл
- •5.4 Обработчик событий для работы с текстом
- •5.5 Вопросы для самопроверки
- •6 Многооконные приложения
- •6.1 Создание «кнопочной» главной формы
- •6.2 Добавление новых форм приложения
- •6.3 Обработчики событий главной формы
- •6.4 Табличная форма представления и редактирования значений
- •6.5 Графическая форма представления прямоугольников
- •6.6 Вопросы для самопроверки
- •7. Понятие класса
- •7.1 Понятие класса
- •7.2 Состав класса
- •7.3 Методы класса
- •7.4 Структура объекта
- •7.5 Пример учебной программы
- •7.6 Доступ к полям
- •7.7 Вопросы для самопроверки
- •1 Понятие класса?
- •8 Элементы классов
- •8.1 Конструкторы
- •8.2 Деструкторы
- •8.3 Свойства
- •8.4 Параметр по ссылке this
- •8.5 События класса
- •8.6 Перегрузка операций класса
- •8.7 Вопросы для самопроверки
- •9 Принципы ооп
- •9.1 Понятие инкапсуляции
- •9.2 Понятие наследования
- •9.3 Вопросы для самопроверки
- •10 Принцип полиморфизма
- •10.1 Понятие полиморфизма
- •10.2 Пример статического наследования методов
- •10.3 Пример динамического наследования методов
- •10.4 Вопросы для самопроверки
- •11 Использование интерфейсов
- •11.1 Понятие интерфейса
- •11.2 Синтаксис интерфейса
- •11.3 Использование стандартного интерфейса iEnumerable
- •11.4 Вопросы для самопроверки
- •12 Композиция и коллекция классов
- •12.1 Понятие композиции и коллекции класса
- •12.2 Пример использования композиции и коллекции класса
- •12.3 Некоторые коллекции Framework
- •12.4 Коллекция ArrayList
- •12.5 Вопросы для самопроверки
- •13 Делегаты
- •13.1 Понятие делегата
- •13.2 Описание делегата
- •13.3 Пример использования делегата
- •13.4 Совместимость делегатов
- •13.5 Методы базовых классов делегатов
- •13.6 Вопросы для самопроверки
- •14 События
- •14.1 Понятие события
- •14.2 Некоторые часто используемые события среды Visual Studio.Net
- •14.3 Пример использования стандартных событий классов
- •14.4 Нестандартные события классов
- •14.5 Вопросы для самопроверки
- •Приложение а Ответы на вопросы для самопроверки
- •1 Понятие класса?
- •Предметный указатель
- •Список литературы
11.2 Синтаксис интерфейса
Общее описание интерфейса, включающее необязательные элементы (они выделены квадратными скобками), имеет следующий формат записи:
[ атрибуты ] [ спецификаторы ] interface имя_класса [ : родители ]
{ тело_класса } ,
где
атрибуты – задают дополнительную информацию о классе;
спецификаторы – обычно определяют условие доступа к составляющим класса;
родители – родительские интерфейсные классы, которые наследует наш класс:
тело класса – определяет состав интерфейсного класса.
Если внимательно посмотреть на формат записи интерфейса, то можно заметить, что его формат очень похож на формат записи обычного класса. Это объясняется тем, что интерфейс – частный случай класса.
В библиотеке платформы .NET имеется большое число интерфейсов, наследуя которые, классы получают дополнительные свойства.
Например, интерфейс IComparable задает метод сравнения объектов по принципу больше или меньше, что позволяет выполнять их сортировку.
Реализация интерфейсов IEnumerable и IEnumerator дает возможность просматривать (перебирать) содержимое объекта с помощью конструкции foreach, а реализация интерфейса ICloneable — клонировать объекты.
Каждый интерфейс наделяет класс теми или иными новыми возможностями. В этом смысле поле для разработки новых интерфейсов практически бесконечно.
Например, можно разработать интерфейс для продажи – покупки валюты в соответствии с текущим курсом, интерфейсы для различных начислений коммунальных услуг с учетом льгот и т.д.
В качестве учебного примера опишем интерфейс, реализация методов которого позволит классу проводить некоторые преобразования над музыкальной записью – преобразуя 7 нот и паузу в цифры от 0 до 7 и выполнять обратные преобразования.
Как и любой учебный пример, он немного искусственный, поскольку наша главная задача сейчас состоит в том, чтобы рассмотреть технологию создания и использования интерфейсов.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
interface ITextNoti
{
string Codirovanie();
string Decodirovanie();
}
class MyzikText: ITextNoti
{
string text;
static string[] codeTable =
{
"до", "ре", "ми", "фа", "соль", "ля", "си", "пауза"
};
//Конструктор
public MyzikText(string txt)
{
text = txt;
}
//Реализация интерфейсов
public string Codirovanie()
{
Boolean ok;
string rez = "";
string[] noti;
// преобразование к нижнему регистру
string text1 = text.ToLower();
//размерность массивов noti устанавливается
// автоматически в соответствии с размерностью массива,
//возвращаемого методом Split
noti = text1.Split(' ');
for (int i = 0; i < noti.Length; i++)
{
ok = false;
for (int j = 0; j < 8; j++)
if (noti[i] == codeTable[j])
{ ok = true; rez = rez + " " + j.ToString(); }
if (ok == false) rez = rez + " ?";
}
return rez;
}
// дешифровка поля text
// с использованием таблицы нот
public string Decodirovanie()
{
Boolean ok;
string rez = "";
string[] noti;
// преобразование к нижнему регистру
string text1 = text.ToLower();
noti = text1.Split(' ');
for (int i = 0; i < noti.Length; i++)
{
ok = false;
for (int j = 0; j < 8; j++)
if (Convert.ToInt32(noti[i]) == j)
{ ok = true; rez = rez + " " + codeTable[j]; }
if (ok == false) rez = rez + " ?";
}
return rez;
}
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string a,b;
a = textBox1.Text;
MyzikText IcxodText = new MyzikText(a);
b = IcxodText.Codirovanie();
textBox3.AppendText(b + "\r\n");
}
private void button2_Click(object sender, EventArgs e)
{
string a, b;
a = textBox2.Text;
MyzikText IcxodText1 = new MyzikText(a);
b = IcxodText1.Decodirovanie();
textBox3.AppendText(b + "\r\n");
}
}
}
Объявляем интерфейс ItextNoti, содержащий два метода – кодирование (словесный текст нот заменяется цифрами от 0 до 7) и декодирование (текст, представленный цифрами от 0 до 7, заменяется словесным текстом нот).
interface ITextNoti
{
string Codirovanie();
string Decodirovanie();
}
Далее объявляем интерфейсный класс, наследующий интерфейс и реализующий его методы. Выполняем общедоступную реализацию методов интерфейса. Алгоритм реализации интерфейсных методов прокомментирован в коде программы и не нуждается в дополнительных пояснениях.
Работа программы изображена на рисунке 11.1.
Рисунок 11.1 – Использование интерфейсного класса
В приведенном примере показана технология создания и использование интерфейса и интерфейсного класса.
