background top icon
background center wave icon
background filled rhombus icon
background two lines icon
background stroke rhombus icon

Скачать "Интерфейсы в C# зачем нужны и как используются | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ | # 77"

input logo icon
"videoThumbnail Интерфейсы в C# зачем нужны и как используются | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ | # 77
Оглавление
|

Оглавление

0:00
что будет в уроке
0:47
для чего нужны интерфейсы в си шарп
3:11
пример использования интерфейсов на практике
15:45
как интерфейсы и классы нужно размещать в проекте
16:58
использование интерфейсов и абстрактных классов
20:26
множественная реализация интерфейсов
Похожие ролики из нашего каталога
|

Похожие ролики из нашего каталога

C# ЦИКЛ FOR | В ОБРАТНОМ ПОРЯДКЕ | НЕСКОЛЬКО ПЕРЕМЕННЫХ | НЕСКОЛЬКО УСЛОВИЙ | # 19
23:07

C# ЦИКЛ FOR | В ОБРАТНОМ ПОРЯДКЕ | НЕСКОЛЬКО ПЕРЕМЕННЫХ | НЕСКОЛЬКО УСЛОВИЙ | # 19

Канал: #SimpleCode
Статические методы C# | Статические свойства C# | как работает ключевое слово static | C# ООП | # 64
19:18

Статические методы C# | Статические свойства C# | как работает ключевое слово static | C# ООП | # 64

Канал: #SimpleCode
ОБЛАСТЬ ВИДИМОСТИ | КОНТЕКСТ ПЕРЕМЕННОЙ | КОНФЛИКТЫ ОБЛАСТЕЙ ВИДИМОСТИ  | C# Уроки | # 37
10:58

ОБЛАСТЬ ВИДИМОСТИ | КОНТЕКСТ ПЕРЕМЕННОЙ | КОНФЛИКТЫ ОБЛАСТЕЙ ВИДИМОСТИ | C# Уроки | # 37

Канал: #SimpleCode
Наследование в C# и модификаторы доступа | модификатор protected c# | C# ООП | # 74
10:49

Наследование в C# и модификаторы доступа | модификатор protected c# | C# ООП | # 74

Канал: #SimpleCode
partial класс c# | частичные типы c# | partial методы c# | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ | # 68
11:21

partial класс c# | частичные типы c# | partial методы c# | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ | # 68

Канал: #SimpleCode
Наследование интерфейсов C# | множественное наследование интерфейсов | C# ООП | # 78
10:50

Наследование интерфейсов C# | множественное наследование интерфейсов | C# ООП | # 78

Канал: #SimpleCode
ДВУМЕРНЫЙ МАССИВ В C# | МНОГОМЕРНЫЕ МАССИВЫ В СИ ШАРП | ЧТО ТАКОЕ МАССИВЫ | ИЗУЧЕНИЕ C# | УРОК # 29
8:50

ДВУМЕРНЫЙ МАССИВ В C# | МНОГОМЕРНЫЕ МАССИВЫ В СИ ШАРП | ЧТО ТАКОЕ МАССИВЫ | ИЗУЧЕНИЕ C# | УРОК # 29

Канал: #SimpleCode
Арифметическое переполнение | checked unchecked c# | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ | # 51
13:54

Арифметическое переполнение | checked unchecked c# | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ | # 51

Канал: #SimpleCode
ТЕРНАРНЫЙ ОПЕРАТОР | ЧТО ЭТО | ПРИМЕР | КАК ИСПОЛЬЗОВАТЬ | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ | # 23
12:36

ТЕРНАРНЫЙ ОПЕРАТОР | ЧТО ЭТО | ПРИМЕР | КАК ИСПОЛЬЗОВАТЬ | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ | # 23

Канал: #SimpleCode
C# статические поля класса | как работает ключевое слово static | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ # 63
11:44

C# статические поля класса | как работает ключевое слово static | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ # 63

Канал: #SimpleCode
Теги видео
|

Теги видео

программирование
курсы программирования
уроки
visual studio
азы программирования
#SimpleCode
simplecode
simplecode c++
visual studio уроки
simplecode c#
программирование для начинающих
учим си шарп
c# с нуля
c# для начинающих
visual studio c#
c# ооп
симпл код
полиморфизм c#
наследование c#
ооп c# для чайников
ооп си шарп
принципы ооп c#
интерфейсы c#
интерфейсы c# на практике
интерфейсы c# для начинающих
интерфейсы c# зачем
интерфейсы c# примеры
сишарп
урокипрограммирования
Субтитры
|

Субтитры

subtitles menu arrow
  • enАнглийский
Скачать
00:00:01
мы с вами продолжаем изучать
00:00:03
объектно-ориентированное
00:00:04
программирование в языке
00:00:05
программирования си sharp и сегодня у
00:00:07
нас вводный урок по интерфейсам на
00:00:09
всякий случай для тех кто зашел на этой
00:00:11
видео случайно сразу же скажу что речь
00:00:13
пойдет не о графических интерфейс об
00:00:16
интерфейсе как конструкции языка
00:00:17
программирования сша сегодня мы
00:00:19
разберемся в принципе что такое
00:00:21
интерфейсы для чего они нужны как они
00:00:23
используются в дальнейших уроках
00:00:25
рассмотрим различные важные более
00:00:27
специфические детали которые этих самых
00:00:29
интерфейсов кассовиц также в этом уроке
00:00:32
мы немного переделаем код который
00:00:33
использовали в прошлом уроке когда
00:00:36
изучали абстрактный класс
00:00:38
адаптируем все это дело под
00:00:39
использование интерфейса не забудете
00:00:41
поставить лайк под этим видео это
00:00:43
поможет развитию канала канал
00:00:44
развиваются вы получаете новые уроки ну
00:00:46
и теперь непосредственно к делу итак я
00:00:48
надеюсь вы посмотрите прошлый урок об
00:00:50
абстрактных классов прежде чем перейти к
00:00:52
этому уроку потому что таком случае для
00:00:54
вас понять интерфейсы проблемы вообще не
00:00:56
будет и если коротко то интерфейс можно
00:00:58
сравнить с абстрактным классом у
00:01:00
которого только абстрактный метод то
00:01:03
есть вообще нет никакой реализации
00:01:04
конечно же различие намного больше у нас
00:01:06
будет отдельный урок который мы посвятим
00:01:08
именно этим различием потому что это
00:01:10
важный вопрос который часто встречаются
00:01:12
на собеседование и второй важный момент
00:01:14
которому мы тоже посвятим отдельный урок
00:01:16
это то что в одной из прошлых версий
00:01:19
языка программирования sharp по-моему в
00:01:21
8 была добавлена возможность дефолтной
00:01:24
реализации методов в интерфейсах ты че
00:01:26
довольно спорное и неоднозначное многие
00:01:28
считают в том числе я что на самом деле
00:01:30
это вообще лучше избегать так как по
00:01:32
сути применяя эту фичу мы смешиваем
00:01:34
абстракцию и реализацию что в принципе
00:01:36
противоречит вообще суть интерфейсов в
00:01:39
общем именно поэтому вот эти все
00:01:41
тонкости у нас будут в отдельных урок
00:01:42
сегодня уже о самом башню и так задачи
00:01:45
интерфейса является определить контракт
00:01:47
взаимодействия между класс другими
00:01:50
словами с помощью интерфейса
00:01:52
мы определяем поведение которое
00:01:55
впоследствии будет реализовано в
00:01:58
каком-то конкретном классе
00:02:00
нечто подобное мы с вами делали в
00:02:02
прошлом уроке с помощью абстрактных
00:02:03
классов к примеру взглянем на класс вот
00:02:06
он и моего
00:02:07
метод fair здесь у нас определено
00:02:09
поведение а конкретная реализация этого
00:02:12
поведения у нас определено классах
00:02:14
наследниках но вот как например здесь но
00:02:17
в отличие от абстрактных классов
00:02:19
задача интерфейса заключается именно
00:02:22
только в определении вот этих контрактов
00:02:24
и того как себя должны вести наследники
00:02:28
без каких-то конкретных деталей важным
00:02:31
отличием интерфейса от класса в том числе от
00:02:34
абстрактного класса заключается в том
00:02:36
что интерфейсы позволяют множественное
00:02:38
наследование они могут наследоваться
00:02:41
между собой причем один интерфейс может
00:02:43
унаследовать несколько разных таки
00:02:45
один определенный класс тоже может
00:02:47
унаследовать несколько интерфейсов
00:02:49
здесь у нас есть еще один нюанс который
00:02:51
касается правильности определений когда
00:02:53
мы говорим о том что класс унаследован
00:02:56
от интерфейса то правильно говорит что
00:02:59
класс реализует интерфейс у вас поймут и
00:03:01
так и так но если вы рассказываете
00:03:03
что-то об интерфейсах на собеседование
00:03:05
лучше употреблять терминологию предельно
00:03:08
так вы будете выглядеть более
00:03:09
профессионально представим что у нас
00:03:11
есть некая задача в рамках разработки
00:03:14
нашего проекта и нам нужно написать два
00:03:16
класса 1 класс
00:03:18
у нас будет извлекать какие-то данные из
00:03:21
какой-то базы данных а второй класс эти
00:03:23
данные каким-то образом обрабатывать в
00:03:26
нашем случае пусть это будет вывод этих
00:03:28
данных на консоль довольно простая
00:03:29
задача а что если в будущем мы захотим
00:03:31
чтобы данные у нас извлекались не из
00:03:34
базы данных а допустим из какого-то
00:03:36
файла таком случае помимо того что нам
00:03:39
нужно будет писать отдельный класс для
00:03:41
извлечения данных из файла нам
00:03:43
потребуется обновлять еще и наш класс
00:03:45
который выводит эти данные на консоль
00:03:47
для того чтобы он мог работать с этим
00:03:49
новым классом а если мы захотим
00:03:52
извлекать данные
00:03:54
кому-то эти типы запросу через какой-то
00:03:57
опекал
00:03:58
то нам потребуется проделать все то же
00:04:00
самое еще раз каждый раз когда у нас
00:04:02
будет появляться какой-то новый источник
00:04:04
данных нам потребуется ответить и класс
00:04:07
который работает непосредственно с этими
00:04:09
даме даже в том случае если источник данных
00:04:12
меняется не столь радикально допустим мы
00:04:14
просто поменяли базу данных мсс кельна
00:04:16
маски и потом помимо всего прочего
00:04:18
внезапно нам потребовалось еще и
00:04:20
обработчик как-то обновить для того
00:04:22
чтобы он выводил данные не на консоль а
00:04:24
куда то еще возможно отправлял куда-то
00:04:27
через какой-то че типе запрос или
00:04:29
кому-то на почту
00:04:30
таком случае при всех этих изменениях
00:04:32
нам каждый раз нужно обновлять вот эту
00:04:34
базовую логику и все классы должны знать
00:04:36
друг о друге чтобы это все работало всех
00:04:38
этих проблем можно избежать если мы
00:04:40
сначала запрограммируем правильное
00:04:42
поведение нашей логике через интерфейс а
00:04:44
лишь потом добавим детали реализации в
00:04:46
конкретных классах в общем давайте всем
00:04:48
этим займемся и логично что нам следует
00:04:50
начать с интерфейсов для того чтобы
00:04:52
определить поведение этих наших 2 класс
00:04:55
синтаксис написание интерфейсов похож на
00:04:57
описание классов но только мы используем
00:04:59
ключевое слово
00:05:00
интерфейс они класс
00:05:02
и кстати сниппеты visual studio
00:05:04
позволяет сделать это все довольно
00:05:06
быстро как видите и только написал две
00:05:08
буквы ем и у нас уже есть подсказка
00:05:10
интерфейс я выбрал ее
00:05:12
курсором и сейчас нажму два раза tab
00:05:15
visual studio ужином сгенерировала некий
00:05:17
интерфейс который нам нужно правильно
00:05:20
назвать ну и да конечно же все это можно
00:05:21
делать без не 5 руками ну просто так
00:05:24
быстрее назовем наш первый интерфейс ай
00:05:26
да это
00:05:27
провайдер все шерп принято такое
00:05:29
соглашение что все интерфейсы начинаются
00:05:32
с буквы а хочу сразу же обратить ваше
00:05:34
внимание на то что интерфейс
00:05:36
это не класс и в нем не может быть
00:05:38
конструкторов в отличие например от
00:05:40
абстрактного класса
00:05:42
которому эти самые конструкторы быть
00:05:43
могут экземпляр интерфейсом также какие
00:05:46
экземпляр абстрактного класса мы создать
00:05:48
нему тому же интерфейс не может содержать
00:05:50
поля класса допустим если мы хотим
00:05:53
объявить какую-то переменную нашим
00:05:55
интерфейсы такой код не скомпилировать и
00:05:57
связано это как раз с тем что интерфейс
00:05:59
и должны определять поведение и контракт
00:06:02
но не должны содержать какой-то
00:06:04
конкретной реализации а если мы
00:06:06
объявляем в интерфейсе какие-то поля это
00:06:09
значит что мы уже хотим здесь какую-то
00:06:11
логику писать потому что в эти поля мы
00:06:13
будем присваивать данные извлекать их
00:06:15
оттуда как-то обрабатывать и все такое
00:06:16
прочее а интерфейс и как раз
00:06:18
задумывались не для этого в интерфейсе
00:06:20
мы определяем поведение в о п я надеюсь
00:06:24
вы помните что поведение определяется с
00:06:26
помощью методов ну на самом деле
00:06:28
интерфейс и не ограничиваются только
00:06:30
лишь методами
00:06:31
но об этом как я обещал будущих уроках
00:06:33
сейчас же давайте о том каким образом мы
00:06:36
можем определить поведение с помощью
00:06:38
метода интерфейс найдите провайдер
00:06:41
у нас предназначена для того чтобы
00:06:43
определить контракта для класса
00:06:47
который будет получить данные откуда-то
00:06:50
из какого-то источника для того чтобы
00:06:52
определить его поведение контракт мы
00:06:54
должны указать
00:06:55
каком формате мы в принципе хотим
00:06:57
получить эти данные и как будет
00:06:59
называться метод который мы будем
00:07:00
вызвать чтобы эти данные получить
00:07:02
давайте представим что мы хотим получить
00:07:04
данные в виде строки соответственно мы
00:07:06
указываем тип возвращаемого значения
00:07:08
название метода дядей то по сути мы
00:07:11
просто описали сигнатуру метода который
00:07:14
будет реализован в классе который будет
00:07:16
реализовывать данный интерфейс принципе
00:07:18
как я говорил это нечто схожее с
00:07:21
абстрактным методом в абстрактном классе
00:07:24
но важное отличие интерфейса заключается
00:07:28
в том что по умолчанию все члены
00:07:31
интерфейса все методы и свойства все что
00:07:34
вы можете добавить в интерфейс имеет
00:07:35
модификатор паблик ну потому что по сути
00:07:38
мы определяем публичный контракт
00:07:40
взаимодействия то есть если мы говорим о
00:07:43
методах это те самые методы которые у
00:07:45
нас должна быть возможность вызвать на
00:07:47
уровне экземпляра соответственно они все
00:07:49
должны быть паблик в том числе и при
00:07:51
реализации каким-то конкретным классом
00:07:53
соответственно и указывать вот здесь
00:07:55
кита модификаторы доступа как мы это
00:07:57
делаем с полями класса не нужно они так
00:07:59
уже все паблик ну и давайте определим 2
00:08:02
интерфейс для того класса которые будет
00:08:04
данные обрабатывать назовем этот
00:08:06
интерфейс когда это процессор
00:08:09
и в классе который будет реализовывать
00:08:11
этот интерфейс должен будет
00:08:12
присутствовать метод процесс дейта
00:08:14
которые качестве параметра будет
00:08:16
принимать объект класса который у нас
00:08:18
будет реализовывать интерфейс
00:08:20
ай да это провайдер то что мы можем
00:08:21
создать переменную у которой тип данных
00:08:24
это тип интерфейса
00:08:26
это очень важный момент вот например вот
00:08:29
здесь мы можем объявить переменную типа
00:08:31
ай да это процесс это позволяет нам
00:08:33
использовать полиморфизм как и в случае
00:08:36
с абстрактными классами как и случае с
00:08:38
наследование вот например если у вас
00:08:40
вспомним прошлый урок то там мы говорили
00:08:42
о том что ссылка базового класса может
00:08:44
хранить объекты наследник так вот точно
00:08:47
также
00:08:48
ссылка интерфейса может хранить в себе
00:08:51
объект любого класса который
00:08:53
реализовывать данный интерфейс теперь
00:08:54
приступим к реализации давайте начнем с
00:08:57
конкретного класса который у нас будет
00:08:59
реализовывать интерфейс ай да это
00:09:00
процессор назовем его консоль то это
00:09:03
процессор а потому что данные мы будем
00:09:05
выводить на конце для того чтобы
00:09:06
реализовать интерфейс нам необходимо
00:09:08
использовать синтаксис наследования
00:09:10
вместо того чтобы он исследоваться
00:09:11
какого-то класса мы по сути наследуем ся
00:09:14
от интерфейса для консоль да это
00:09:15
процессора мы наследуем ся от интерфейса
00:09:18
ай да это процесс но как я уже упоминал
00:09:20
правильно говорить не наследуем взят
00:09:22
интерфейса а реализовываем интерфейс
00:09:25
как и в случае наследования абстрактных
00:09:28
классов как только мы попытались сделать
00:09:30
мы получили ошибку на этапе компиляции и
00:09:33
ошибка это заключается в том что мы не
00:09:36
реализовали все члены интерфейса в
00:09:38
данном случае у нас там только один
00:09:40
метод процесс deuter так вот если мы
00:09:43
указываем что мы хотим реализовать в
00:09:45
каком-то классе интерфейс
00:09:47
мы должны реализовать все его компоненты
00:09:50
ну то есть этого интерфейса
00:09:53
7 методы которые там будут все все все
00:09:56
что там был подход такое что-либо мы
00:09:58
реализовываем
00:09:59
все компоненты интерфейса либо код
00:10:02
вообще не компилируется
00:10:03
это нужно нам для того чтобы
00:10:04
впоследствии когда мы обращались к
00:10:08
ссылке такого интерфейса мы могли
00:10:10
вызвать любой из методов которые в этом
00:10:12
интерфейсе есть и класс который мы
00:10:15
поместили в эту ссылку гарантированно
00:10:18
этот метод реализовывает его можно
00:10:19
вызвать и с ним можно работать конечно
00:10:21
же мы можем руками написать этот метод
00:10:24
реализовать его но есть более быстрый
00:10:26
способ с помощью средств visual studio
00:10:28
просто наводимся мышкой на ай да этот
00:10:30
процессор который интерфейс жмакаем на
00:10:33
желтой лампочку и нажимаем implement
00:10:34
интерфейс ну и visual studio нам
00:10:36
реализует этот метод этого интерфейса
00:10:38
конечно же она не может написать то что
00:10:40
будет выполнять этот метод поэтому здесь
00:10:42
бросает секса общин который мы отсюда
00:10:44
просто удалим но вся сигнатура
00:10:46
соответствует вот этому методу в
00:10:48
интерфейсе вайда это процессоре и как
00:10:50
видите сюда
00:10:51
качестве параметра мы должны получать
00:10:53
нечто что реализует интерфейс
00:10:55
ай да это провайдер вот такой
00:10:57
и в нем по любому будет метод getdata с
00:10:59
помощью которого мы сможем получить
00:11:01
какие-то данные
00:11:02
соответственно нам все равно что нам
00:11:05
сюда прилетит если она будет
00:11:07
реализовывать этот интерфейс
00:11:09
ай да это провайдер
00:11:11
мы сможем получить оттуда данные путем
00:11:13
вызова метода get дейта
00:11:16
и вывести все это дело на консоль а
00:11:18
метод get дейта будет там в любом случае
00:11:21
потому что мы определили контракт с
00:11:23
помощью интерфейса перейдем наш метод
00:11:25
main и теперь вот здесь там где мы
00:11:27
создаем объект типа еда это процессор мы
00:11:30
можем присвоить туда в консоль да это
00:11:32
процессор вот этот самый класс каббары
00:11:34
этот интерфейс реализует раз интерфейс
00:11:36
реализован в классе то ссылка на
00:11:38
интерфейс может хранить объект класс
00:11:41
здесь опять-таки очередной важный момент
00:11:44
если нам потребуется какой-то другой да
00:11:47
это процессор который бы не выводил
00:11:49
данный на консоль а например отправлял
00:11:52
их куда там кому-то на почту мы могли бы
00:11:54
опять таки реализовать этот интерфейс в
00:11:57
другом классе и присвоить сюда объект
00:11:59
этого другого класса и поведение уже
00:12:01
было другое но в данном случае мы не
00:12:03
будем добавлять новых реализаций для да
00:12:05
это процессоров мы добавим несколько
00:12:07
реализаций да это провайдеров и пусть у
00:12:09
нас будет некий класс беби да и там
00:12:12
провайдер
00:12:13
некий класс файл да это провайдер и
00:12:17
какой-то класс теперь да это провайдер
00:12:21
теперь сделаем так чтобы каждый из этих
00:12:24
классов реализован интерфейс ай да это
00:12:26
провайдер
00:12:34
мы реализовали интерфейс теперь
00:12:35
необходимо написать логику которая будет
00:12:38
выполняться в мета-теги дейта
00:12:39
конечно мы не будем сейчас подключать
00:12:41
база данных отдельно пицца чтение из
00:12:43
файла и дело typical потому что это
00:12:46
слишком долго для данного урока
00:12:48
поэтому в этих методах мы просто сделаем
00:12:50
заглушки метод getdata который мы
00:12:53
реализовываем в классе где беда это
00:12:55
провайдер будет возвращать строку
00:12:57
который будет сообщение что данные
00:12:59
пришли из базы данных аналогично файл да
00:13:02
это провайдер будет нам говорить что он
00:13:04
извлек данные из файла и и 5 до это
00:13:07
провайдер будет говорить нам о том что
00:13:09
он извлек данные из и 5 ну и
00:13:11
соответственно теперь мы можем вызвать
00:13:13
он объекта data processor
00:13:15
метод процесс дейта и зависимости от
00:13:17
того какой класс моему туда передадим
00:13:20
где беда это провайдер либо же файл
00:13:23
дейта провайдер
00:13:24
либо же и пи ай да это провайдер он все
00:13:27
равно может работать любым из них а и
00:13:29
нужны полиморфизм в чистом виде наш да
00:13:31
это процессор может работать вообще
00:13:33
совсем чем угодно лишь бы это что угодно
00:13:37
реализовывала интерфейса ай да это
00:13:39
провайдер
00:13:40
и соответственно в нем бы в любом случае
00:13:42
был метод get дейта чтобы конкретный
00:13:45
процессор который мы реализовываем
00:13:47
который реализовывает интерфейс ай да
00:13:49
это процессор мог у этого дейта
00:13:51
провайдера вызвать тот самый метод
00:13:53
getdata соответственно мы сюда в этот метод
00:13:55
можем скармливать все что угодно и
00:13:57
реализацию
00:13:59
этого метода в этом классе но все равно
00:14:01
не нужно будет менять потому что то что
00:14:03
мы сюда скормим должно поддерживать вот
00:14:05
этот контракт
00:14:06
соответственно должно иметь метод get
00:14:09
дейта
00:14:10
именно с такой сигнатурой ясным
00:14:12
посмотрим дыбом гири как это происходит
00:14:14
вот например поставим брейк-пойнт
00:14:17
на пятьдесят седьмой строчке кода
00:14:19
запустим с отладкой на пятьдесят седьмой
00:14:22
строчке кода мыло за вами этот процесс
00:14:24
до этой когда мы вызываем этот метод то
00:14:26
качестве параметра мы передаем объект
00:14:29
тебе да это провайдер который тут же
00:14:31
сразу и создаем
00:14:33
если мы сделаем шаг за ходом
00:14:35
мы попадаем в метод процесс дельта u
00:14:38
консоль да это процессора и смотрим что
00:14:40
у нас находится в объекте да это
00:14:42
провайдер
00:14:43
здесь у нас внутри сейчас деби дейта
00:14:45
провайдер девида это провайдер
00:14:48
у нас реализовывает метод get дейта
00:14:49
потому что он реализовывать интерфейс
00:14:52
ай да это провайдер ответственно если мы
00:14:54
еще сделаем шаг за ходом мы попадем в
00:14:56
реализации метода get дейта класса
00:14:58
либидо и т.п.
00:14:59
и у нас на консоль вот появилась
00:15:02
вот сейчас выглядит
00:15:04
данный изгибе из базы
00:15:09
когда у нас вызывается метод процесс дай
00:15:11
там на пятьдесят восьмой строчке кода
00:15:12
качестве параметров процесс да это мы
00:15:14
передаем объекту файл да это прямо и двд
00:15:17
багере видно что у нас находится в
00:15:19
переменной a better уходящим параметре
00:15:21
если мы посмотрим как теперь от работает
00:15:24
метод get дейта делаем шаг за ходом до
00:15:27
мы попадаем в реализацию метода get
00:15:28
дейта которые наса в файл дейта
00:15:30
провайдер ну и соответственно мы
00:15:32
получаем данные из файла здесь у нас
00:15:35
заглушки но здесь могла быть реально
00:15:37
какая-то biologic которая реально бы
00:15:39
получать данные из файла из базы данных
00:15:41
или выполняла какой-то и pericol как
00:15:43
например здесь на пятьдесят девятой
00:15:45
строчке хочу обратить ваше внимание на
00:15:47
то что сейчас у нас прям файле parents
00:15:50
описан интерфейсы классы логика
00:15:53
реализация прям
00:15:55
все в одной куче на самом деле в
00:15:57
реальных проектах так не делается я
00:15:59
здесь это сделал чисто для удобства
00:16:01
чтобы удобнее было показывать и
00:16:02
проматывать хотя бы так тоже работает но
00:16:06
принято что каждый класс каждый
00:16:08
интерфейс находится сам отдельном файле
00:16:10
соответственно если мы хотим создать
00:16:11
файлик для интерфейса то это делается
00:16:15
точно так же как и для класса правой
00:16:16
кнопкой по проекту это
00:16:19
не уайтом
00:16:20
мы можем выбрать
00:16:21
класс либо интерфейс
00:16:24
давайте вот интерфейс выберем у нас
00:16:26
создается отдельный файл перейдите он
00:16:28
тоже формате sis здесь мы можем описать
00:16:30
наш интерфейс и все такое прочее но
00:16:33
точно так же как мы это делали с
00:16:34
обычными классы кстати если мы назовём
00:16:36
это все дело классом то она будет
00:16:38
классом это непринципиально что при
00:16:41
эти кнопочки это
00:16:43
выборе new этому мы выбрали интерфейс
00:16:45
нам главное чтобы здесь просто был
00:16:47
какой-то отдельный файлик а мы можем его
00:16:48
потом переименовать ее поместить в него
00:16:50
что угодно главное о том что каждая
00:16:53
отдельная сущность должна находиться в
00:16:55
своем отдельном файле работать все будет абсолютно идентичен
00:16:57
теперь вернемся в предыдущий проект
00:17:00
который мы использовали в прошлом уроке
00:17:02
и там у нас был абстрактный класс в памм
00:17:04
переделаем все это дело под интерфейсе
00:17:06
из одно рассмотрим каким образом можно
00:17:09
сделать множественное наследование
00:17:11
точнее правильно говорите множественную
00:17:13
реализацию интерфейса
00:17:15
сути у нас здесь в нашем абстрактном
00:17:17
платил этом есть логика которые может
00:17:20
принадлежать разным сущностям
00:17:22
метод fire и д матч непосредственно
00:17:25
принадлежат именно классовое пан
00:17:28
потому что это должно быть что-то что
00:17:29
может стрелять а вот метод шоу инфо
00:17:31
могла принадлежать не только класса в
00:17:33
этом а допустим какому-то сундуку
00:17:36
каким-то дверям вообще абсолютно всему
00:17:38
чему угодно на что игрок посмотрим
00:17:40
соответственно логично было бы чтобы
00:17:43
быть эту вещь мы могли выделить в
00:17:45
отдельный интерфейс и вот здесь
00:17:48
метод чик info у нашего player вот здесь
00:17:51
у нас реализован мог бы принимать ссылку
00:17:53
на интерфейс и таким образом получать
00:17:56
информацию о любом абсолютно любом
00:17:59
объекте который реализовывает этот
00:18:00
интерфейс
00:18:01
таком случае нам не нужно было бы
00:18:03
модифицировать класс player для каждого
00:18:06
нового объекта просто реализовать
00:18:08
интерфейс в этом каждом но в объекте
00:18:11
давайте-ка займемся модификации сделаем
00:18:14
отдельный интерфейс котором будет
00:18:16
описано сигнатурами подошел info
00:18:18
название а их с инфу и пишем 10 натуру
00:18:21
метода шоу инфо
00:18:23
принципе наш абстрактный класс в этом
00:18:26
уже реализовывать этот интерфейс и мы
00:18:29
можем сделать вот так без проблем все
00:18:30
будет так работать но есть нюанс мы
00:18:33
должны продать наш класс player
00:18:37
с он может смотреть информацию лишь
00:18:39
только по
00:18:41
чем-либо что унаследовано от
00:18:43
абстрактного класса в этом
00:18:45
мы поменяем эту реализацию таким образом
00:18:48
чтобы здесь у нас была ссылка на любой
00:18:52
объект который реализовывает интерфейс а
00:18:54
их с info
00:18:56
как видите здесь у нас ничего не
00:18:58
сломалось переборе этого цикла где мы
00:19:00
вызываем этот чек info
00:19:02
и передаем в него
00:19:04
объект из инвентаря которая нас состоит
00:19:07
из классов которые представляют собой
00:19:09
оружие bow laser gun
00:19:12
иган почему так происходит но потому что
00:19:14
все вот эти конкретные классы оружие
00:19:17
унаследованы
00:19:19
вот базовым абстрактного класса в этот
00:19:22
базовый абстрактный класс у нас реализовывает
00:19:24
интерфейс а их с info
00:19:26
соответственно и все наследники этого
00:19:28
базового абстрактного класса тоже будут
00:19:30
реализовывать этот интерфейс
00:19:31
а их с info соответственно мы без
00:19:34
проблем можем
00:19:35
объекты наши как оружие передавать метод
00:19:39
чек info
00:19:42
плеер и он сможет без проблем брать
00:19:44
информацию об этом порушить но если мы
00:19:47
добавим какой-то класс допустим на
00:19:49
зимнего бокс
00:19:50
только эта коробка могут же у нас в игре
00:19:52
быть коробки и реализуем в нем интерфейс
00:19:55
а их из info
00:19:56
допустим на здесь будет выводиться
00:19:58
сообщение я коробку дыма без проблем
00:20:01
нашему player
00:20:02
в метод чек info может передать эту
00:20:06
самую коробку и после того как у нас
00:20:07
выводится информация обо всех видах
00:20:09
оружия
00:20:11
у нас еще и выводится информация о
00:20:13
коробке потому что коробка реализовать
00:20:16
метод а и с info
00:20:17
а нашего player вообще все равно чем
00:20:20
работать лишь бы это самое оно
00:20:22
реализовывал данный интерфейс
00:20:24
второй нюанс мы можем выделить еще один
00:20:26
интерфейс
00:20:27
а и веб и в этом интерфейсе мы можем
00:20:30
указать метод fire и помимо этого мы
00:20:33
также можем туда указать свойства до
00:20:37
интерфейс и могут содержать свойства
00:20:39
потому что как я уже говорил свойства
00:20:41
это по сути методы которые маскируются
00:20:43
под поля ссылка на нужный урок будет в
00:20:45
описании новый теперь наш абстрактный
00:20:47
классовая по ну и теперь как я говорил
00:20:50
на языке программирования си sharp
00:20:51
поддерживается множественное
00:20:53
наследование интерфейсов и множественной
00:20:55
реализация интерфейса соответственную в
00:20:57
нашем классе в по мы можем реализовать
00:20:59
еще интерфейса и випом
00:21:01
на самом деле он и так уже реализован
00:21:03
потому что у нас есть здесь свойство д
00:21:05
матч
00:21:06
и этот файл класс weapon удовлетворяет
00:21:09
контракту этого интерфейса
00:21:12
и все его наследники тоже будут
00:21:13
удовлетворять к контракту этого
00:21:15
интерфейса и перед данном случае мы
00:21:17
можем модифицировать нашего
00:21:19
player таким образом чтобы он принимал
00:21:21
метод fire не класс который унаследован
00:21:25
от абстрактного класса в класс который
00:21:27
реализует интерфейс и он соответственно
00:21:30
даже если оружие у нас не будет
00:21:33
унаследовано от абстрактного класса vip
00:21:36
но будет реализовывать интерфейс aero
00:21:38
пам как это было в случае с боксом
00:21:41
наш игрок все равно сможет из этого
00:21:44
выстрелить давайте сейчас запустим и
00:21:46
проверим что все работает и ничего не
00:21:48
поменялось отработала как и должно в чем
00:21:50
тогда смысл этого абстрактного класса
00:21:53
смысл в том что определенных групп
00:21:55
объектов может быть определенное
00:21:57
одинаковое поведение как например у
00:22:00
любого оружия должен быть этот файл
00:22:02
чтобы нанести какой-то урон но своей
00:22:04
иерархи это может быть разное оружие
00:22:06
допустим это может быть огнестрела не
00:22:08
огнестрел допустим если это какой-то
00:22:11
огнестрел то
00:22:13
это оружие должно
00:22:14
ведь возможность перезаряжаться
00:22:15
соответственно в этом абстрактном классе
00:22:17
в памм мы бы могли добавить еще
00:22:20
абстрактный метод который заставляет вид
00:22:22
оружия перезаряжаться
00:22:24
но например если бы это были ножи
00:22:27
саблями chessie такое проще это понятно
00:22:29
дело что перезаряжаться они не должны но
00:22:31
использовать их то есть нажать кнопочку
00:22:33
фаир мы должны уметь и дамаг у них
00:22:36
должен быть все равно
00:22:38
ну и соответственно нашему плееру игроку
00:22:40
все равно это уже может перезаряжаться
00:22:43
или нет вот нам главное чтобы он мог из
00:22:45
него выстрелить и раз это нечто
00:22:47
реализовывать интерфейс aero понта там
00:22:49
гарантированно есть этот файл что мы
00:22:51
уэст уйти дамаг который это нечто может
00:22:53
нанести
00:22:54
и нашему другу все равно какое конкретно
00:22:56
это видео оружие лишь бы он мог стрелять
00:22:59
у нас есть еще много вопросов которые
00:23:01
следует обсудить касательно интерфейсов
00:23:03
всем этим мы займемся в следующих уроках
00:23:05
исходный код данного урока как всегда
00:23:07
найдете на п-3м буду рад если поделитесь
00:23:09
этим уроком это поможет развитию канала
00:23:11
ну и конечно если вы ещё не подписались
00:23:13
на канал то обязательно подписывайтесь
00:23:15
здесь уже есть и будет еще много
00:23:16
полезных интересных уроков для вас всем
00:23:18
спасибо за внимание пока

Описание:

В этом уроке начнём разбираться с интерфейсами в языке программирования C#, выясним для чего они нужны как используются и рассмотрим несколько примеров использования интерфейсов. ✅ ИСХОДНЫЙ КОД https://www.patreon.com/posts/iskhodnyi-kod-k-49927853 🔹 Telegram канал https://t.me/SergeySimpleCode 🔹 Наша группа ВК https://vk.com/smplcode ✅ Доступ к исходному коду и спонсорство https://www.patreon.com/SimpleCode ✅ https://new.donatepay.ru/@SimpleCode ✅ BTC кошелек: 12oYfJnvt76wjJbpvfhM41m6KPz6uz4LD4 ✅ Подписывайтесь на канал https://www.youtube.com/channel/UCtLKO1Cb2GVNrbU7Fi0pM0w 🔹 C# свойства get set | ключевое слово value | автоматические свойства c# | ООП C# Урок | # 62 https://www.youtube.com/watch?v=2or3h5m3VbA&list=PLQOaTSbfxUtD6kMmAYc8Fooqya3pjLs1N&index=81 00:00 ► что будет в уроке 00:47 ► для чего нужны интерфейсы в си шарп 03:11 ► пример использования интерфейсов на практике 15:45 ► как интерфейсы и классы нужно размещать в проекте 16:58 ► использование интерфейсов и абстрактных классов 20:26 ► множественная реализация интерфейсов

Готовим варианты загрузки

popular icon
Популярные
hd icon
HD видео
audio icon
Только звук
total icon
Все форматы
* — Если видео проигрывается в новой вкладке, перейдите в неё, а затем кликните по видео правой кнопкой мыши и выберите пункт "Сохранить видео как..."
** — Ссылка предназначенная для онлайн воспроизведения в специализированных плеерах

Вопросы о скачивании видео

mobile menu iconКак можно скачать видео "Интерфейсы в C# зачем нужны и как используются | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ | # 77"?mobile menu icon

  • Сайт http://unidownloader.com/ — лучший способ скачать видео или отдельно аудиодорожку, если хочется обойтись без установки программ и расширений. Расширение UDL Helper — удобная кнопка, которая органично встраивается на сайты YouTube, Instagram и OK.ru для быстрого скачивания контента.

  • Программа UDL Client (для Windows) — самое мощное решение, поддерживающее более 900 сайтов, социальных сетей и видеохостингов, а также любое качество видео, которое доступно в источнике.

  • UDL Lite — представляет собой удобный доступ к сайту с мобильного устройства. С его помощью вы можете легко скачивать видео прямо на смартфон.

mobile menu iconКакой формат видео "Интерфейсы в C# зачем нужны и как используются | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ | # 77" выбрать?mobile menu icon

  • Наилучшее качество имеют форматы FullHD (1080p), 2K (1440p), 4K (2160p) и 8K (4320p). Чем больше разрешение вашего экрана, тем выше должно быть качество видео. Однако следует учесть и другие факторы: скорость скачивания, количество свободного места, а также производительность устройства при воспроизведении.

mobile menu iconПочему компьютер зависает при загрузке видео "Интерфейсы в C# зачем нужны и как используются | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ | # 77"?mobile menu icon

  • Полностью зависать браузер/компьютер не должен! Если это произошло, просьба сообщить об этом, указав ссылку на видео. Иногда видео нельзя скачать напрямую в подходящем формате, поэтому мы добавили возможность конвертации файла в нужный формат. В отдельных случаях этот процесс может активно использовать ресурсы компьютера.

mobile menu iconКак скачать видео "Интерфейсы в C# зачем нужны и как используются | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ | # 77" на телефон?mobile menu icon

  • Вы можете скачать видео на свой смартфон с помощью сайта или pwa-приложения UDL Lite. Также есть возможность отправить ссылку на скачивание через QR-код с помощью расширения UDL Helper.

mobile menu iconКак скачать аудиодорожку (музыку) в MP3 "Интерфейсы в C# зачем нужны и как используются | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ | # 77"?mobile menu icon

  • Самый удобный способ — воспользоваться программой UDL Client, которая поддерживает конвертацию видео в формат MP3. В некоторых случаях MP3 можно скачать и через расширение UDL Helper.

mobile menu iconКак сохранить кадр из видео "Интерфейсы в C# зачем нужны и как используются | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ | # 77"?mobile menu icon

  • Эта функция доступна в расширении UDL Helper. Убедитесь, что в настройках отмечен пункт «Отображать кнопку сохранения скриншота из видео». В правом нижнем углу плеера левее иконки «Настройки» должна появиться иконка камеры, по нажатию на которую текущий кадр из видео будет сохранён на ваш компьютер в формате JPEG.

mobile menu iconСколько это всё стоит?mobile menu icon

  • Нисколько. Наши сервисы абсолютно бесплатны для всех пользователей. Здесь нет PRO подписок, нет ограничений на количество или максимальную длину скачиваемого видео.