Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Склеивание и переименование
Приведу пример двух интерфейсов, имеющих методы с одинаковой сигнатурой, и класса - наследника этих интерфейсов, применяющего разные стратегии для конфликтующих методов. У нас уже определен интерфейс IStrings. Предположим, что существует интерфейс ITransform, подобный Istrings: interface ITransform { /// < summary> /// Преобразование /// < /summary> /// < returns> результат преобразования< /returns> string Convert(); /// < summary> /// Шифрование /// < /summary> /// < param name=" code" > код < /param> /// < returns> результат шифрования< /returns> string Cipher(string[] code); }У этих интерфейсов имена и сигнатуры методов совпадают. Вот класс, наследующий оба интерфейса: /// < summary> /// Наследник двух интерфейсов, /// у методов которых Convert и Cipher /// сигнатуры совпадают. /// Методы Cipher склеиваются, /// Convert - переименовываются /// < /summary> class TwoInterfaces: IStrings, ITransform { //Опущена часть класса, общая с классом SimpleText //Реализация интерфейсов string IStrings.Convert() { string res = " "; foreach (char sym in text) if (sym! = ' ') res += sym.ToString(); res = res.ToLower(); return res; } string ITransform.Convert() { string res = " "; for (int i = text.Length - 1; i > = 0; i--) res += text[i]; return res; } //Переименование закрытых методов public string ConvertOne() { return ((IStrings)this).Convert(); } public string ConvertTwo() { return ((ITransform)this).Convert(); } //Склеивание метода Cipher двух интерфейсов public string Cipher(string[] code) { string s = text; string res = " "; foreach (char sym in s) { int k = code[0].IndexOf(sym); if (k > = 0) res += code[1][k]; else res += sym.ToString(); } return res; } }Для методов Cipher двух интерфейсов выбрана стратегия склеивания. Для методов Convert выбрана стратегия переименования. Методы интерфейсов реализованы как закрытые методы, а затем в классе объявлены два новых метода с разными именами, являющиеся обертками закрытых методов класса. Пример работы с объектами класса и интерфейсными объектами: public void TestTextTwoInterfaces() { Console.WriteLine(" Работа с объектом класса TwoInterfaces! "); TwoInterfaces twoInterfaces = new TwoInterfaces(PAL); Console.WriteLine(" Исходный текст: " + PAL); string text; text = twoInterfaces.ConvertOne(); Console.WriteLine(" Первое преобразование: " + text); if (twoInterfaces.IsPalindrom()) Console.WriteLine(" Это палиндром! "); text = twoInterfaces.ConvertTwo(); Console.WriteLine(" Второе преобразование: " + text); text = twoInterfaces.Coding(); Console.WriteLine(" Шифрованный текст: " + text); text = " Это простой текст! "; Console.WriteLine(" Исходный текст: " + text); twoInterfaces = new TwoInterfaces(text); IStrings istrings; ITransform itransform; istrings = (IStrings)twoInterfaces; itransform = (ITransform)twoInterfaces; Console.WriteLine(" Работа с объектом интерфейса IStrings! "); text = istrings.Convert(); Console.WriteLine(" Преобразованный текст: " + text); text = istrings.Cipher(CODE); Console.WriteLine(" Шифрованный текст: " + text); Console.WriteLine(" Работа с объектом интерфейса ITransform! "); text = itransform.Convert(); Console.WriteLine(" Преобразованный текст: " + text); text = itransform.Cipher(CODE); Console.WriteLine(" Шифрованный текст: " + text); }
|