Уроки C# (C sharp) | #22 - Интерфейсы
Vložit
- čas přidán 6. 09. 2024
- В этом уроке мы с вами выучим что такое интерфейсы, как их можно использовать и зачем вообще они нужны. Кроме того, мы также с вами выучим множественное наследование классов.
✔ Основной сайт: itproger.com/
✔ -------------
Группа Вк - prog_life
Группа FaceBook - goo.gl/XW0aaP
Я в Google+ - goo.gl/Tqt9W0
Страничка Twitter - / goshadudar
Страничка Вк - codi999
✔ Начните зарабатывать на CZcams - join.air.io/mon...
✔ Видео по заработку на CZcams - goo.gl/RLPXV8
Помощь в развитии канала.
* Яндекс Деньги: 410014343706921
* Кошельки WebMoney:
- Доллар: Z331064341236
- Гривна: U386388718252
- Рубль: R214610220703
В этом видео использованы такие примеры, что использование интерфейсов кажется бессмысленным.
То чувство, когда люди в комментариях объясняют понятнее.
Вопрос: " Для чего нужны интерфейсы?"
Все довольно просто. Для самоконтроля и чтобы не было путаницы.
Например, если вы будете работать над каким-то проектом в команде, и вам потребуется написать большое количество схожих чем-то классов. Возможно вы будете писать их с товарищем, но для того, чтобы методы и свойства не имели разные названия, чтобы их было определенное количество, вам потребуется написать интерфейс.
Без него можно, но это менее удобно, ведь в нем все написано, вам остается лишь реализовывать, а не запоминать методы и их названия или просматривать код тысячу раз.
Nikita Boyko
Вух*
Спасибо тебе огромное за столь четкое и понятное обьяснение👍,я уже несколько дней ломал себе голову и пытался найти ответ в интернете по этому поводу 😊
Спасибо
После видео примерно до этого определения уже сам дошел, но хотел услышать подтверждение) спасибо)
Тоже хотел поблагодарить за объяснение. А то при просмотре урока то чувство, когда синтаксис не сложен, однако смысл усложнения кода объявлением чего-то заранее не понятен. Прохожу данный плейлист и уже на подступах к завершению этого курса складывается впечатление, что синтаксис языка более или менее начинаю понимать, но где что применять на практике - это размыто. Теперь всё стало на свои места хотя бы в данной теме. Я даже скопировал содержание комментария в свой конспект, т.к. оно раскрывает важную практическую суть интерфейсов.
Смотрю комменты. У многих проблемы с понимаем, также встречался с подобными трудностями. НО, проблема в том, что программирование не выучить быстро. Не пытайтесь идти по урокам семимильными шагами и закрепляйте уроки написанием своего небольшого проекта. Курс не для того, чтобы сделать из вас специалистов, а чтобы вы понимали какой есть инструментарий. Когда типы инструментов ясны, о том как ими пользоваться гораздо проще найти в майкрософт документации. Проще говоря, этот курс для того, чтобы научиться учиться и понимать где и что нужно почитать, чтобы ответить на свой вопрос.
Тема зачем нужны интерфейсы не раскрыта, если мы не можем описывать метод внутри интерфейса, и обязаны использовать методы внутри классов наследников с последующим его описанием, можно и без интерфейса объявлять методы и описывать их внутри классов с тем же описанием как и в случае с интерфейсами, зачем нужны интерфейсы?
грубо говоря, интерфейс - контракт, что класс, реализующий интерфейс, умеет что-то делать. Когда нам нужно задать некое поведение объекта класса, мы указываем, что он реализует интерфейс, после чего спокойно с ним работаем, зная, что он что-то умеет - это удобно в многоуровневом проектировании
мда, перечитал свой ответ и фейспалмом разбил себе лоб - учитель с меня никакой)
читайте книги, а не уроки на ютубе смотрите
@@WhatCookies а что посоветуете по С#
Интерфейсы не наследуются, а реализуются! Зачем вы изначально путаете новичков?!
@@Hunter314414 Ну вообще то разница огромная. Я пришел из front-end, где в typescript интерфейсы служат лишь для описания. Здесь же, слушая автора, я подумал что в c# они используются как самостоятельные классы, от которых можно наследоваться и разница между классами и интерфейсами лишь в том, что от интерфейсов можно делать мультинаследование. Вы действительно разницу не чувствуете? Новичку может и насрать на правильные термины (к слову вам насрать), а человеку, который шарит в программировании, просто входит в синтаксис нового языка, затупливает, потому что не верные термины и описание в целом.
Это хорошо что много.)) Хороший и полезный день.
Единственное, не расписал доступ к классу через интерфейс, а штука очень полезная.)
То есть:
Test test_1 = new Test();
Test_2 test_2 = new Test_2();
List list = new List ();
list.Add(test_1);
list.Add(test_2);
foreach (ISomeInterface inter in list) {
inter.Print();
}
По моему мнению, урок очень полезный, но только если знаешь, что тебе для решения твоей задачи нужен интерфейс. Мне интерфейсы нужны для ого, чтобы сочинять поведение игровых объектов, я хочу, чтобы один объект мог наследовать и получать информацию от другого. Без интерфейса я не могу сделать так, чтобы игровой объект наследовал от нескольких других самых разных объектов, которые не существуют на момент создания игры, но создадутся во время прохождения игры, и это видео помогло мне составить интерфейс грамотно. Спасибо
Готов поспорить, настоящие разработчики решают мою проблему элегантнее, но на данный этап своего развития мне нужны интерфейсы
за труд, спасибо
НО, урок далек от совершенства,
объяснения для тех кто в теме (и то, им объяснять уже не нужно)
для тех кто учится, тема не раскрыта
Как вводный урок, дополняющий другие имеющиеся материалы пойдёт на самом деле. Просто не все используют метод под названием "смотрим за сессию несколько разных источников".
Простите, господа, но уже на 9 минуте мне очень захотелось стукнуть нашего любимого блогера :)
Можно стереть 2 интерфейса и наследование от них и программа будет работать точно так же.
Образно говоря, можно сказать, что интерфейс является шаблоном (классом) Класса, т.е. Классы в каком-то роде являются объектами Интерфейса ))))
Предлагаю тебе делать так: сначала даешь теорию, потом в конце видео задачи, которые мы должны выполнить для закрепления. Затем видео, в котором ты объясняешь как они решаются и почему именно так. А только затем уже следующий урок.
Вообще не понимаю смысла их использовать?
Ну например для разработки API
Я то же раньше не понимал, недавно буквально месяц назад столкнулся с проектом где нужно было очень много методов писать разных. Но все были связаны с одним классом, так вот наследование вышло просто головоломкой. Интерфейсы помогли. Они помогают избежать создания новых ненужных классов.
Помогает даже в том случае, когда ты в слепую обрабатываешь класс. Например возьмём плагины. Как ты узнаешь, что там за методы и поля? Конечно через интерфейсы. Можно сразу сказать разработчикам плагинов для твоей программы, что вы должны унаследовать какой-то интерфейс для реализации каких-то методов. Можно этот интерфейс поместить в библиотеку. Разработчик унаследует все методы и поля от интерфейса, реализует их и всё. А ваша программа может через библиотеку(интерфейс) уже интегрировать с классом, написанным разработчиком. Подробнее можно найти в google.
Спасибо большое)))!
В dotnet'е есть хороший, наглядный пример использования интерфейсов и это интерфейс IEnumerable и несколько других. При наследовании класса от него, компилятор c# может выполнить интерацию универсальных и не универсальных коллекций (цикл foreach) благодаря контракту между IEnumerable и классом, который его наследует. Контракт заключается в том, что класс обязуется реализовать методы, которые требуются для интерации коллекций. Еще один пример - это ICollection. Вы можете указать его в качестве аргумента, метода и т.д и записать в него массив. Так-как массивы наследуют ICollection - тем самым обьязуя реализовать члены класса, которые нужны для коллекций
В C# Нету множественного наследования есть множественная реализация это вам не C++
Урок - супер!!! Все понятно и доступно. Лайк 100%. Только вопрос в том, зачем интерфейсы (из урока понятно - для множественного наследования, здорово!!!). Но я так же могу и без интерфейсов создать классы (которые рассматриваются в видеоуроке). Мне не совсем понятно: 1) В чем выигрыш в применении интерфейса? 2) Где их действительно нужно применять, а где нет? 3) Можно ли привести какие-то концептуальные пимеры ?
Заранее, Спасибо
Точно такого же результата можно добиться и без интерфейсов. внутри обоих классов они обьявляютсяи реализуются. Если в этом примереполностью удалить интерфейсы то ничегоабсолютно не изменится. Я не до конца понял ((
Я видел их использование воизбежание цикла зависимостей
Множественного наследования в C# НЕТ!
Ты путаешь с реализацией множества интерфейсов. Боже мой, что Ты несете ((( Сам себя же опровергаешь......
Интерфейс это не класс, почитайте что такое класс. Класс несет реализацию! Интерфейс ее не несет.
Интерфейс это открытая (public) часть класса, т.е. методы, св-ва и тп для обращения к ним клиентов класса.
Они нужны чтобы давать возможность описать/использовать конкретные реализации. А не целиком класс.
Вот например: интерфейс IEnumerable - он нужен для foreach , ему не нужно знать других методов у класса/генерика и тп, он тупо работает через интерфейс IEnumerable, который реализует все необходимое для последовательного получения элементов из множества (массива, списка и тп).
Это как в машине у вас интерфейс: это панель приборов, руль, педали и вы управляете машиной через них, а не сидите на движке и не дергаете заслонки, колеса поварачиваете за рычаги, из кабины у вас нет доступа чтобы снять поршневую группу или отключить генератор и тп.
Интерфейсы нужны для конкретизации действий и возможностей класса.
Архитектуру ПО удобно разрабатывать на интерфейсах, а уже потом будет добавлена реализация.
Интерфейс это по сути как шаблон/маска/призма доступа к объекту класса.
Интерфейс это стандарт описания (сигнатура) методов/св-в и тп.
Интерфейс гарантирует что метод(ы) и тп будет называться именно так-то, и
параметры будут именно такими-то и возвращать метод будет именно
то-то.
ЗЫ Из видео видо что нет понимания что такое множественное наследование, да и вообще что такое наследование.
Дружище, он пытаеться донеси понятие новичку, вот я как новичок его более-менее понял, а вот тебя - нет, ибо ты очень заумно пишешь, на данном этапе моих знаний мне нужна простота и понятия, естественно, чем дальше буду углубляться в изучения языка я буду больше знать и понимать, а ты сходу грузишь тонной информации, зачем? Ведь можно не парится и дать изучающему язык тостущую книгу по программированию на данном языке и сказать: "сиди учи".
@@user-xd3we2qp4i, а я вот наоборот: только после прочтения комментария понял зачем нужны интерфейсы
@@gerty880 для каждого разный подход, но зачастую новичку дают инфу простую для того, чтоб он понял, а дальше уже самому легче разобраться, наставники нужны для того, чтобы дать старт. Стартуют с малого и простого. Если вам не понравился такой подход или у вас больше потенциал, то вы можете поискать другие источники подачи информации.
Класс
Также создание объектов таких как типо test_1 нужно при работе с библиотеками
Непонятно ))) Нафиг они нужны, можно и без интерфейса было написать в классе свойства и метод. Лишний код только на мой взгляд (: Фишка может быть в том, если привестись к интефесу, ну тогда останутся члены только интерфейс. А можете конкретный пример сделать, то что нельзя реализовать абстрактным классом можно реализовать интерфейсом.
public Build (IproductionObject product)
{
int cost = product.GetProductionCost();
}
(взял пример из урока канала "программирование - это просто")
В метод передается интерфейс. И на месте product может быть несколько различных классов, которые реализуют этот интерфейс.
Т.е не придется писать отдельно кучу разных методов Build, которые принимают в качестве параметра класс конкретного продукта (а таких продуктов будет, например, сотня). И тогда вместо сотни имеем лишь один метод.
Сам чайник, но написал как я понял "зачем". Поправьте если вдруг что-то криво написал!
Интерфейс это стандарт описания (сигнатура) методов/св-в и тп.
Интерфейс гарантирует что метод(ы) и тп будет называться именно так-то, и параметры будут именно такими-то и возвращать метод будет именно то-то.
чет классы Test и Test_2 не хотят наследовать ISomeInterface подсвечен красным, мало того после этого не подсвечивает консоль синим и программа перестает работать. все ломается при создании класса тест_2
очень странно все это произошло при копировании кода тест 1 для тест 2, баг в проге, переписал все тоже от руки все работает. Моно тупит
Люди добрые помогите мне с отступами пожалуйста не могу я уже мучаюсь только...когда допустим делаю Ctrl+C и Ctrl+V т.е. копировать и вставить в коде любую строчку ,то он вставляет не в то место после которого нажал Enter, а в самую левую часть...я уже не могу как настроить помогите!
Что за логика? Объясняешь что такое интерфейс, но не объяснешь что такое массивы и для чего они нужны.
что за логика? ты смотришь 22 урок, но не смотрел уроки, которые были раньше?
чуть не поперхнулся рекламой, которой тут ну просто дофигища.
Интерфейсы не наследуют, а реализуют. И ещё, Гоша пиши открывающею операторную скобку с новой строки, а в остальном норм.
Тут же вроде множественная реализация интерфейсов и наследование их же. Тема множественного наследования классов не раскрыта.
Множественного наследования нет в С# , он несет пургу.
9:40 сначала подумал что это мой живот был, однако...
Мммда, с 19-й части, ты все просто показываешь, что-то рассказываешь, но ни хрена не понятно, адекватных примеров, НЕТ.
надоело ему видимо уже это
На самом деле все офигенно понятно,надо просто параллельно изучать шарп по книге ,я не понял интерфейсы в книге ,прочитал их тут ,и сейчас все классно
Посмотрел *
Конечно в книге понятней когда не путают читателя называя объект класса классом и приводят не придуманные на ходу примеры. С терминологией в шарпе у меня вообще проблемы. По пять раз перечитываешь пока поймешь.
Множественное наследие, дочерний с ударением на о...
Слишам многа урокаф за день
Видимо ты и являешься эдаким школьником. Раз так агриссивно ведешь себя на стеб
еще и цензурит мат................... просто фейспалм
ладно придумали абстрактные классы (может чтоб потом кто-то открыл твой код и по абстрактному классу мог просмотреть список методов и немного понять что будут твои дочерние классы делать). это я ещё как-то могу понять. но зачем запрещать реализовывать методы в абстрактном классе и называть такой класс интерфейсом - не понимаю...
ты не можешь наследовать структуру в класе,а в интерфейсе ты можешь наследовать как структуру так и клас и использовать это в дальнейшем,думаю в этом и фишка
Столько отличных уроков и НА! тупой пересказ книги, я тоже самое могу прочитать, зачем на сказку время тратить. Где примеры, где примеры разницы с\без
Я сейчас читаю комментарии, и вижу что кто-то не понял , для таких людей объясню, интерфейс нужен для множественного наследования.То есть в обычном классе наследование может происходить только в один класс , а в интерфейсе в несколько, вот и все.)))
Тот момент, когда не понимаешь разницу между наследованием и имплементацией))
Судя, по каментам , урок нет смысла смотреть...
есть смысл, с точки зрения понятия новичка это самое то, посмотрите урок,единственный минус не очень правильно человек выражается а так все хорошо, скачайте троелсена и прочитайте 10 страниц про интерфейсы, когда вы понимаете что они делают и зачем. там увидите практическое применение
нихера не понял. Очень сомнительное объяснение надобности использования
Туфталогия какая то, зачем это все и что с этим делать абсолютно не понятно.