Единственное внятное объяснение интерфейсов, спасибо большое
@lllraytoxlll
3 жыл бұрын
Единственное внятное видео по C#. Впервые с ходу понял всё без вчитывания в теорию на metanit-е (кстати там вообще всё плохо с интерфейсами, на мой взгляд). Были бы все уроки в таком же стиле.
@ТуралИскендерли
4 жыл бұрын
Присоединюсь ко всем коментам. Пока добрался до этого видео мозг выдавал фатальный эрор!!!!! читая и просматривая другие видео про интерфейс Очень внятное объяснение с первых же минут. Спасибо огромное.
@sfuid
4 жыл бұрын
Автор ты шарпист от Бога. Спасибо за простые объяснения!
@CryptoVangard
3 жыл бұрын
2021 - это по прежнему самый внятный урок по Интерфесу .От души благодарочка и лайк !
@vovaka440
3 жыл бұрын
Я потратил очень много времени, перечитав разные источники, как на русском, так и на английском, но нормального толквания я не нашел. И вот наткнулся на это видео и как-то прям на все мои вопросы сразу дались ответы и не заметил как быстро пробежали 24 минуты. Спасибо за труд!
@Maylilev
Жыл бұрын
Крутейшее объяснение для чего нужны интерфейсы
@pavelo9998
10 жыл бұрын
Крутое толкование! Здоровья тем кто записывал, вы молодцы !
@hopexstudio6388
2 жыл бұрын
Привет из 2022 года, по-прежнему актуальный вопрос, спасибо за урок!
@darthmalak7951
8 жыл бұрын
Лучшее что я видел/читал про интерфейсы.
@astoriuswho8250
9 жыл бұрын
Благодарю вас за качественное изложение материала.
@ВячеславЛиманский-у1в
10 жыл бұрын
Неплохо было бы в контексте этой темы затронуть тему абстрагирования(как еще одному базовому принципу ООПроектирования) и делегирования - это бы прояснило ситуацию с надобностью интерфейсов(в тех случаях когда встает вопрос - почему нужно использовать интерфейсы, а не, например, абстрактные классы). Интерфейсы - легкая и одновременно сложная тема для понимания. Главный ключ - Абстрагирование!
@albertmakarov2249
6 жыл бұрын
Вот тут огромный лайкос, сразу видно, человек на своей шкуре почувствовал, сложность темы. Ясное и внятное объяснение
@osipov180
9 жыл бұрын
Очень толковый урок! Спасибо.
@ДжоБайден-у9е
3 жыл бұрын
Очень хороший пример для объяснения смысла интерфейсов. До этого не понимал зачем они нужны, так как все примеры просто дублировали функциональность классов
@gorbulevsv
8 жыл бұрын
Спасибо за простое и понятное объяснение. Читал как-то об этом в книге, но там была только явная реализация, и я подумал - а зачем нужны эти заморочки.
@ЖенекБатраков-с8т
5 жыл бұрын
Самая лучшая подача материала которую я встречал
@ДмитрийАфанасьев-ъ4с
6 жыл бұрын
Очень внятно и доступно. Спасибо Автору!
@daryan3918
7 жыл бұрын
Спасибо вам большое, особенно за последний блок объяснения про явную реализацию интерфейсов. Наконец-то стало понятно))
@the_djo
9 жыл бұрын
Одним словом "Костыль"! - Улыбнуло =)))) Спасибо за уроки!
@another4629
4 жыл бұрын
И правда понятное объяснение. Спасибо.
@SERG__ZV
5 жыл бұрын
Классное видео, теперь я хоть примерно понял зачем эти интерфейсы нужны.
@roduman
5 жыл бұрын
КРАСАВЧЕГ - спасибо тебе. Только ты смог объяснить мне что это такое.
@mykhailomorhal2181
6 жыл бұрын
Очень хорошие уроки.Много нового узнал)
@GanovAlex
5 жыл бұрын
Отличное объяснение все четко и понятно 👍
@lenaartemenko9240
6 жыл бұрын
Офигенское объяснение!!!! СПАСИБО
@yakovga
4 жыл бұрын
Замечательный урок, спасибо!!
@tuzman91
9 жыл бұрын
Отлично! Очень полезный и понятный урок. Спасибо :)
@andruf3310
6 жыл бұрын
Ух ты.... Вот это круть!
@tashadexter92
5 жыл бұрын
Спасибо за материал, очень доступно!
@MaksUsanin
7 жыл бұрын
пока я понял что за исключением событий и делегатов, и немного отличием синтаксиса если сравнивать с Java то один в один, но как раз таки события и делегаты могут вносить свой большой вклад в архитектуру приложения
@daza3425
7 жыл бұрын
nakonezto ponjala etu temu ! spasibo !!
@НиколайГастелло-с5е
4 жыл бұрын
Урок прекрасный
@NatuNuarat
8 жыл бұрын
Спасибо за урок, всё отлично понятно :)
@YuriiKosiak
7 жыл бұрын
Спасибо за уроки. На 15 минуте в методе Build и Move указано имя переменной cost. Так и должно быть, или это опечатка? В move видимо должно было быть speed ?
@ivanprokhorov5951
11 жыл бұрын
Для чего создавать ещё и интерфейс, если можно просто реализовать в каждом классе метод GetSpeed()? Уточните пожалуйста: интерфейс - просто контракт между классом и компилятором, что первый реализует некий метод? Или интерфейсы нужны для лучшего понимания кода? Или всё таки есть более глубокий смысл использования интерфейсов?
@newyoutube7242
7 жыл бұрын
Спасибо большое!Очень хороший урок!
@Defazze
11 жыл бұрын
Переменную какого типа мы будем передавать в метод Move, если просто реализуем в нужных классах GetSpeed()? Интерфейс - суть контракт между классом и компилятором. Однако интерфейсы можно использовать по разному. В частности, в следующем уроке интерфейсы используются для декорирования основного класса. Насчет "лучшего понимания кода" - не уверен, что интерфейсы можно для этого использовать.
@DarthVader100500
5 жыл бұрын
Большое спасибо!
@АлексейЛуняев
9 жыл бұрын
Я самоучка, поэтому заранее извиняюсь за возможно наивный вопрос. Зачем вообще создавать одну лишь сигнатуру в интерфейсе ? Мы же в классах полностью прописываем тела методов. Что изменится, если мы вообще не будем создавать интерфейсы и просто напишем методы в классах ?
@qweqwe123qewweqwe
8 жыл бұрын
+Алексей Луняев, очень долго объяснять. Если вкраце - то ваш код более модульный, более поддерживаемый. Рекомендую почитать литературу по набору принципов SOLID. А также введение к книге Dependency injection in .NET - там хорошо объясняется, что такое слабая связность кода и почему это есть благо.
@ВладиславВолотовский-и4х
8 жыл бұрын
+Алексей Луняев одним из положительных моментов реализации интерфейсов также является то, что вы можете: - создавать коллекции экземпляров различных типов, которые реализуют конкретный интерфейс, и обращаться к каждому элементу методами этого интерфейса - также вы можете написать методы расширения для всех типов поддерживающих некий интерфейс, что также бывает очень удобно.
@Dialect6081
3 жыл бұрын
В этом будет сложнее ориентироваться, интерфейсом же мы как бы подписываем контракт на то, что все его члены обязаны быть реализованны в классе, имплементирующем этот интерфейс. Другими словами, видя реализацию интерфейса в каком-то классе, мы знаем, какие поля и методы там гарантированно реализованы.
@shurale85
7 жыл бұрын
Добрый день!Очень понравилось объяснение! Спасибо! Нет ли у вас в планах сделать урок на тему внедрения зависимостей?
@KlenKlenov
4 жыл бұрын
Спасибо!
@behaerkaev6492
4 жыл бұрын
круто объяснил спасибо
@nezajac
4 жыл бұрын
Если интерфейс реализуют но пишут методы интерфейса с нуля, какой смысл вообще реализовывать тогда интерфейсы, нет варианта написать новый метод?
@artemio150
10 жыл бұрын
Может что бы лучше понимать сенс сущностей стоит приводить какие-то моменты истории , они же не просто так возникают делегаты интерфейсы и тп. Потому что вот сложность как раз спроектировать. Всегда есть соблазн создать мусорку
@Defazze
10 жыл бұрын
См. урок 7, "Пример создания приложения".
@BAS-64
5 жыл бұрын
Супер
@yuryyudanau2868
7 жыл бұрын
Хотелось бы узнать, каким образом метод sort проверяет реализован ли интерфейс IComparable. И как вообще узнать реализован ли такой то интерфейс у класса.
@genadypisarev884
9 жыл бұрын
Хорошие уроки . из всех что я смотрел . спасибо . единственная проблема что я совсем новичок в программировании .и еще более самоучка . с этим и связана моя проблема . пока я не пойму где это применять и еще более не напишу что нибудь используя одно или другое .то я наверное так и не пойму . например для чего нужны интерфейсы я понял . но вот статические и обстрактные методы классы ,и,т,д . я не пойму для чего вся эта волокита .ну есть конечно еще много чего что для меня кажется не понятным и бесмысленно применимым . например как сетер и гетер . для чего они нужны ? зачем их подставлять к переменным .? я этого не понимаю хоть и смотрел ваш урок .. когда в гетер пишешь какую-то логику то еще куда ни шло . ну например проверяем что-б число было не меньше ноль .. а писать просто string myString{set;get}; зачем это? ничего же не принимается и ничего не проверяется ?
@Saby1983x
9 жыл бұрын
genady pisarev Если еще не разобрался сам, то подмогну, авось еще кому поможет. >но вот статические и обстрактные методы классы ,и,т,д . я не пойму для чего вся эта волокита Статический класс в принципе не особо нужен, но допустим, глядя на класс 2DUtility я примерно пойму по названию для чего он нужен, и соответсвенно уменьшу названия части используемых функций - т.е. это синтаксический сахар по сути. Абстрактный класс - наследние от С++. Дело в том что С# в первой редакции разрабатывался через одно место, и там повсюду компромиссы. Так что эта "волокита" - следствие старых ошибок и концепций. >сетер и гетер . для чего они нужны? Это на самом деле пострясающая и исключительно нужная вещь. С их помощью ты можешь сохранять инвариант класса ))) То бишь - отсекать недопустимые действия, вызывать нужные, и т.д., в общем это крайне необходимая вещь. Есть даже такой "паттерн" - property - и используется он практически повсеместно. К примеру - в игре у тебя у перса здоровье опустилось меньше 0, и ты - вместо того чтобы отслеживать это во многих местах внутри игры, вешаешь делегат, который дергается когда здоровье становится равным/меньше нулю, и в сеттере проводишь все проверки, включая дергание делегата и т.п. В-общем используется в каждом практически проекте, большем пары десятков строк. >string myString{set;get}; У меня в той же vs по умолчанию так и подставляется. Лень стирать )
@hello_world_zz
5 жыл бұрын
1:50 По моему , модификатор доступа у методов не зависит от модификатора доступа интерфейса. Он всегд public
@afk4268
6 жыл бұрын
Здравствуйте. Посоветуйте вменяемый интернет-задачник для С# типо codewars? Codewars не устраивает тем, что там задания написаны на английском и иногда их перевод занимает большое количество времени. Советы о том, что нужно подтянуть английский язык можете не писать :)
@artemio150
10 жыл бұрын
И вот такой ещё вопрос. По какому принципу можно быстро ориентироаться в дотнете? Вот у вас тут в примере при необходимости сортировки клас пронаследил фреймворк, могут быть и другие более сложные может быть варианты, когда есть понимание как релизовать там допустим туже сортировку, но в дотнете допустим это есть. Вот может есть способ не опускаясь до гугла мониторить возможности дотнета на нужный тебе предмет? Вот как к примеру вы обращаетесь к дизасемблеру, нечто в этом роде.
@Defazze
10 жыл бұрын
Зависит от того, в какой предметной области происходит работа. Например, если мы имеем дело с десктоп-приложением, значит, надо обязательно знать библиотеку System.Windows.Form и класс Control. Что касается общих вещей, то никогда не лишнем будет знание множеств (см. урок 9, "Множества"). И т. д. Ориентирование в дотнете всё равно приходит с практикой.
@ReasonX3
10 жыл бұрын
Все же не совсем понятно как быть, если класс должен унаследовать два других класса, не меняя их реализации. Если наследовать интерфейсы, то в каждом классе, который их наследует нужно писать собственную реализацию, но тогда получается дублирования кода. Или же в подобных случаях внутри класса просто объявляют экземпляры классов, функционал которых он должен был унаследовать?
@Defazze
10 жыл бұрын
Как правило, каждый класс, который реализует интерфейс, осуществляет собственную реализацию этого интерфейса, поэтому дублирования кода не происходит. Если же в коде выявляются какие-то общие участки, их можно вынести во внешний статический класс (получится так называемый хелпер). Тему хелперов и методов расширения мы будем рассматривать в 10 или 11 уроке.
@ReasonX3
10 жыл бұрын
Defazze Спасибо за ответ и за Вашы труды! Жду новых уроков.
@максКозлов-ф3ш
2 жыл бұрын
2022 крутое видео
@mugen31337
8 жыл бұрын
а как через Array отсортировать строковые типы?
@СофияСолнцева-й7щ
10 жыл бұрын
Как-то я не уловил. А почему у нас тип возвращаемого значения обджект - почему не стрин. Мы ведь строку возвращали в методах GetMenu(). Или обджект используется как общий класс для всего... 42...
@Defazze
10 жыл бұрын
Можно и string. В данном случае это совершенно непринципиально. На самом деле этот пример целиком взят из Рихтера )
@ramzaysorge4435
6 жыл бұрын
Добрый день. Вот в красивой и правильной схеме, объясните пожалуйста. Если нужно определить свойство, которое должно быть во всех шести объектах Cat, Dog, TransportShip,FightShep, StateHouse и Hotel. Например, свойство Name. У каждого объекта оно должно быть. Где его нужно определять? Создать интерфейс нельзя, поскольку интерфейс - именованный набор сигнатур методов. В базовых классах - стремно, потому что их может быть много и в одном из них можно забыть это сделать. Ну а в дочерних классах совсем не место.
@BastionKadabr
6 жыл бұрын
в книге по которой учу - к примеру все фигуры идут от базового класса Shapes все сотрудники продажи Employee ну все правильно у каждой так сказать категории свой базовый абстрактный класс откуда и идут имена формы возраст бонусы и так далее просто потом например если собаку надо засунуть в дом это как бэ соединяется другим методом
@BastionKadabr
6 жыл бұрын
на сколько я понимаю на схеме Speed и Producktion наверно делегаты те это отдельные файлы с методом и с помощью делегирования в Animal BaseShip и BaseHouse созданы их объекты которые уже распространяются на дочерние если бы я делал то лучше в каждом базовом определил бы отдельно хотя если еще куча базовых классов то можно и отдельно но на сколько я понимаю это уже свой стиль
@ramzaysorge4435
6 жыл бұрын
SpeedObject и ProductionObject, в контексте урока, - интерфейсы. Оказывается, как я уже выяснил, в интерфейсах можно описывать не только методы, но и свойства. Следовательно, описать свойство Name нужно в SpeedObject и ProductionObject. В реализациях этих интерфейсов Animal, BaseShip и BaseHouse мы обязаны будем определить свойство Name, а уже во всех потомках использовать это свойство. Спасибо, что помогли разобраться.
@РНС_Саакашвили
Жыл бұрын
@@BastionKadabr скажите пожалста . . . что в вашей книге сказано по поводу того что висьюал студия в диаграмме классов не отображает связь между интерфейсом и классом, который его реализует - по примеру такого отображения как между абстракным классом и наследуемым его классом ?????
@РНС_Саакашвили
Жыл бұрын
@@BastionKadabr а VS это должна отображать ? . . . если да - то я буду искать причину . . .
@СофияСолнцева-й7щ
10 жыл бұрын
И с явной реализацией что-то не так. Мы убрали реализацию метода в классе, но мы не убрали его вызов в программе, поэтому компилятор и ругнулся. Вот убрал я вызов, оставил только методы интерфейса - всё скомпилировалось и сработало. Мы ведь не обязаны его вызывать - равно как и методы интерфейсов. То есть минус вроде и назван, но неочевидно в чём он заключается - у нас не Питон, есть типы, модификаторы доступа - всё разложено по полкам таким образом. Тут тоже - 2 разных метода, для разных интерфейсов - вроде ничего не запутывается... Может есть какой другой пример явной реализации?
@Defazze
10 жыл бұрын
Модификаторы доступа тут не при чем. Суть явной реализации интерфейса - методы, реализованные явно, могут быть вызваны только у экземпляра, тип которого является этим интерфейсом. А вот если тип экземпляра реализует интерфейс, то методы, реализованные явно, вызваны быть не могут. Пример: тип Array (любой массив) реализует интерфейс IList. В интерфейсе IList есть метод Add. Однако если мы создадим массив, метода Add в экземпляре мы не увидим. Потому что он реализован явно. Тем не менее мы можем вызвать метод Add, если приведем наш массив к IList. Правда, тут же напоремся на исключение )
@ВячеславЛиманский-у1в
10 жыл бұрын
habrahabr.ru/post/30444/ - ответ на главные вопросы по этой теме. там в комментах есть бородатый пример с квадратом и прямоугольником. Есть такие принципы ООПроектирования - S.O.L.I.D. В частности L - принцип подстановки Лисков - дает понимание когда нужно наследовать(расширять) классы, и углубляясь в тему, можно понять когда реализовывать интерфейсы, при якобы нужном наследовании. В некоторых языках(не C#) синтаксис говорит сам за себя: class Child extends(РАСШИРЯЕТ) ParentClass, но - class Child implements(РЕАЛИЗУЕТ) IComparable. Т.о. нужно всего лишь для начала запомнить - расширяет класс, но реализует интерфейс. :)
@Сергей-э9ы3б
8 жыл бұрын
А что значит "интерфейс ай компэрэбл должен быть реализован типом данных независимо от цепочки наследования"? Если используется наследник, то для сортировки его типа реализация ай компэрэбл в родительском классе (по каким-то общим полям) не сработает?
@Defazze
8 жыл бұрын
+Юрий Пискунов Пожалуйста, укажите тайминг, невозможно помнить наизусть все уроки ) Что касается вопроса - конечно же, если реализация ICOmparable есть в родительском классе, то наследник так же будет ее поддерживать.
@Сергей-э9ы3б
8 жыл бұрын
+Программирование - это просто Конечно. Извиняюсь. 19:08
@Defazze
8 жыл бұрын
+Юрий Пискунов Честно говоря, уже не помню, почему я так сказал ) В любом случае, смотрите мой предыдущий ответ - он корректен.
@Сергей-э9ы3б
8 жыл бұрын
+Программирование - это просто И ещё одно. А если ситуация, когда нужна последовательная сортировка элементов массива по разным полям. Сначала по возрасту, потом по оценкам...
@Defazze
8 жыл бұрын
+Юрий Пискунов тогда в случае равенства возрастов не надо возвращать 0 в методе CompareTo, а переходить к анализу следующего поля.
@Nikita_Pro89
7 ай бұрын
Объясняете вы хорошо, но все равно не понятно, зачем нужны интерфейсы, если все то же самое можно сделать без них. Я просто не понимаю в чем их смысл, если в них нельзя реализовывать логику работы каких-либо методов, как в классе например. Я уже 4 видео посмотрел на ютубе, но до сих пор не могу понять, для чего нужны интерфейсы.
@uritisx
Ай бұрын
Я тоже до этого не особо понимал, но после видоса от экстримкода про интерфейс, то понял почему их используют
@ffs_999
9 жыл бұрын
а как же свойства в интерфейсе? :(
@ВячеславЛиманский-у1в
10 жыл бұрын
не реклама и не мой пост - нтересующимся немного прояснит ситуацию - habrahabr.ru/post/30444/ Рекомендую прочитать комментарии несколько раз подряд для полного понимания сути вопроса!!
@zayarniy
8 жыл бұрын
На самом деле этот из разряда если ты уже все знаешь, то можешь еще раз послушать. Слишком много начитанного материала.
@Fakels2011
7 жыл бұрын
Какая-то темная эта тема с интерфейсами, про диграммы в начале урока можно былобы это все реализовать и без интерфейсов, без множественного наследования, и без класса мусорки.Не понятен толком смысл этих интерфейсов.
@ВячеславТимофеевич
6 жыл бұрын
kzitem.info/news/bejne/x6tnmZhnj2lkfmk тут объясняться более точно смысл интерфейса, я тоже думал что можно просто создавать abstract
@playmarket8605
3 жыл бұрын
Короче весь смысл интерфейсов это обязывать класс чтобы, он имел определённый список методов.
@НищаяБлоха
3 жыл бұрын
Нет
@MrXripper
10 жыл бұрын
Тип возвращаемого значения не входит в сигнатуру метода.
@Defazze
10 жыл бұрын
Для перегруженных методов - не входит. Для интерфейсов и делегатов - входит. msdn.microsoft.com/ru-ru/library/ms173114.aspx
@MrXripper
10 жыл бұрын
Извините - не дочитал :)
@thedyxxx
7 жыл бұрын
Сложилось впечатление, что интерфейсы это некая замена множественного наследования. Т.е. если в языке есть множественное наследование - то интерфейсы становятся не нужны?
Пікірлер: 99