Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Реализация методов интерфейса как общедоступных методов




Класс, наследующий интерфейс и реализующий его методы, может объявить соответствующие методы класса открытыми. Заметьте, у методов интерфейса не заданы модификаторы доступа. Построим пример класса, наследующего интерфейс IStrings:

/// <summary>

/// Наследует интерфейс IStrings,

/// реализуя его методы как общедоступные (public)

/// </summary>

class SimpleText: IStrings

{

//поля класса

string text;

static string[] codeTable =

{

"абвгдеёжзийклмнопрстуфхцчшщыьъэюя,.!?;:",

"ъьыщшчцхфуэюя,.!?;:тсрпонмлкйабвгдеёжзи"

};

//Конструкторы

public SimpleText()

{

text = "Простой текст!";

}

public SimpleText(string txt)

{

text = txt;

}

public string Text

{

get { return text; }

}

}

Построенный класс является обычным классом, содержащим текстовое поле text, конструкторы, метод - свойство, обеспечивающее доступ к закрытому полю. Но поскольку класс объявил себя наследником интерфейса IStrings, он обязан реализовать методы интерфейса, предложив некоторую их реализацию. Вот пример подобной реализации:

//Реализация интерфейсов

/// <summary>

/// Удаление пробелов в поле text,

/// преобразование к нижнему регистру

/// </summary>

/// <returns>преобразованная строка</returns>

public string Convert()

{

string res = "";

foreach (char sym in text)

if (sym!= ' ') res += sym.ToString();

res = res.ToLower();

return res;

}

/// <summary>

/// шифрование поля text

/// с использованием таблицы кодировки символов

/// </summary>

/// <param name="code">таблица кодировки</param>

/// <returns>зашифрованный текст</returns>

public string Cipher(string[] code)

{

string res = "";

foreach (char sym in text)

{

int k = code[0].IndexOf(sym);

if (k >= 0) res += code[1][k];

else res += sym.ToString();

}

return res;

}

 

Класс реализует методы интерфейса, делая их открытыми для клиентов класса и наследников. Класс может построить собственные методы, используя реализацию методов интерфейса.

/// <summary>

/// Проверка поля text,является ли он палиндромом

/// после преобразования Convert

/// </summary>

/// <returns> true, если палиндром</returns>

public bool IsPalindrom()

{

string txt = Convert();

for(int i=0, j = txt.Length-1; i<j; i++, j--)

if(txt[i]!= txt[j]) return false;

return true;

}

/// <summary>

/// Шифрование, заданное собственной таблицей кодировки

/// </summary>

/// <returns>шифрованный текст</returns>

public string Coding()

{

return Cipher(codeTable);

}

 

Рассмотрим класс Testing, методы которого позволят выполнить тестирование объектов создаваемых нами классов:

/// <summary>

/// тестирующий класс

/// </summary>

class Testing

{

//поля класса

const string PAL =

"А роза упала на лапу Азора";

static string[] CODE =

{

"абвгдежзиклмнопрстуфхцчшыъьэюя",

"abvgdejziklmnoprstyfhc461w'qux"

};

/// <summary>

/// Тестирование класса SimpleText

/// </summary>

public void TestText()

{

Console.WriteLine("Работа с объектом класса SimpleText! ");

SimpleText simpleText = new SimpleText(PAL);

Console.WriteLine("Исходный текст: " + PAL);

string text;

text = simpleText.Convert();

Console.WriteLine("Преобразованный текст: " + text);

if(simpleText.IsPalindrom())

Console.WriteLine("Это палиндром!");

text = simpleText.Coding();

Console.WriteLine("Шифрованный текст: " + text);

 

Console.WriteLine("Работа с объектом интерфейса IStrings! ");

IStrings istrings;

text = "Это простой текст!";

Console.WriteLine("Исходный текст: " + text);

simpleText = new SimpleText(text);

istrings = (IStrings)simpleText;

text = istrings.Convert();

Console.WriteLine("Преобразованный текст: " + text);

text = istrings.Cipher(CODE);

Console.WriteLine("Шифрованный текст: " + text);

}

}

Заметьте: в классе Testing объявлен как объект класса SimpleText, так и объект istrings интерфейса IStrings. В методе TestText объект simpleText создается обычным способом при вызове конструктора класса. Затем этот объект вызывает как открытый метод Convert, наследованный от интерфейса, так и открытые методы класса IsPalindrom, Coding, использующие методы интерфейса. Все это совершено понятно и ожидаемо.

Более интересен тот факт, что можно работать с реализованными в классе методами интерфейса через объект istrings. Создать объект интерфейса путем вызова конструктора невозможно, но по отношению к классу SimpleText это объект родительского класса, и потому объекту интерфейса можно присвоить объект класса после соответствующего приведения типа. Такому объекту доступны методы, заданные интерфейсом, и только они. Результаты работы теста показаны на рис. 5.1.

Рис. 5.1. Реализация методов интерфейса как открытых методов класса






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных