Тёмный

C# - Абстрактный класс vs Интерфейс 

ExtremeCode
Подписаться 283 тыс.
Просмотров 93 тыс.
50% 1

Привет, в этом видео мы разберем основные отличия абстрактного класса от интерфейса и узнаем что, как и где применять в зависимости от задачи
Видео по интерфейсам
► Интерфейсы на практике: bit.ly/2pgUFqo
► Интерфейсы: bit.ly/2pxS5iI
Заходите и подписывайтесь на наши другие ресурсы!
● Telegram Chat: bit.ly/telegram_extremecodetv
● iTunes: bit.ly/itunes_extremecodetv
● Twitter: bit.ly/twitter_extremecodetv
● GitHub: bit.ly/github_extremecodetv
Музыка: Toronto - Da Tooby

Опубликовано:

 

24 апр 2017

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 74   
@user-zd5ow5bh5p
@user-zd5ow5bh5p 7 лет назад
NICOLAS_MOM_WEIGHT = POSITIVE_INFINITY
@kemsekov6331
@kemsekov6331 4 года назад
NICOLAS_PP_LONG = NEGATIVE_INFINITY
@khodis2002
@khodis2002 3 года назад
@@kemsekov6331 PP_LENGTH
@SpaceMarine113
@SpaceMarine113 2 года назад
@@khodis2002 NICOLAS_PP_LONG = true
@user-tv7kg9vy7u
@user-tv7kg9vy7u 6 лет назад
Я тупой. Показывай на яблоках.
@omoloni
@omoloni 4 года назад
клас яблоко:дерево, треснутьКого_нибудь{ треснуть(){треснуть Кин_Конга по голове}} интерфейс треснутьКогоНибудь{треснуть()} класс Кин_Конг:обезьяна, треснутьКого_нибудь{треснуть(){п...
@BrownAleks
@BrownAleks 3 года назад
ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-8eZy5xiildM.html
@urfinjuss2639
@urfinjuss2639 Месяц назад
😂
@danyloandreiev
@danyloandreiev 6 лет назад
Понял разницу в другом видео, здесь закрепил Если абстр класс это транспортное средство, то объект - это, например самолёт или танк или ментовский бобик, т.е объект ЯВЛЯЕТСЯ абстрактным классом, самолёт - это транспортное средство, и тд. А вот интерфейс это например то, что это транспортное средство МОЖЕТ делать - двигаться. Например лететь в Тайланд или везти тебя с мигалками, при чём второй вариант веселее и бесплатный. Т.е. самолёт реализовывает интерфейс и теперь он может двигаться, но он может и не делать этого, если это например памятник второй мировой. В таком случае он является самолётом, т.е объектом абстрактного класса транспортное средство, но может реализовывать другой интерфейс, например быть фоном для селфи
@TheDron84
@TheDron84 5 лет назад
У абстрактных классов нет объектов. Такие классы только могут быть унаследованы другими классами, у которых уже могут быть объекты (самолет, танк, автобус, велосипед).
@JohnDoe-pg6eh
@JohnDoe-pg6eh 5 лет назад
@@TheDron84 абстрактный класс нужен чтоб писать меньше кода. А интерфейс нужен чтоб наследники этих интерфейсов не выходили за рамки свойств. Интерфейсы это фильтры или сортировщики классов.
@me_000_xXx
@me_000_xXx 4 года назад
шаблон для шаблонов.
@vasylnosovych4038
@vasylnosovych4038 4 года назад
А ещё абстрактный класс может иметь поля и конструкторы, в то время как интерфейс - нет.
@khodis2002
@khodis2002 3 года назад
Интерфейс - это набор контрактов, абстрактный класс - общение объектов
@sergey51115
@sergey51115 6 лет назад
Очень приятные видео, спасибо за контент! :)
@denisgavr199
@denisgavr199 Год назад
Братан, хорош, давай, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще?
@Skreepan
@Skreepan 6 лет назад
Если класс можно в некотором смысле назвать абстракцией объекта, то interface можно назвать абстракцией методов. K.O.
@user-ih3xv6mx5p
@user-ih3xv6mx5p 4 года назад
Экстремально чётко!
@jgkdmdevienjjgg8866
@jgkdmdevienjjgg8866 7 лет назад
Может кто-то сильно удивится, но в C++ "ключевое" слово interface - синоним ключевого слова class. Ноги отсюда растут. И из COM. По сути интерфейс это возможность сделать множественное наследование на нескольких абстрактных классах, но обламывая возможность сломать себе ногу в нескольких местах при этом. Кстати такая же фигня есть в делфи, но там интерфейсы - удовольствие весьма сомнительное. Это было техническое различие. А есть еще различие по способу применения. Так вот - интерфейсы используются когда нужна слабая связанность компонентов системы, так как они не содержат релизации, когда нужно код распихать по различным независимым dll-кам (Привет COM). Абстрактные классы же просто используются при построении иерархий наследования как более базовые типы.
@ppc2012
@ppc2012 4 года назад
Все это необходимо объяснять в контексте паттернов, использующих данные конструкции языка. Чтобы у людей было понимание не только что это такое, а и когда и как это нужно правильно использовать.
@user-ry5oh3qt2u
@user-ry5oh3qt2u 2 года назад
Мммм,паттерны, давайте для простейшего калькулятора сделаем 10 фабрик классов, 30 наследований и + всё ещё организуем по паттернам,чтобы побольше производительности ушло в никуда. А не проще ли сделать все из головы? Не говноколить,а именно просто сделать так,как оно работает
@mrlait5732
@mrlait5732 Год назад
@@user-ry5oh3qt2u и получить гавно код)
@user-ry5oh3qt2u
@user-ry5oh3qt2u Год назад
@@mrlait5732 только вот говнокод и наличие паттернов никак не связаны. С паттерна и говняют ещё больше,ибо применяют их вслепую потому что так умный дядька сказал и получается overengeneered grabage code ,где для хелло ворлда создана целая фабрика с бойлерплейтом в подарок.
@mrlait5732
@mrlait5732 Год назад
@@user-ry5oh3qt2u Паттерны нужно пихать там где они нужны, без паттернов у вас получится гавно код. Либо несознательно все равно используете паттерн, просто никогда не знали, что такой паттерн существует.
@snork4893
@snork4893 3 года назад
Это именно то что я искал
@jgkdmdevienjjgg8866
@jgkdmdevienjjgg8866 7 лет назад
Не обязательно методы, реализуемые интерфейсом должны быть публичны. Можно сделать internal интерфейс и реализовать его явно в публичном классе. Пример - Tuple : ITuple
@Bushido_Cat
@Bushido_Cat 7 месяцев назад
Чел все коротко ясно и доходчиво
@angelldark6426
@angelldark6426 2 года назад
Спасибо. Мне понравилось
@MasterSergius
@MasterSergius 4 года назад
Четко, даже Nicolas_mom поняла
@user-rl2dr6eu5o
@user-rl2dr6eu5o 2 года назад
Спасибо!!!
@navi4046
@navi4046 3 года назад
Спасибо за пересказ статьи из метанита
@hewaki_merci
@hewaki_merci 3 года назад
Тупая ава
@rubi6228
@rubi6228 Год назад
Жалко что ваш дискорд сервер умер, эх, столько хороших воспоминаний с него, столько хороших людей..
@npozh
@npozh 2 года назад
На дворе 21 год и уже с появлением .net core 5 в интерфейсы так же можно закладывать базовую реализацию. Всем спасибо, ностальжи, видео не останется забытым!!
@TedFanat
@TedFanat 2 года назад
во-первых с дотнета 5, а во вторых эту дефолтную реализацию в абстрактном классе или интерфейсе нужно по-разному юзать. Короче, после добавления этих дефолтных реализаций интерфейс не стал аналогом абстрактного класса и эти дефолтные реализации в интерфейсах имеют определённую область применения
@user-sw7eb1gg8i
@user-sw7eb1gg8i Год назад
Вот я седня делал лаютоаторку по проге на c#, сначала хотел сделать интерфейс вместо абстрактрого класса, но интерфейс требовал переопределять свойста что нафиг не надо так что абстрактные классы актуальность не утратили
@IonWP
@IonWP 6 лет назад
То есть интерфисы мы можем использовать для различных объектов ну как в примере : IMovable, машина, собака, кот... они все могу передвигаться! А abstract class используется точно для конкретнои цели, public abstract Vehicle - тока для авто ?
@ExtremeCode
@ExtremeCode 6 лет назад
да
@sonik5436
@sonik5436 4 года назад
*Спс, пнл, збс :)*
@NikitaJe_
@NikitaJe_ Год назад
ваще понятно. автор объяснил примерно на уровне: знак главная дорога желтый а стоп красный
@zealot4325
@zealot4325 3 года назад
как же сложно понять эту ересь без практики её использования. Сейчас немного прояснилось
@andrewsed_uplisten2019
@andrewsed_uplisten2019 3 года назад
очень поверхностно, этого не достаточно для понимания...
@qwertymangames1800
@qwertymangames1800 3 года назад
Если коротко то. Абстрактный класс - обычный класс от которого наследуются. А интерфейс - описание методов для множества независимых классов между собой.
@qwertymangames1800
@qwertymangames1800 3 года назад
@@odnonoguypirat не знаю о чём ты. И абстрактный класс и интерфейсы в новой версии .Net могут иметь функцию по умолчанию.
@MrWolfmen
@MrWolfmen Год назад
Где маты, собачки и маслята?) Не узнаю этот канал в молодости)
@clownkrusty9950
@clownkrusty9950 Год назад
Пока что понимание интерфейса такое что в интерфейсе мы пишем что есть Организация и она запрещенная, а в каждой реализации мы как бы клеймим метод и даем всем понять что эта организация запрещенная на территории определенной страны
@evgeniyreshetov3026
@evgeniyreshetov3026 4 года назад
Автор совершенно не разбирается в теме, зачем снимать видео, если сам не углубился в вопрос? "Чухчухчух" говорит паровозик. Атписка.
@illyagrush5884
@illyagrush5884 3 года назад
@reаct Паравозик делает не только "Чухчухчух", там встречаются "Шуухшухшухшух", а также более редкие представители "Пибип" и "Пуууб"
@saint8283
@saint8283 4 года назад
Начиная с С# 8 с интерфейсами началась какая-то жопа. Теперь они зачем-то хранят в себе значения свойств. Нафига, не понятно. Зато баги полезли из-за дублирования одних и тех же свойств в классе и интерфейсе.
@user-bn5iw9pr3p
@user-bn5iw9pr3p Год назад
Бедный Николас и его мама…
@daniil__kryuchkov
@daniil__kryuchkov 3 месяца назад
вот это я откопал...
@gnog4627
@gnog4627 4 года назад
Вас и вправду двое что-ли? Я думал это шутка.
@illyagrush5884
@illyagrush5884 3 года назад
0:20 - Этот какнал ведут 2 чела?!!!!?!??!
@Carrion-Crow
@Carrion-Crow 7 лет назад
один чёрт не понимаю смысла. Всё так сложно называется, а по факту интерфейсы это способ просто собрать в одном месте все методы которые нужно реализовать и отдать его прогеру пониже рангом что бы он юзал его и создавал методы по этому интерфейсу. А абстрактный классы это способ реализации разных задач одним методом для сокращения кода, но по факту это часто вызывает путаницу
@UnityFAN_unity
@UnityFAN_unity 7 лет назад
А еще множественное наследование реализуется, через интерфейсы. Интерфейсы нужно юзать только тогда, когда ты понимаешь и представляешь всю архитектуру приложения целиком и она готова схематически, иначе можно только наговнокодить и юзать интерфейсы, только ради интерфейсов )
@AlexeyTimofeev
@AlexeyTimofeev 6 лет назад
Все довольно просто. Интерфейс существует для указания какому либо классу дополнительных качеств. В том смысле что объект должен реализовать определенную логику (например "движение"). А также для сокрытия зависимости между классами. Просто так для реализации наследования интерфейс не нужен. Абстрактный класс - это скелет, в нем может содержаться определенная логика, в интерфейсе же ее быть не может. Абстрактный класс зачастую - это базис для реализации основных ООП принципов.
@nik6920
@nik6920 6 лет назад
Анатолий Снеговский нет! Интерфейсы нужно юзать в двух случаях - чтобы выделить одинаковую функциональность в РАЗНОРОДНЫХ классах (это те классы, которые наследуются от разных родительских классов), то есть интерфейс используется как теговая структура, второй вариант использования - небольшая иерархия, не имеющую начальную реализацию
@boobubuo
@boobubuo 3 года назад
так у самолет вертолет сабака лодка .. зачем интерфейс ? оно же есть в своем абстрактном классе самолет вертолет собака лодка .. нахрена тут интерфейс ? очевидно чтобы повыёживаться ?
@nloo
@nloo 3 года назад
wat?
@apple9943
@apple9943 Месяц назад
а кто такой Николай?
@user-ph3nh2mw1s
@user-ph3nh2mw1s 11 дней назад
Второй ведущий на канале
@aleksanterikaansalo
@aleksanterikaansalo Год назад
Да как ты смеешь? Хотя, норм.
@desys.
@desys. 3 года назад
Нихрена не понял...
@mk72v2oq
@mk72v2oq 7 лет назад
На самом деле это разные вещи для разных целей. Абстрактным классом конечно возможно заменить интерфейс, но делать этого не нужно, хотя бы по вот этим двум причинам: 1) Длина кода, зачем громоздить длинные конструкции из лишних ключевых слов abstract class A { abstract public void X(); } class B : A { override public void X(); } если можно написать лаконичнее interface A { void X(); } class B : A { public void X(); } 2) Абстрактный класс все же является объектом, и в IL реализуется его конструктор. И если в проекте используется длинное древо наследований, то это куча ненужных лишних перегрузок, что означает минимальную, но потерю производительности. В современных реалиях разницу оn нескольких лишних тактов процессора конечно вряд ли кто-то заметит (если вы конечно не создаете миллион объектов в секунду), но зачем нужно даже минимальное зло, если можно его избежать.
@MartinEden-ps6ld
@MartinEden-ps6ld 7 лет назад
Нас учитель заставляет писать репозиторий (в наших сайта на asp mvc). Сначала мне это всё дико не нравилось, потому что было очень сложно и лишне, потому что можно просто всё делать через контекст (ентити фреймвёрк), но когда всё таки смерился с тем, что репозиторий нужен, та реализаиця, которую требовал учитель оказалас просто суперской)) Мы создаём абстрактный репозиторий, в котором указываем всё самое необходимое, а дальше уже в конкретных его реализациях нужно прописывать только конструктор, остальные методы наследуются. Ну и конечно это всё обернуть интерфейсами) Это я написал, что абстрактный класс всё таки нужен))
@mk72v2oq
@mk72v2oq 7 лет назад
Я не сказал, что абстрактный класс не нужен. Разумеется нужен, только для других целей. Там же где можно использовать интерфейс, лучше использовать интерфейс.
@MartinEden-ps6ld
@MartinEden-ps6ld 7 лет назад
нет, обоснование это то, что я не хочу тратить года на то, чтобы эта грамотность въелась мне в мозг, потому что есть делать поважнее
@Mike19910711
@Mike19910711 4 года назад
Абстрактный класс может содержать реализации. Интерфейс - нет.
@MacIn173
@MacIn173 4 года назад
Полностью абстрактный класс без полей - тот же интерфейс.
@Mike19910711
@Mike19910711 4 года назад
​@@MacIn173​, не совсем. От абстрактного класса другие классы наследуются, в то время как интерфейсы реализуются. В Java и C# можно наследоваться только от одного класса (даже если он абстрактный), в то время как интерфейсов реализовывать можно сколько угодно. А вот в C++ есть множественное наследование, поэтому там - да, интерфейс являются просто частным случаем абстрактного класса. Абстрактные классы, помимо полей, могут ещё содержать конструкторы, статические и приватные методы; интерфейсы всего этого лишены.
@MacIn173
@MacIn173 4 года назад
@@Mike19910711 "другие классы наследуются, в то время как интерфейсы реализуются." это всего-навсего терминологическая разница в данном конкретном случае. "Абстрактные классы, помимо полей, могут ещё содержать конструкторы, статические и приватные методы; " я же сказал выше "полностью абстрактный класс без полей". Полностью а. классом вполне можно эмулировать интерфейс, если его нет в языке, например.
@Mike19910711
@Mike19910711 4 года назад
@@MacIn173 "это всего-навсего терминологическая разница в данном конкретном случае" - нет. Ещё раз: в Java и C# можно наследоваться только от одного класса, даже если он абстрактный. Таким образом, наследоваться от двух и более абстрактных классов уже нельзя, а реализовать интерфейсов можно сколько угодно. В C++ - да, там интерфейсы и не нужны в принципе (по той причине, что поддерживается множественное наследование, можно просто наследоваться от нескольких абстрактных классов).
@MacIn173
@MacIn173 4 года назад
@@Mike19910711 "Таким образом, наследоваться от двух и более абстрактных классов уже нельзя" естественно, но это - частный случай. Возьмем другой частный случай: простое наследование, один интерфейс - разница только в терминологии.
Далее
Интерфейсы на практике
7:34
Просмотров 178 тыс.
ТВОЯ ГЛАВНАЯ ОШИБКА В ООП
8:45
Просмотров 607 тыс.
ШАР СКВОЗЬ БУТЫЛКУ (СКЕРЕТ)
00:46
C# - Интерфейсы (Interfaces)
8:01
Просмотров 149 тыс.
Абстрактный класс в ООП
10:28
Просмотров 40 тыс.