/
n-dimens
/
pascalabcnet
Обзор
Документация
Войти
/
n-dimens
/
pascalabcnet
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
PABCNetHelp/LangGuide/Interfaces/manyinterf.html
55 строк
3 KB
samuraiGH
adding working-tree-encoding attribute (#3325)
07 ноя 2025, 16:12
Не верифицирован
07 ноя 2025, 16:12
cf1fd29
Код
Авторство
О чём код?
<html> <head> <object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> </object> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title></title> <link rel="StyleSheet" href="../../default.css"> </head> <body> <H1>Реализация нескольких интерфейсов </H1> <p>Несколько интерфейсов могут содержать одинаковые методы или свойства. При наследовании от таких интерфейсов такие одинаковые методы или свойства сливаются в один:</p> <blockquote> <p><code><b>type</b><br> IShape = <b>interface</b><br> <b>procedure</b> Draw;<br> <b>property</b> X: integer <b>read</b>;<br> <b>property</b> Y: integer <b>read</b>;<br> <b>end</b>;<br> IBrush = <b>interface</b><br> <b>procedure</b> Draw;<br> <b>property</b> Size: integer <b>read</b>;<br> <b>end</b>;<br> Brush = <b>class</b>(IShape,IBrush)<br> <b>procedure</b> Draw;<br> <strong>begin</strong><br> <strong>end</strong>;<br> <b>end</b>;</code></p> </blockquote> <p>Чтобы решить проблему с одинаковыми именами в интерфейсах, в .NET классы могут реализовывать методы интерфейсов так называемым <strong>явным</strong> образом, так что вызов метода интерфейса для переменной класса возможен только после явного приведения к типу интерфейса. <span id="nsrTitle">Например:</span></p> <blockquote> <p><code><strong>type</strong><br> IWindow = <strong>interface</strong><br> procedure Menu;<br> <strong>end</strong>;<br> IRestaurant = <strong>interface</strong><br> procedure Menu;<br> <strong>end</strong>;<br> RestaurantSystem = <strong>class</strong>(IWindow,IRestaurant)<br> <strong>public</strong><br> <strong>procedure</strong> IWindow.Menu; // явная реализация метода интерфейса<br> <strong>begin</strong><br> Println('IWindow.Menu');<br> <strong>end</strong>;<br> <strong>procedure</strong> IRestaurant.Menu;<br> <strong> begin</strong><br> Println('IRestaurant.Menu');<br> <strong>end</strong>;<br> <strong>end</strong>;<br><br><strong>begin</strong><br> <strong>var</strong> r := new RestaurantSystem;<br> IWindow(r).Menu; <br> IRestaurant(r).Menu; <br> r.Menu; // ошибка компиляции!<br><strong>end</strong>. </code> </p> </blockquote> <p> </p> </body> </html>