64 lines
2.3 KiB
C#
64 lines
2.3 KiB
C#
|
using System;
|
|||
|
|
|||
|
/*
|
|||
|
* интерфейсы и полиморфизм
|
|||
|
*/
|
|||
|
/// <summary>
|
|||
|
/// *принято что каждый класс и каждый интерфейс находится в своем отдельном файле
|
|||
|
/// Интерфейсы - как конструкция языка программирования C#
|
|||
|
/// мы определяем поведение которое в последствии будет реализовано в конкретном классе
|
|||
|
/// важное отличие интерфейса от абстракции в том что оно позволяет множественное наследование
|
|||
|
/// То есть один класс может наследовать несколько интерфейсов (класс не наследуется от интерфейса, а реализует его
|
|||
|
///
|
|||
|
/// нет конструкторов
|
|||
|
/// нет полей класса
|
|||
|
/// только поведение(методы и свойства) и контракт
|
|||
|
/// все по умолчанию имеют модификатор public
|
|||
|
/// </summary>
|
|||
|
interface IDataProvider
|
|||
|
{
|
|||
|
string GetData();
|
|||
|
}
|
|||
|
|
|||
|
interface IDataProcessor
|
|||
|
{
|
|||
|
void ProcessData(IDataProvider dataProvider);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Также должны реализовать все компоненты интерфейса
|
|||
|
/// </summary>
|
|||
|
class ConsoleDataProcessor : IDataProcessor
|
|||
|
{
|
|||
|
public void ProcessData(IDataProvider dataProvider)
|
|||
|
=> Console.WriteLine(dataProvider.GetData());
|
|||
|
}
|
|||
|
|
|||
|
class DbDataProvider : IDataProvider
|
|||
|
{
|
|||
|
public string GetData() => "Данные из БД";
|
|||
|
}
|
|||
|
|
|||
|
class FileDataProvider : IDataProvider
|
|||
|
{
|
|||
|
public string GetData() => "Данные из файла";
|
|||
|
}
|
|||
|
|
|||
|
class APIDataProvider : IDataProvider
|
|||
|
{
|
|||
|
public string GetData() => "Данные с HTTP";
|
|||
|
}
|
|||
|
|
|||
|
class Program
|
|||
|
{
|
|||
|
static void Main()
|
|||
|
{
|
|||
|
// ссылка на интерфейс может хранить объект класса который его реализует
|
|||
|
IDataProcessor dataProcessor = new ConsoleDataProcessor();
|
|||
|
// полиморфизм в чистом виде
|
|||
|
dataProcessor.ProcessData(new DbDataProvider());
|
|||
|
dataProcessor.ProcessData(new FileDataProvider());
|
|||
|
dataProcessor.ProcessData(new APIDataProvider());
|
|||
|
Console.ReadKey();
|
|||
|
}
|
|||
|
}
|