Реферат Курсовая Конспект
Коллизия имен - раздел Программирование, Объектно-ориентированное программирование как идеология программирования и как технология. Достоинства и недостатки Проблема Коллизии Имен Возникает, Когда Два Или Более Интерфейса Имеют Методы...
|
Проблема коллизии имен возникает, когда два или более интерфейса имеют методы с одинаковыми именами и сигнатурой. Если имена методов совпадают, но сигнатуры разные, то это не приводит к конфликтам — при реализации у класса наследника просто появляются перегруженные методы. Но что следует делать классу-наследнику в тех случаях, когда сигнатуры методов совпадают? И здесь возможны две стратегии — склеивание методов и переименование.
Стратегия склеивания применяется тогда, когда класс — наследник интерфейсов — полагает, что разные интерфейсы задают один и тот же метод, единая реализация которого и должна быть обеспечена наследником. В этом случае наследник строит единственную общедоступную реализацию, соответствующую методам всех интерфейсов, которые имеют единую сигнатуру.
Другая стратегия исходит из того, что, несмотря на единую сигнатуру, методы разных интерфейсов должны быть реализованы по-разному. В этом случае необходимо переименовать конфликтующие методы. Конечно, переименование можно сделать в самих интерфейсах, но это неправильный путь: наследники не должны требовать изменений своих родителей — они сами должны меняться. Переименование методов интерфейсов иногда невозможно чисто технически, если интерфейсы являются встроенными или поставляются сторонними фирмами. К счастью, мы знаем, как производить переименование метода интерфейса в самом классе наследника, для этого достаточно реализовать методы разных интерфейсов как закрытые, а затем открыть их с переименованием.
public interface Iprops
{
void Prop1(string s);
void Prop2 (string name, int val);
void Prop3();
}
public interface IPropsOne
{
void Prop1(string s);
void Prop2 (int val);
void Prop3();
}
У двух интерфейсов — по три метода с совпадающими именами, сигнатуры двух методов совпадают, а в одном случае различаются. Вот класс, наследующий оба интерфейса:
public class ClainTwo:IProps,IPropsOne
{
/// склеивание методов двух интерфейсов
public void Prop1 (string s)
{
Console.WriteLine(s);
}
/// перегрузка методов двух интерфейсов
public void Prop2(string s, int x)
{
Console.WriteLine(s + "; " + x);
}
public void Prop2 (int x)
{
Console.WriteLine(x);
}
/// переименование методов двух интерфейсов
void IProps.Prop3()
{
Console.WriteLine("Свойство 3 интерфейса 1");
}
void IPropsOne.Prop3()
{
Console.WriteLine("Свойство 3 интерфейса 2");
}
public void Prop3FromInterface1()
{
((IProps)this).Prop3();
}
public void Prop3FromInterface2()
{
((IPropsOne)this).Prop3();
}
}
Для первого из методов с совпадающей сигнатурой выбрана стратегия склеивания, так что в классе есть только один метод, реализующий методы двух интерфейсов. Методы с разной сигнатурой реализованы двумя перегруженными методами класса. Для следующей пары методов с совпадающей сигнатурой выбрана стратегия переименования. Методы интерфейсов реализованы как закрытые методы, а затем в классе объявлены два новых метода с разными именами, являющиеся обертками закрытых методов класса.
– Конец работы –
Эта тема принадлежит разделу:
Класс это шаблон который определяет форму объекта Он задает как данные так и код который оперирует этими данными Объекты это экземпляры... Объявление объекта типа Building... Building house new Building...
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Коллизия имен
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов