C#

Может ли это быть тревожным звоночком к тому что я тупой?

Я весь день пытаюсь понять как и для чего использовать интерфейсы в C# но так ничего и не понял... Это вообще считается сложной темой или нет?
IM
Isroil Mamadaliev
831
Почитай про апкаст.
Легче понять по примеру.
Нам необходимо создать класс, который к примеру будет производить запись. Мы предполагаем, что запись возможна: просто отображение на дисплее, запись в файл, запись в БД.
Создаем интерфейс, в нем будет метод, к примеру write, без параметров.
Создаем 3 класса, которые реализуют интерфейс. В этик классах создаем метод Write.
В итоге имеет что то такое
НашИнтерфейс I = new КлассЗаписьБД;
I.Write() - будет запись в БД
I = new КлассЗаписьФайла
I.Write() - будет запись в файл
I = new КлассОтображениеНаДисплей
I.Write() - отобразит на дисплей.
Можно вещи гораздо более сложные делать.
ЮД
Юрий Дёмин
9 058
Лучший ответ
Isroil Mamadaliev То есть грубо говоря интерфейс это своего рода супер универсальный метод, который можно применить к любому классу, если тот унаследует этот интерфейс... Но реализовывать этот метод мы должны уже в самих классах в зависимости от того что нам нужно сделать... Как-то так?
Юрий Дёмин Думаю так будет более понятно.
Ну я понимаю Интерфейс как какой то специализированный Класс заточенный под определенные типы данных или операции.
Как использовать? Написано в MSDN https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/keywords/interface
Для чего? Ну например вы пишите какой то Кулькулятор. И внезапно обнаруживаете что в этом Кулькуляторе постоянно используется одна и та же формула (например расчет процентов по займу: Сумма процентов по займу = Сумма займа * Процентная ставка / 365 (366) дней * Количество дней пользования займом). Её можно реализовать в Классе, но лучше будет если это будет Интерфейс где описаны все переменные (их типы, проверки на вшивость и соответствующие сообщения чтобы Пользователь не пихал туда исключения) и собственно сама Формула.

Прошу не кидать в меня тухлые помидоры написал как я это понимаю без гуглов.
Arsen Babayan
Arsen Babayan
79 217
Isroil Mamadaliev я не люблю сайт майкрософт, там все сложно и непонятно ничего... Я написал комментарий (к ответу выше) как я понял интерфейсы, это конечно максимально глупо и нелепо но все же я хоть примерно приблизился к истине?
Может ты не так смотришь на проблему
Тренируйтесь и все обязательно получиться!
Не поняли сегодня, значит поймете завтра или послезавтра. Не нужно спешить
Все нормально. Может быть путаница с абстрактными классами. Попробуй сделать метод, принимающий параметр типа интерфейса, и повызывать его с различными реализациями. Ты увидишь, что твой метод сможет работать с объектами различных классов, а также структур, даже не связанными иерархией наследования.
Илья Саено"к"
Илья Саено"к"
2 076
Isroil Mamadaliev Спасибо, попробую... Но ты полностью прав я не понимаю зачем нужны интерфейсы когда есть абстрактные классы.

Единственный вывод который я сделал это то что интерфейсы нужно в следующей ситуации: У нас есть 2 класса, которые вообще между собой никак не связаны: например класс Яблоко и класс автомобиль. Очевидно что использовать абстрактный класс в такой ситуации это нелепо так как классы абсолютно разные... Но у них есть одно общее свойство-цвет. Поэтому мы может реализовать интерфейс, который содержит метод который реализует вывод на консоль цвета этих обьектов. После чего оба класса просто наследуют данный интерфейс и можно будет вызвать метод, который показывает цвет этих обьектов. Это примерно так работает или то что я написал это бред?
Илья Саено"к" Да, примерно так это и работает ????
Илья Саено"к" Плюс еще у интерфейсов есть множественное наследование, что дает некоторые дополнительные возможности по их компоновке в более сложные интерфейсы.
Прежде чем учить язык надо сначала разобраться с ООП
Isroil Mamadaliev так я и пытаюсь разобраться, интерфейсы являются частью ООП
Совсем нет