Синтаксис интерфейса

 

Общее описание интерфейса, включающее необязательные элементы (они выделены квадратными скобками), имеет следующий формат записи:

 

[ атрибуты ] [ спецификаторы ] 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 – Использование интерфейсного класса

 

В приведенном примере показана технология создания и использование интерфейса и интерфейсного класса.

 








Дата добавления: 2018-11-25; просмотров: 448;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.016 сек.