Основы объектно-ориентированного программирования на языке C# book | Page 158

7 Класи
За допомогою посилання PointerDraw можна звертатися до методiв iнтерфейсу Ifigure, що реалiзованi в класi Rectangle:
PointerDraw. Draw(); PointerDraw. Perimeter();
Неявна реалiзацiя iнтерфейсу може бути вiртуальною( virtual), що дозволяє переписувати ïï в класах-нащадках. Явна iмплементацiя завжди статична. Вона не може бути переписана( override) або перекрита( new) у класах-нащадках.
Однак, явна реалiзацiя може бути переписана в класi-нащадку, якщо той же самий iнтерфейс реалiзувати ще раз. При цьому використовується iнший механiзм, нiж override, але результат аналогiчний.
interface Ifigure { void Draw(); } class Rectangle: Ifigure { void Ifigure. Draw() // Явна реалiзацiя {...
} } class Square: Rectangle, Ifigure { void Ifigure. Draw()// Аналог override у виглядi ще однiєї явної реалiзацiї {...
} }
Таким чином, похiднi класи можуть спадкувати методи й iнтерфейси базового класу та змiнювати ïх.
Iнтерфейси є типом посиланням i ïх можна реалiзовувати в класах i структурах. Однак у випадку структур ïх необхiдно використовувати iз обережнiстю. Якщо ми маємо посилання на структуру, що має тип iнтерфейсу, то ми маємо посилання на деяку упаковку( boxing) яка зберiгає копiю структури.

7.11 Комбiнований iнтерфейс

Iнтерфейси описують спiльну функцiональнiсть класiв. C # надає можливiсть комбiнувати iнтерфейси, щоб створювати новi iнтерфейси на базi iснуючих. Наприклад нехає у нас є iнтерфейс для рисування фiгур
interface Idraw // оголошення iнтерфейсу {
158