Содержание
- 2. Интерфейсы В языке C# запрещено множественное наследование классов.
- 3. Интерфейсы Тем не менее, в C# существует концепция, позволяющая имитировать множественное наследование. Это концепция интерфейсов.
- 4. Интерфейсы Интерфейс представляет собой набор объявлений свойств, индексаторов, методов и событий. Класс или структура могут реализовывать
- 5. Интерфейсы Интерфейс – это контракт, пункты которого суть свойства, индексаторы, методы и события. Если пользовательский тип
- 6. Интерфейс - это частный случай класса. Интерфейс представляет собой полностью абстрактный класс, все методы которого абстрактны.
- 7. Частные случаи ☹ Введение в язык частных случаев усложняет его и свидетельствует о некоторых изъянах, для
- 8. Частные случаи ☹ Интерфейсы позволяют частично справиться с таким существенным недостатком языка, как отсутствие множественного наследования
- 9. Интерфейсы
- 10. Интерфейсы Обратите внимание – в определении элементов интерфейса отсутствуют модификаторы уровня доступа. Считается, что все элементы
- 11. На основе интерфейса объявим класс:
- 12. Как это работает (способ 1):
- 13. Можно сделать так (способ 2):
- 14. !!! Но нельзя: !!! интерфейс не имеет собственного конструктора!
- 15. Есть еще разница в способах 1 и 2: Добавим к классу CFalcon метод, не описанный в
- 16. Интерфейсы
- 17. Интерфейсы
- 18. Если класс является производным от некоторого базового класса I'm a pet!
- 19. теперь объект f1 умеет говорить
- 20. Если необходимо проверить, поддерживает ли объект некоего класса интерфейс
- 21. Один класс может реализовывать несколько интерфейсов
- 22. Один класс может реализовывать несколько интерфейсов
- 23. Один класс может реализовывать несколько интерфейсов
- 24. Две стратегии реализации интерфейса Давайте опишем некоторый интерфейс, задающий дополнительные свойства объектов класса: interface IProps {
- 25. Две стратегии реализации интерфейса Класс, наследующий интерфейс и реализующий его методы, может реализовать их явно, объявляя
- 26. Две стратегии реализации интерфейса Класс реализует методы интерфейса, делая их открытыми для клиентов класса и наследников.
- 27. Две стратегии реализации интерфейса public class ClainP:IProps { public ClainP(){ } void IProps.Prop1(string s) { Console.WriteLine(s);
- 28. Две стратегии реализации интерфейса Класс ClainP реализовал методы интерфейса IProps, но сделал их закрытыми и недоступными
- 29. Есть два способа решения этой проблемы Обертывание. Кастинг.
- 30. Обертывание Создается открытый метод, являющийся оберткой закрытого метода.
- 31. Кастинг Создается объект интерфейсного класса IProps, полученный преобразованием (кастингом) объекта исходного класса ClainP. Этому объекту доступны
- 32. Две стратегии реализации интерфейса В чем главное достоинство обертывания? Оно позволяет переименовывать методы интерфейса. Метод интерфейса
- 33. Две стратегии реализации интерфейса Вот пример обертывания закрытых методов в классе ClainP: public void MyProp1(string s)
- 34. Две стратегии реализации интерфейса Как видите, методы переименованы и получили другие имена, под которыми они и
- 35. Преобразование к классу интерфейса Создать объект класса интерфейса обычным путем с использованием конструктора и операции new
- 36. Преобразование к классу интерфейса public void TestClainIProps() { Console.WriteLine("Объект класса Clain вызывает открытые методы!"); Clain clain
- 37. Преобразование к классу интерфейса
- 38. Проблемы множественного наследования При множественном наследовании классов возникает ряд проблем. Они остаются и при множественном наследовании
- 39. Проблемы множественного наследования Коллизия имен Проблема коллизии имен возникает, когда два или более интерфейса имеют методы
- 40. Проблемы множественного наследования Стратегия склеивания применяется тогда, когда класс - наследник интерфейсов - полагает, что разные
- 41. Проблемы множественного наследования interface IProps { void Prop1(string s); void Prop2 (string name, int val); void
- 42. Проблемы множественного наследования public class ClainTwo:IProps,IPropsOne { // склеивание методов двух интерфейсов public void Prop1 (string
- 43. Проблемы множественного наследования Другая стратегия исходит из того, что, методы разных интерфейсов должны быть реализованы по-разному.
- 44. Проблемы множественного наследования Конечно, переименование можно сделать в самих интерфейсах, но это неправильный путь: наследники не
- 45. Проблемы множественного наследования public class ClainTwo:IProps,IPropsOne {/// перегрузка методов двух интерфейсов public void Prop2(string s, int
- 46. Проблемы множественного наследования Для первого из методов с совпадающей сигнатурой выбрана стратегия склеивания, так что в
- 47. Проблемы множественного наследования public void TestCliTwoInterfaces() { Console.WriteLine("Объект ClainTwo вызывает методы двух интерфейсов!"); Cli.ClainTwo claintwo =
- 48. Проблемы множественного наследования
- 49. Наследование от общего предка Проблема наследования от общего предка характерна, в первую очередь, для множественного наследования
- 50. Наследование от общего предка Parent A B C
- 51. Наследование от общего предка Для интерфейсов сама ситуация дублирующего наследования маловероятна, но возможна, поскольку интерфейс, как
- 52. Наследование от общего предка public interface IParent { void ParentMethod(); } public interface ISon1:IParent { void
- 53. Наследование от общего предка класс, наследующий оба интерфейса: public class Pars:ISon1, ISon2 { public void ParentMethod()
- 54. Наследование от общего предка Класс обязан реализовать метод ParentMethod, приходящий от обоих интерфейсов. Понимая, что речь
- 55. Наследование от общего предка public void TestIParsons() { Console.WriteLine("Объект класса вызывает методы трех интерфейсов!"); Cli.Pars ct
- 56. Наследование от общего предка
- 57. Наследование интерфейсов Подобно классам, интерфейсы могут наследоваться от других интерфейсов. При этом, в отличие от классов,
- 58. Отличие интерфейса от абстрактного класса Абстрактный класс, помимо абстрактных методов и свойств, может содержать конструкторы, поля
- 60. Скачать презентацию