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

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

ExtremeCode

7 лет назад

93,842 Просмотров

Ссылки и html тэги не поддерживаются


Комментарии:

Denis Gavr
Denis Gavr - 15.03.2023 04:42

Братан, хорош, давай, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще?

Ответить
Rubi
Rubi - 19.12.2022 21:34

Жалко что ваш дискорд сервер умер, эх, столько хороших воспоминаний с него, столько хороших людей..

Ответить
MrWolfmen
MrWolfmen - 05.12.2022 13:43

Где маты, собачки и маслята?) Не узнаю этот канал в молодости)

Ответить
Aleksanteri Kaansalo
Aleksanteri Kaansalo - 27.11.2022 03:14

Да как ты смеешь?







Хотя, норм.

Ответить
Nikita Je
Nikita Je - 26.11.2022 10:10

ваще понятно. автор объяснил примерно на уровне: знак главная дорога желтый а стоп красный

Ответить
Clown Krusty
Clown Krusty - 15.09.2022 22:27

Пока что понимание интерфейса такое что в интерфейсе мы пишем что есть Организация и она запрещенная, а в каждой реализации мы как бы клеймим метод и даем всем понять что эта организация запрещенная на территории определенной страны

Ответить
Максим Тимошенко
Максим Тимошенко - 06.09.2022 21:47

Бедный Николас и его мама…

Ответить
Alexander
Alexander - 27.07.2022 10:24

главное, что я понял из этого видео, что если вам на собесе задают этот вопрос,
то вас собесает джун.

Если кто-то хочет серьёзно вникнуть в вопрос, то необходимо изучить проблеммы, возникающие при множественном наследовании с C++.
Без этих знаний это всё - болтовня.

Ответить
Анатолий ВотТакВот
Анатолий ВотТакВот - 28.03.2022 01:58

Спасибо!!!

Ответить
Angell Dark
Angell Dark - 25.11.2021 22:17

Спасибо. Мне понравилось

Ответить
Никита Пожарский
Никита Пожарский - 06.11.2021 10:13

На дворе 21 год и уже с появлением .net core 5 в интерфейсы так же можно закладывать базовую реализацию. Всем спасибо, ностальжи, видео не останется забытым!!

Ответить
Andrew Sed_upListen
Andrew Sed_upListen - 06.07.2021 04:27

очень поверхностно, этого не достаточно для понимания...

Ответить
Dreamwolf Nektovich
Dreamwolf Nektovich - 28.05.2021 20:52

Так какой смысл от нащего интерфейса с функцией Move, если каждый класс реализует его независимо? Таким образом не происходит сокращение кода, с тем же успехом можно было без интерфейса реализовать эти методы.

Ответить
QwertyMAN Games
QwertyMAN Games - 02.04.2021 23:59

Если коротко то. Абстрактный класс - обычный класс от которого наследуются.

А интерфейс - описание методов для множества независимых классов между собой.

Ответить
DESYS OS
DESYS OS - 28.02.2021 17:27

Нихрена не понял...

Ответить
Justify
Justify - 30.11.2020 07:25

Спасибо за пересказ статьи из метанита

Ответить
C1HO
C1HO - 25.11.2020 14:22

wat?

Ответить
Ivan Booba
Ivan Booba - 04.11.2020 07:49

так у самолет вертолет сабака лодка .. зачем интерфейс ? оно же есть в своем абстрактном классе самолет вертолет собака лодка .. нахрена тут интерфейс ? очевидно чтобы повыёживаться ?

Ответить
SnoRK
SnoRK - 31.10.2020 20:21

Это именно то что я искал

Ответить
Zea Lot
Zea Lot - 02.09.2020 23:22

как же сложно понять эту ересь без практики её использования. Сейчас немного прояснилось

Ответить
Алексей Буров
Алексей Буров - 08.07.2020 18:56

Экстремально чётко!

Ответить
Evgeniy Reshetov
Evgeniy Reshetov - 29.04.2020 23:19

Автор совершенно не разбирается в теме, зачем снимать видео, если сам не углубился в вопрос? "Чухчухчух" говорит паровозик. Атписка.

Ответить
gnog
gnog - 03.03.2020 21:21

Вас и вправду двое что-ли? Я думал это шутка.

Ответить
OptionParalysis
OptionParalysis - 23.01.2020 21:15

Абстрактный класс может содержать реализации. Интерфейс - нет.

Ответить
ppc2012
ppc2012 - 02.01.2020 20:52

Все это необходимо объяснять в контексте паттернов, использующих данные конструкции языка. Чтобы у людей было понимание не только что это такое, а и когда и как это нужно правильно использовать.

Ответить
Saint
Saint - 19.10.2019 13:43

Начиная с С# 8 с интерфейсами началась какая-то жопа. Теперь они зачем-то хранят в себе значения свойств. Нафига, не понятно. Зато баги полезли из-за дублирования одних и тех же свойств в классе и интерфейсе.

Ответить
Шит Хепенз
Шит Хепенз - 07.09.2019 05:27

Четко, даже Nicolas_mom поняла

Ответить
sofiia burimova
sofiia burimova - 20.08.2019 19:32

Спс, пнл, збс :)

Ответить
Just Dude
Just Dude - 13.06.2018 09:19

Если класс можно в некотором смысле назвать абстракцией объекта, то interface можно
назвать абстракцией методов. K.O.

Ответить
Кирилл Филашкин
Кирилл Филашкин - 27.03.2018 21:56

Я тупой. Показывай на яблоках.

Ответить
Johnny
Johnny - 05.12.2017 21:49

То есть интерфисы мы можем использовать для различных объектов ну как в примере : IMovable, машина, собака, кот... они все могу передвигаться! А abstract class используется точно для конкретнои цели, public abstract Vehicle - тока для авто ?

Ответить
Даниил Андреев
Даниил Андреев - 03.10.2017 22:00

Понял разницу в другом видео, здесь закрепил
Если абстр класс это транспортное средство, то объект - это, например самолёт или танк или ментовский бобик, т.е объект ЯВЛЯЕТСЯ абстрактным классом, самолёт - это транспортное средство, и тд. А вот интерфейс это например то, что это транспортное средство МОЖЕТ делать - двигаться. Например лететь в Тайланд или везти тебя с мигалками, при чём второй вариант веселее и бесплатный. Т.е. самолёт реализовывает интерфейс и теперь он может двигаться, но он может и не делать этого, если это например памятник второй мировой. В таком случае он является самолётом, т.е объектом абстрактного класса транспортное средство, но может реализовывать другой интерфейс, например быть фоном для селфи

Ответить
Sergey Klim
Sergey Klim - 28.09.2017 18:41

Очень приятные видео, спасибо за контент! :)

Ответить
Кирилл Шепелев
Кирилл Шепелев - 27.05.2017 09:57

NICOLAS_MOM_WEIGHT = POSITIVE_INFINITY

Ответить
Ilya M
Ilya M - 30.04.2017 22:18

Может кто-то сильно удивится, но в C++ "ключевое" слово interface - синоним ключевого слова class. Ноги отсюда растут. И из COM. По сути интерфейс это возможность сделать множественное наследование на нескольких абстрактных классах, но обламывая возможность сломать себе ногу в нескольких местах при этом. Кстати такая же фигня есть в делфи, но там интерфейсы - удовольствие весьма сомнительное.
Это было техническое различие. А есть еще различие по способу применения. Так вот - интерфейсы используются когда нужна слабая связанность компонентов системы, так как они не содержат релизации, когда нужно код распихать по различным независимым dll-кам (Привет COM). Абстрактные классы же просто используются при построении иерархий наследования как более базовые типы.

Ответить
Ilya M
Ilya M - 30.04.2017 21:57

Не обязательно методы, реализуемые интерфейсом должны быть публичны. Можно сделать internal интерфейс и реализовать его явно в публичном классе. Пример - Tuple<T> : ITuple

Ответить
Hanabishi
Hanabishi - 26.04.2017 08:25

На самом деле это разные вещи для разных целей. Абстрактным классом конечно возможно заменить интерфейс, но делать этого не нужно, хотя бы по вот этим двум причинам:
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 нескольких лишних тактов процессора конечно вряд ли кто-то заметит (если вы конечно не создаете миллион объектов в секунду), но зачем нужно даже минимальное зло, если можно его избежать.

Ответить
Анатолий Снеговский
Анатолий Снеговский - 26.04.2017 08:15

один чёрт не понимаю смысла. Всё так сложно называется, а по факту интерфейсы это способ просто собрать в одном месте все методы которые нужно реализовать и отдать его прогеру пониже рангом что бы он юзал его и создавал методы по этому интерфейсу. А абстрактный классы это способ реализации разных задач одним методом для сокращения кода, но по факту это часто вызывает путаницу

Ответить