BasicKnowledgeCSharp/LessonsAndTasks/Lesson 77 - Интерфейсы, зачем нужны и как используются, interface/Program.cs
Dvurechensky 058c8f2679 1.0
Main
2024-10-05 09:59:53 +03:00

64 lines
2.3 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();
}
}