Основы объектно-ориентированного программирования на языке C# book | Page 157
7.10 Iнтерфейси
double r = 2.7;
public void Draw() // неявна реалiзацiя iнтерфейсу
{
Console.WriteLine("Circle, r={0}", r);
}
public void Perimeter() // неявна реалiзацiя iнтерфейсу
{
Console.WriteLine("L= {0}", 2 * 3.14 * r);
}
public void Area()
// неявна реалiзацiя iнтерфейсу
{
Console.WriteLine("S={0}", 3.14 * r * r);
}
}
class Program
{
static void Main(string[] args)
{
List figures = new List();
figures.Add(new Rectangle());
figures.Add(new Circle());
foreach (Ifigure f in figures)
{
f.Draw();
f.Perimeter();
f.Area();
}
Console.ReadKey();
}
}
}
Якщо ми прагнемо вказати, що реалiзуємо якийсь метод саме з кон-
кретного iнтерфейсу (наприклад, при збiгу iмен), то слiд указати iм’я
цього iнтерфейсу: void Ifigure.Draw() Це так звана явна реалiзацiя
iнтерфейсу. У такому випадку рiвень доступу не вказується i ця яв-
на реалiзацiя завжди є закритою (точнiше private virtual sealed ).
Щоб отримати доступ до реалiзацiı̈ необхiдно зробити так:
Rectangle a = new Rectangle();
((Ifigure)a).Draw();
Тут ми створили екземпляр a класу Rectangle i привели його тип
до типу Ifigure .
У випадку неявноı̈ реалiзацiı̈ для виклику методу рисування для
екземпляра a досить просто написати:
a.Draw();
як i показано в нашому прикладi.
Але ми можемо звертатись до методу iнтерфейсу створивши екзем-
пляр типу цього iнтерфейсу i записати в неı̈ таке посилання :
Rectangle a = new Rectangle();
Ifigure PointerDraw = (Ifigure)a;
157