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

7.10 Iнтерфейси
ально, а в загальнiй для всiх класiв частини вказати на необхiднiсть такого опису. Цю задачу й вирiшують iнтерфейси:
for( Ifigure f: figures) { f. draw();
}
У даному фрагментi Ifigure є iнтерфейсом( буква I на початку iменi – це просто загальноприйнята угода в iменуваннi iнтерфейсiв). Iнтерфейси потрiбнi, щоб об’ єднати кiлька класiв чимось спiльним. У нашому прикладi, цим спiльним є наявнiсть методiв друку, обчислення периметру й площi. Синтаксис iнтерфейсiв такий:
interface iмя’ iнтерфейсу { // тiло iнтерфейсу
}
Iнтерфейси оголошують методи, властивостi й подiï. Вони можуть бути або public, або internal. Однак вкладенi iнтерфейси можуть мати будь-який рiвень доступу. Iнтерфейсi не можуть мiстити поля або типи завдяки тому, що не визначають реалiзацiю. Напишемо iнтерфейс для нашого прикладу.
interface Ifigure // оголошення iнтерфейсу { void Draw(); void Perimeter(); void Area();
}
У тiлi iнтерфейсу ми записали прототип методiв для рисування фiгур, обчислення площi й периметру, але природно ми не стали його реалiзувати. Цiєю реалiзацiєю займеться кожний клас, який буде використовувати цей iнтерфейс. Наприклад:
class Rectangle: Ifigure // спадкування iнтерфейсу
{ double a = 4.8; double b = 3.7; public void Draw() // реалiзацiя iнтерфейсу {
Console. Writeline(" Rectangle, a ={ 0 }, b ={ 1 }", a, b);
} public void Perimeter() // реалiзацiя iнтерфейсу {
Console. Writeline(" L ={ 0 }", 2 * a + 2 * b);
}
public void Area() // реалiзацiя iнтерфейсу {
Console. Writeline(" S ={ 0 }", a * b / 2);
}
155