Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






Класс, наследующий интерфейс и реализующий его методы, может объявить соответствующие методы класса открытыми (может добавить virtual). Заметьте, у методов интерфейса не заданы модификаторы доступа. Построим пример класса, наследующего интерфейс 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); }

 

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

 


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

mylektsii.su - Мои Лекции - 2015-2024 год. (0.006 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал