Перегрузка операторов (operator) в C# - Учим Шарп #11

  Рет қаралды 54,093

CODE BLOG

CODE BLOG

Күн бұрын

Пікірлер: 86
@CODEBLOG
@CODEBLOG 6 жыл бұрын
На этом занятии мы приступаем к более интересным возможностям языка программирования C#, и сегодня научимся перегружать стандартные арифметические и логические операторы (operator). По своей сути процесс перегрузки операторов это определение логики поведения экземпляров классов при, например, сложении, вычитании, или сравнении (больше, меньше, равенство).
@АнтонПлатонов-о2п
@АнтонПлатонов-о2п 3 жыл бұрын
Привет Вадим. Спасибо большое за уроки. Начал изучать шарп с сентября и твои ролики начал смотреть недавно. Я битых 5 часов работал над этим кодом потому что я затупок. Но в итоге все получилось.
@isagidaiki
@isagidaiki Жыл бұрын
как успехи?
@73километр
@73километр 8 ай бұрын
Мне плохо, хуево, одиноко ебана без тебя. НАЕБАЛ, ЕЙ ХЮХЕФНЕР​@@isagidaiki
@mikkimorfin3
@mikkimorfin3 5 жыл бұрын
Отличный урок, СООТВЕТСТВЕННО благодарю,что помогаешь в изучении языка!😄😄👍🤘
@CODEBLOG
@CODEBLOG 5 жыл бұрын
Всегда пожалуйста )
@kudokrasnodar
@kudokrasnodar 4 жыл бұрын
Урок живой получился если бы предыдущие уроки не смотрел и самое важное не пробовал делать мне кажется не очень понятно бы было. Вадим благодарочка тебе =)
@valeriy786
@valeriy786 4 жыл бұрын
Супер, мега-урок, очень благодарен за этот курс!
@DENDYTWOO
@DENDYTWOO 3 жыл бұрын
Добрый вечер. Немного не понял, что дает нам метод override string. Получается , что мы описываем наши экземпляры уже в классе и нам не надо постоянно долбить что-то в Console.WriteLine?
@boryskatowsky5190
@boryskatowsky5190 4 жыл бұрын
41:25 я думаю ошибка там была из-за того что в параметр метода Round передавался int ((int + int) / 2, а такой перегрузки нет, т.к. int не округляется.
@Lex_77
@Lex_77 5 жыл бұрын
Может немного не в тему - но отрицательная калорийность продуктов СУЩЕСТВУЕТ! Это такие продукты, на усвоение (переваривание) которых тратится больше энергии, чем они отдают организму! (это овощи в основном, в которых мин.содержание углеводов)
@АлександрРу-я4х
@АлександрРу-я4х 2 жыл бұрын
Хороший Вы человек!
@sashkosashok
@sashkosashok 5 жыл бұрын
Вышел из застоя, пересматриваю по второму разу. Мне кажется, что переопределение оператора != сделано с ошибкой. Потому, что == и != выведет true если у яблок одинаковое имя. Например 01:10:20
@CODEBLOG
@CODEBLOG 5 жыл бұрын
Большое спасибо за исправление. Да, совершенно точно это баг )) забыл поменять знак на !=
@argenkochkonaliev1464
@argenkochkonaliev1464 2 жыл бұрын
а что делает override на 19:00
@andrey.nemchaninov
@andrey.nemchaninov 4 жыл бұрын
По поводу отрицательной калорийности - её конечно нет, но есть продукты которые для переработки требуют больше калорий чем в них содержится, то есть на выходе они приводят к отрицательной колорийности :)
@BogdanovArtemiy
@BogdanovArtemiy 3 жыл бұрын
Что сажрать, чтоб похудеть.
@denisnjar5369
@denisnjar5369 3 жыл бұрын
верно, стебли сельдерея к примеру.
@eugenekrutoy1475
@eugenekrutoy1475 4 жыл бұрын
Лайк! Лайк! Лайк!
@PuishImov
@PuishImov 5 жыл бұрын
Блин может и не там задаю этот вопрос но всё же буду надеяться на внимания канала. Суть такова что я зная достаточно основные верхушку С# (Я далеко до Джуна) пытаюсь что-то делать на CodeWars и с 8 Ката всё более менее (по большому счету что-то то и думаю) но я перешёл на 7 Кю и пытаясь решить задачи 7 Ката я просто застреваю так как хз как это всё делать и суть такого что смотреть уроки (к примеру тут) не вариант так как тут темы а обычных примерах тебе задают вопрос который ты должен решить более менее основами (Массив к примеру) знаниями но всё же хз как это решать и да я просто застрял и не могу идти дальше (я очень люблю Програмирование) и у меня вопрос тем кто это всё вроде бы прошёл, что делать? Читать книги, смотреть на уроки, идти на форум или что? Знаю что задать такой вопрос в коменте к видео это не ахти но это проблема у меня идёт уже целую неделю((
@CODEBLOG
@CODEBLOG 5 жыл бұрын
Привет. Смотри, для начала нужно познакомиться с основами синтаксиса языка, который ты хочешь использовать. Для этого и нужны эти видео или книги. Без этого, ты просто не будешь знать что "так можно, а так нельзя", не сможешь нормально гуглить и т.д. Это примерно как изучение алфавита для чтения - само знание букв не научит тебя скорочтению, но очень сильно в этом поможет :)
@PuishImov
@PuishImov 5 жыл бұрын
@@CODEBLOG Благодарю за внимания)
@sweatyhands9830
@sweatyhands9830 4 жыл бұрын
На Codewars я вообще не видел ООП. Чтобы решать там задачки нужно очень хорошо понимать что такое циклы, массивы и условные операторы. Понадобятся и двойные циклы. Они очень неприятны поначалу, но чуть попрактиковать посмотреть все в режиме отладки и все становиться очень просто.
@AlexKwestCraft
@AlexKwestCraft 5 жыл бұрын
Меня смущает сложение яблок. Наверное при сложении яблок должна возвращаться корзинка яблок с экземплярам яблочек в ней и общими данными (вес, калорийность). Понимаю что тут был просто пример. Но ООП вроде должно максимально быть приближено к реальности. Или я ошибаюсь и лучше отойти от реальности?
@CODEBLOG
@CODEBLOG 5 жыл бұрын
Все зависит от того, как ты реализуешь поведение ) ты в праве реализовать так, как тебе нужно в системе
@jeb_7749
@jeb_7749 4 жыл бұрын
Я что-то немного не понял. Абстрактные классы нужны для создания других классов с ТАКИМИ ЖЕ характеристиками, без добавления новых? Просто, если добавлять другие поля(?), будет, насколько я понял, обычный класс. Или не так это всё работает?
@urbans6
@urbans6 4 жыл бұрын
Если мы хотим посчитать калорийность блюда, в котором есть по мимо яблока с его значениями ещё есть допустим груша, нужно создавать отдельный класс с методом,который должен наследоваться от яблок и груш?
@Давид-щ1ю8б
@Давид-щ1ю8б 3 жыл бұрын
Год прошел, но пофиг, во первых этот метод можно определить в сомом классе родителе(продукт) так как в нем есть поля калорийности, ну или же если необходима логика посложнее то можно и создать класс для операций, который лучше сделать что бы принимал в себя интерфейс IProduct и допустим что бы у интерфейса было определена функция нет калории, тогда ты в классе продукт этот метод определяешь, которы йпросто возвращает количество калорий, а если в наследниках нужно будет как то по другому вычислять то ты его переопределишь, но в любом случае в нём будет реализована функция геткалирии и в классе который работает с этим всем и считает ты можешь использовать этот метод, получать калорийность и считать, кстати год прошел, как твои познания в языке, не забросил программирование?
@ДенисЛитвинчук
@ДенисЛитвинчук 4 жыл бұрын
Здравствуйте.Не могу понять public override string ToString().Что это? и как это работает?
@CODEBLOG
@CODEBLOG 4 жыл бұрын
Переопределение виртуального метода. нужно для полиморфизма
@ivanomelchenko1995
@ivanomelchenko1995 3 жыл бұрын
спасибо за урок
@veerit3822
@veerit3822 3 жыл бұрын
Cпасибо!
@sashkosashok
@sashkosashok 6 жыл бұрын
Благодарю.
@andreyartemov5410
@andreyartemov5410 4 жыл бұрын
В этом видео вы объявили конструктор в котором определили свойства классу. Я к любой переменной и к любому методу этого класса смогу обратиться только введя аргументы ???? есть ли возможность обратиться к классу не вводя переменные. Например я хочу чтобы этот же класс записывал переменные в список, а потом из другого класса хочу обратиться к этому списку( не вводя аргументы).... возможно ли это реализовать???
@archivfan
@archivfan 4 жыл бұрын
Спасибо за урок кстате не подскажите как сделать всплывающие подсказки, на русском когда наводишь на строки, а то когда создал новый проект всё стало на английском (интерфейс на русском, а вот сами подсказки на англ)
@CODEBLOG
@CODEBLOG 4 жыл бұрын
Проверь какую версию проекта ты используешь. например поставь .net framework 4.6
@archivfan
@archivfan 4 жыл бұрын
@@CODEBLOG Да спасибо, я просто делал консольное приложение core из-за этого =)
@5111
@5111 3 жыл бұрын
вместо math.round можно использовать побитовые операции Думаю так будет шустрее
@iraklissepianov7647
@iraklissepianov7647 5 жыл бұрын
Хмм, я в общем понимаю, для чего нужен {get; set; }, но, всё равно, до конца не догоняю. Не могли бы вы объяснить мне?
@CODEBLOG
@CODEBLOG 5 жыл бұрын
Посмотри видео в курсе CLR via C#. 10 глава, я там как раз рассказываю подробно про свойства
@iraklissepianov7647
@iraklissepianov7647 5 жыл бұрын
@@CODEBLOG благодарю
@Денис-у1и4я
@Денис-у1и4я 4 жыл бұрын
За этот и предыдущий урок возник вопрос. Допустим есть родительский класс Человек, у которого есть поле Имя и есть конструктор, в котором нужно обязательно ввести Имя при создании экземпляра. А теперь создаем класс Продавец и наследуемся от класса Человек. Теперь Продавец должен реализовать конструктор Человека и вводить каждый раз Имя при создании экземпляра. Но как быть, если у Продавца есть поле Специализация и нужно Продавцам делать собственных конструктор, где будет и Имя и Специализация . Я пробовал так сделать, но почему-то начинает ругаться IDE на меня. Что делаю не так?
@Денис-у1и4я
@Денис-у1и4я 4 жыл бұрын
Все я разобрался сам. В общем для того , чтобы был "пустой" конструктор у Наследника, то нужно создавать "пустой" конструктор и у Родителя и у Наследника. А если ты хочешь дополнить новым полем конструктор Наследника, то через ключевое слово base вызываешь конструктор Родителя и дополняешь новым полем (добавив проверку) .
@nerub9690
@nerub9690 5 жыл бұрын
немного не понял что делает строка public override string ToString() . Что значит override?
@debasher
@debasher 3 жыл бұрын
Если кого интересует ответ на вопрос о перегрузке метода сложения в предке, то почитайте про универсальные шаблоны(буковака Т в качестве типа данных) и интерфейсы, думаю через всю эту кашу можно будет реализовать подобное поведение. (ИМХО)
@КириллБулыгин-р8о
@КириллБулыгин-р8о 5 жыл бұрын
А почему когда переопределяли оператор +, мы после static писали Apple, а когда переопределяли оператор == то вместо Apple писали bool.?
@CODEBLOG
@CODEBLOG 5 жыл бұрын
потому что == и другие операторы сравнения являются логическими. то есть результатом их выполнения всегда должно быть да или нет. а в результате сложения должен получиться какой-то объект
@v_lobo
@v_lobo 5 жыл бұрын
Колоритность у продукта может быть отрицательной. Это когда колоритность у продукта = N , а организм что бы усвоить этот продукта тратит N+1 колорий. Кататак))))
@leo240-p5i
@leo240-p5i 3 жыл бұрын
Не так. Затраты на переваривание любого продукта - это проценты от его собственной калорийности. Могу порекомендовать найти соответствующее видео на канале CMT Бориса Цацулина
@Sergioshe
@Sergioshe 4 жыл бұрын
Спасибо
@BogdanovArtemiy
@BogdanovArtemiy 3 жыл бұрын
Тема сложения бананов с киви не раскрыта. Как складывать обьекты из разных классов, и что мы должны получить по итогу? Смузи или салат?
@youshkow
@youshkow 4 жыл бұрын
Что то я залип.... вроде с общего понимаю, но если более подробно то не понимаю вообще. Учу C# и прохожу еще Javarush. Но тут понял что застрял , не доходит до меня... какие то перегрузки, операторов, что, зачем? Какие то возвращения класса продукта...я поплыл кароч :( что лучше делать? Почитать книгу какую, или это нормально что я сейчас не понимаю, потом может разберусь поточнее, но тогда ведь смысл в уроках которые не понимаешь до конца, просто код строчу как в уроке...а как он работает до конца не соображаю. Началось это где то с урока 8го....
@BogdanovArtemiy
@BogdanovArtemiy 3 жыл бұрын
Тут тебе время в помощь, пересматривай пока не поймешь, читай статьи.
@aleksey_peresvet
@aleksey_peresvet Жыл бұрын
Есть вопрос к гуру C#, как перегрузить оператор + типа char?
@NeizBest
@NeizBest 4 жыл бұрын
Если честно, на этом видео внезапно, резко стало сложно. Скажем так, если раньше многое объяснялось, то сейчас... Тоже, конечно, немало объясняется, но при этом остаётся много не объяснённого. Так, что даже и не поймёшь в конце, понял ты или не понял) Хотя может это просто я такой новичок... В общем, нужно разбираться в теме больше. Во, пересмотрел и кажется понял суть произошедшего. (Сама перегрузка, которая названа темой видео, фактически запрятана в видео про наследование и abstract:))
@MikhailPavliuchkov
@MikhailPavliuchkov 4 жыл бұрын
30:40 Что такое summary?
@NeizBest
@NeizBest 4 жыл бұрын
Это что-то вроде глобального комментария. Фишка Visual Studio. Короче говоря, третий способ сделать комментарий. (Но он не работает ни в VSCode, ни в monoDevelop))) Ещё эта штука называется XML комментарием. В общем - захотите, найдёте)))
@alexspeleers
@alexspeleers 5 жыл бұрын
отрицательные калории - съел и умер.
@CODEBLOG
@CODEBLOG 5 жыл бұрын
На самом деле действительно существует такой продукт с отрицательными каллориями - это сельдерей. Для того, чтобы его переварить организму нужно больше каллорий, чем в нем содержится )
@автору1секунда
@автору1секунда 4 жыл бұрын
CODE BLOG - Программирование и C# о мой бог, это тот самый продукт из навязчивых желтушных баннеров типа «чтобы похудеть нужно лишь есть...»
@paveldukov
@paveldukov 6 жыл бұрын
спасибо
@ktsin
@ktsin 5 жыл бұрын
Про указатель(а указатель ли?) base нужно было говорить в уроке №9)
@CODEBLOG
@CODEBLOG 5 жыл бұрын
Ну вообще да, естественно, это не указатель в общепринятом понимании в программировании, но смысл вроде бы передал )
@hamdybasuony7920
@hamdybasuony7920 6 жыл бұрын
Спасибо Из Арабской Республики Египет
@FreeCoinsChannel
@FreeCoinsChannel 5 жыл бұрын
public override string ToString() { return Name; } Не могу понять почему этот метод срабатывает...вы же нигде его не вызываете?
@CODEBLOG
@CODEBLOG 5 жыл бұрын
этот метод CLR автоматически вызывает, когда пытается привести объект к строке. например, когда встречает сложение строки и числа "string" + 134. это равносильно "string" + 134.ToString(). или если идет интерполяции строк $"{var}" - будет вызвано приведение к строке автоматически
@ilnurryazhapov
@ilnurryazhapov 4 жыл бұрын
Я думаю в граммах измеряется масса а не объем
@АлексейНемцов-х6у
@АлексейНемцов-х6у 5 жыл бұрын
Почему так резко появилось столько непонятных названий
@CODEBLOG
@CODEBLOG 5 жыл бұрын
А какие именно названия не понятны?
@PuishImov
@PuishImov 5 жыл бұрын
@@CODEBLOG override, base.что-то.
@epicdayman6200
@epicdayman6200 4 жыл бұрын
@@CODEBLOG override, nameof, ArgumentException, throw и т.д.
@OpalGooDog
@OpalGooDog 3 жыл бұрын
@@epicdayman6200 ArgumentException, throw работа с исключениями, override переопределение абстрактного или виртуального метода в дочернем классе, nameof выводит в стрингу нужное нам имя
@АристархЗловредович
@АристархЗловредович 3 жыл бұрын
ыхыхых про калории автор не въехал хотя ему подсказали в чате. И потом если видео про перегрузку операторов, то зачем все настолько усложнять ? К чему в примере базовый класс, абстрактный какие то наследования и тд. ? И потом автор почему то умолчал о том ,что для == и != и вообще операторов сравнения необходимо переопределять методы методы Object.Equals() и Object.GetHashCode() . В итоге пришел посмотреть про перегрузку операторов а на деле какаято лажа.
@crzyduck1
@crzyduck1 4 жыл бұрын
using System; using System.Text; namespace ConsoleApplication9 { internal class Program { public class People { protected string firstName; protected string lastName; protected string dateOfBirth = "Неизвестно"; protected string id; protected static int StudentsCounter; protected static int TeachersCounter; protected People(string FirstName, string LastName, string DateOfBirth = "Неизвестно") { firstName = FirstName; lastName = LastName; dateOfBirth = DateOfBirth; } public string GetName() { return firstName + " " + lastName; } public static void PrintCounters() { Console.WriteLine($"Учителей в школе: {TeachersCounter} | Студентов в школе: {StudentsCounter}"); } public static void PrintKani() { Console.WriteLine("1-е осенние с 05 октября 2020 - по 11 октября 2020 " + "2-е осенние с 16 ноября 2020 - по 22 ноября 2020 " + "Новогодние с 28 декабря 2020 - по 10 января 2021 " + " Февральские с 15 февраля 2021 - по 21 февраля 2021 " + "Весенние с 5 апреля 2021 - по 11 апреля 2021 " + "Летние с 26 мая 2021 - по 31 августа 2021"); } } class Student : People { private int course; private int[] grades; public Student(string FirstName, string LastName, int Course, int[] Grades, string DateOfBirth = "Неизвестно") : base(FirstName, LastName, DateOfBirth) { course = Course; grades = Grades; for (int i = 0; i < LastName.Length; i++) { if (i % 2 == 0 & i != 0) { id += "-"; } id += $"{(int) LastName[i]}"; if (i+1 == LastName.Length) { id += $"-{course}0St"; } } StudentsCounter++; } public void PrintInfo() { Console.WriteLine($"Идендификатор Пользователя: {id}"); Console.WriteLine($"Имя: {firstName} {lastName}"); Console.WriteLine($"Дата Рождения: {dateOfBirth}"); Console.Write($"Курс Обучения: {course} ->"); for (int i = 0; i < course-1; i++) { Console.Write("☑"); } Console.Write("☒"); for (int i = 0; i < 5-course; i++) { Console.Write("☐"); } Console.WriteLine("Средняя Оценка: {AverageGrade(grades)}"); } public int AverageGrade(int[] Grades) { int averageGrade = 0; for (int i = 0; i < grades.Length; i++) { averageGrade += Grades[i]; if (i+1 == grades.Length) { averageGrade /= i + 1; } } return averageGrade; } public void PrintGrades(int[] Grades) { Console.Write("Успеваемость: "); for (int i = 0; i < Grades.Length; i++) { if (i+1 == Grades.Length) { Console.Write($"{Grades[i]}; "); break; } Console.Write($"{Grades[i]}, "); } } public static bool operator >(Student student1, Student student2) { if (student1.AverageGrade(student1.grades) > student2.AverageGrade(student2.grades)) { return true; } else { return false; } } public static bool operator
@CryptoVangard
@CryptoVangard 3 жыл бұрын
Кто из 2021 ? Ругается на наследие .если дополнительно не создать в Product - пустой конструктор .
@BogdanovArtemiy
@BogdanovArtemiy 3 жыл бұрын
так и есть
@walkingcode
@walkingcode 5 жыл бұрын
на скорости 1.75 смотреть можно
@CODEBLOG
@CODEBLOG 5 жыл бұрын
Да, отличный вариант )
@sergbr2552
@sergbr2552 3 жыл бұрын
Блин думал хоть тут норма, а нет как и все спустя несколько понятных занятий начинаются сразу дебри. Откуда должен новичок догадываться о том что он не знает. А знал бы не смотрел.
@musicbox1714
@musicbox1714 3 жыл бұрын
Для новичков, есть предыдущии видео!
@АлексейКарпунов-х8э
@АлексейКарпунов-х8э 3 жыл бұрын
очень много воды..
@ShymkoDmytro
@ShymkoDmytro 4 жыл бұрын
с английским у автора все очень плохо...
@LinDahai88
@LinDahai88 5 жыл бұрын
Ахренеть продвинуто... Наследование это ОЧЕНЬ продвинутый уровень в C#...
VIP ACCESS
00:47
Natan por Aí
Рет қаралды 30 МЛН
AI Is Making You An Illiterate Programmer
27:22
ThePrimeTime
Рет қаралды 251 М.