Интерфейсы. C#
Интерфейс представляет собой именованный набор абстрактных членов класса. Он выражает поведение, которое данный класс может избрать для поддержки. В библиотеках базовых классов .NET поставляются сотни предопределенных типов интерфейсов, которые реализуются в различных классах.
Например, в состав ADO.NET входят множество поставщиков данных, которые позволяют взаимодействовать с определенной СУБД. В интерфейсе ни у одного из методов не должно быть тела, т.е. не предоставляется никакой реализации (указывается, что следует сделать, а не как это сделать). Как только интерфейс определен, он может быть реализован в любом количестве классов.
Имена интерфейсам следует давать с префикса I. Все методы интерфейса должны быть реализованы в каждом классе, включающем в себя этот интерфейс. Чтобы указать, что класс реализует интерфейс, необходимо так же, как и при наследовании, после имени класса и двоеточия указать имя интерфейса.
Множественное наследование есть в C++, а в C# от него отказались и внесли интерфейсы, т.е. класс может сразу реализовать несколько интерфейсов.
Если класс реализует несколько интерфейсов, то они разделяются запятыми.
Пример. Есть классы геометрических фигур - прямоугольник и окружность. У обоих классов должны быть методы вычисления периметра и площади. Эти методы мы представим интерфейсом.
Например, в состав ADO.NET входят множество поставщиков данных, которые позволяют взаимодействовать с определенной СУБД. В интерфейсе ни у одного из методов не должно быть тела, т.е. не предоставляется никакой реализации (указывается, что следует сделать, а не как это сделать). Как только интерфейс определен, он может быть реализован в любом количестве классов.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
interface Имя { | |
возвр.тип имя_Метода1(список параметров); | |
возвр.тип имя_Метода2(список параметров); | |
} |
Множественное наследование есть в C++, а в C# от него отказались и внесли интерфейсы, т.е. класс может сразу реализовать несколько интерфейсов.
Если класс реализует несколько интерфейсов, то они разделяются запятыми.
Пример. Есть классы геометрических фигур - прямоугольник и окружность. У обоих классов должны быть методы вычисления периметра и площади. Эти методы мы представим интерфейсом.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} | |
} | |
} |
Комментарии
Отправить комментарий