Интерфейсы. C#

Интерфейс представляет собой именованный набор абстрактных членов класса. Он выражает поведение, которое данный класс может избрать для поддержки. В библиотеках базовых классов .NET поставляются сотни предопределенных типов интерфейсов, которые реализуются в различных классах.
Например, в состав ADO.NET входят множество поставщиков данных, которые позволяют взаимодействовать с определенной СУБД. В интерфейсе ни у одного из методов не должно быть тела, т.е. не предоставляется никакой реализации (указывается, что следует сделать, а не как это сделать). Как только интерфейс определен, он может быть реализован в любом количестве классов.
interface Имя {
возвр.тип имя_Метода1(список параметров);
возвр.тип имя_Метода2(список параметров);
}
view raw Interface.cs hosted with ❤ by GitHub
Имена интерфейсам следует давать с префикса I. Все методы интерфейса должны быть реализованы в каждом классе, включающем в себя этот интерфейс. Чтобы указать, что класс реализует интерфейс, необходимо так же, как и при наследовании, после имени класса и двоеточия указать имя интерфейса.
Множественное наследование есть в C++, а в C# от него отказались и внесли интерфейсы, т.е. класс может сразу реализовать несколько интерфейсов.
Если класс реализует несколько интерфейсов, то они разделяются запятыми.
Пример. Есть классы геометрических фигур - прямоугольник и окружность. У обоих классов должны быть методы вычисления периметра и площади. Эти методы мы представим интерфейсом.
Using ...;
namespace ConsoleApplication1{
interface IGeometrical { //объявление интерфейса
void GetParameter();
void GetArea();
}
interface IDrawable{
void Draw();
}
class Rectangle: IGeometrical, IDrawable {//реализация интерфейса
void GetParameter(){
Console.WriteLine("(a+b)*2");
}
void GetArea(){
Console.WriteLine("a+b");
}
public void Draw(){
Console.WriteLine("Rectangle");
}
}
class Circle: IGeometrical, IDrawable {//реализация интерфейса
void GetParameter(){
Console.WriteLine("2*pi*r");
}
void GetArea(){
Console.WriteLine("pi*r^2");
}
public void Draw(){
Console.WriteLine("Circle");
}
}
class Program {
static void Main(string[] args){
List<IGeometrical> figures = new List<IGeometrical>();
figures.Add(new Rectangle());
figures.Add(new Circle());
foreach(IGeometrical f in figures){
f.GetParameter();
f.GetArea();
}
foreach(IDrawable f in figures){
f.Draw();
}
Console.ReadLine();
}
}
}
view raw IGeometrical.cs hosted with ❤ by GitHub

Комментарии

Популярные сообщения