56 lines
3.1 KiB
HTML
56 lines
3.1 KiB
HTML
<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>
|