BasicKnowledgeCSharp/LessonsAndTasks/Lesson 77 - Интерфейсы, зачем нужны и как используются, interface/Program.cs
Dvurechensky bf6a7c2b4e 1.1
2025-05-12 02:48:54 +03:00

72 lines
2.5 KiB
C#
Raw 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.

/*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 02:47:11
* Version: 1.0.3
*/
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();
}
}