Подтвердить что ты не робот

Научиться эффективно использовать интерфейсы

Я некоторое время разрабатывал программное обеспечение на С#, но одна из основных областей, которые я недостаточно эффективно использую, - это интерфейсы. На самом деле, меня часто путают по различным способам их использования и когда их использовать. Например, я знаю, что методы могут возвращать интерфейсы, могут принимать их как параметры, могут быть получены из них и т.д. Эта концепция является для меня определенной слабостью.

Мне было интересно, знал ли кто-нибудь об источнике/учебнике, который четко и основательно объясняет интерфейсы по глубине и различные способы их использования?

4b9b3361

Ответ 1

Описание

Интерфейсы в С# обеспечивают способ достижения полиморфизма во время выполнения. Используя интерфейсы, мы можем вызывать функции из разных классов через одну и ту же ссылку на интерфейс, тогда как при использовании виртуальных функций мы можем вызывать функции из разных классов в одной иерархии наследования по той же ссылке.

Например:

public class FileLog : ILog
{
    public void Log(string text)
    {
        // write text to a file
    }
}

public class DatabaseLog : ILog
{
    public void Log(string text)
    {
        // write text to the database
    }
}

public interface ILog
{
    void Log(string text);
}

public class SomeOtherClass
{
    private ILog _logger;

    public SomeOtherClass(ILog logger)
    {
        // I don't know if logger is the FileLog or DatabaseLog
        // but I don't need to know either as long as its implementing ILog
        this._logger = logger;
        logger.Log("Hello World!");
    }    
}

Вы попросили учебники.

Учебники

Ответ 2

Интерфейсы обычно используются, чтобы заставить классы-исполнители подчиняться определенному контракту (что означает наличие определенных методов). Иногда они просто используются в качестве маркеров, то есть у них нет объявленных методов, но позволяют некоторым генераторам кода генерировать специальный код для класса реализации.

Сказав это, интерфейсы на самом деле не являются "инструментом" сами по себе, поэтому они не выполняют определенную функциональную задачу, но они могут значительно упростить дизайн вашего приложения и широко используются в шаблонах проектирования OO. Основным ресурсом является этот учебник: http://www.csharp-station.com/Tutorial/CSharp/Lesson13