На этом занятии мы приступаем к более интересным возможностям языка программирования C#, и сегодня научимся перегружать стандартные арифметические и логические операторы (operator). По своей сути процесс перегрузки операторов это определение логики поведения экземпляров классов при, например, сложении, вычитании, или сравнении (больше, меньше, равенство).
@АнтонПлатонов-о2п3 жыл бұрын
Привет Вадим. Спасибо большое за уроки. Начал изучать шарп с сентября и твои ролики начал смотреть недавно. Я битых 5 часов работал над этим кодом потому что я затупок. Но в итоге все получилось.
@isagidaiki Жыл бұрын
как успехи?
@73километр8 ай бұрын
Мне плохо, хуево, одиноко ебана без тебя. НАЕБАЛ, ЕЙ ХЮХЕФНЕР@@isagidaiki
@mikkimorfin35 жыл бұрын
Отличный урок, СООТВЕТСТВЕННО благодарю,что помогаешь в изучении языка!😄😄👍🤘
@CODEBLOG5 жыл бұрын
Всегда пожалуйста )
@kudokrasnodar4 жыл бұрын
Урок живой получился если бы предыдущие уроки не смотрел и самое важное не пробовал делать мне кажется не очень понятно бы было. Вадим благодарочка тебе =)
@valeriy7864 жыл бұрын
Супер, мега-урок, очень благодарен за этот курс!
@DENDYTWOO3 жыл бұрын
Добрый вечер. Немного не понял, что дает нам метод override string. Получается , что мы описываем наши экземпляры уже в классе и нам не надо постоянно долбить что-то в Console.WriteLine?
@boryskatowsky51904 жыл бұрын
41:25 я думаю ошибка там была из-за того что в параметр метода Round передавался int ((int + int) / 2, а такой перегрузки нет, т.к. int не округляется.
@Lex_775 жыл бұрын
Может немного не в тему - но отрицательная калорийность продуктов СУЩЕСТВУЕТ! Это такие продукты, на усвоение (переваривание) которых тратится больше энергии, чем они отдают организму! (это овощи в основном, в которых мин.содержание углеводов)
@АлександрРу-я4х2 жыл бұрын
Хороший Вы человек!
@sashkosashok5 жыл бұрын
Вышел из застоя, пересматриваю по второму разу. Мне кажется, что переопределение оператора != сделано с ошибкой. Потому, что == и != выведет true если у яблок одинаковое имя. Например 01:10:20
@CODEBLOG5 жыл бұрын
Большое спасибо за исправление. Да, совершенно точно это баг )) забыл поменять знак на !=
@argenkochkonaliev14642 жыл бұрын
а что делает override на 19:00
@andrey.nemchaninov4 жыл бұрын
По поводу отрицательной калорийности - её конечно нет, но есть продукты которые для переработки требуют больше калорий чем в них содержится, то есть на выходе они приводят к отрицательной колорийности :)
@BogdanovArtemiy3 жыл бұрын
Что сажрать, чтоб похудеть.
@denisnjar53693 жыл бұрын
верно, стебли сельдерея к примеру.
@eugenekrutoy14754 жыл бұрын
Лайк! Лайк! Лайк!
@PuishImov5 жыл бұрын
Блин может и не там задаю этот вопрос но всё же буду надеяться на внимания канала. Суть такова что я зная достаточно основные верхушку С# (Я далеко до Джуна) пытаюсь что-то делать на CodeWars и с 8 Ката всё более менее (по большому счету что-то то и думаю) но я перешёл на 7 Кю и пытаясь решить задачи 7 Ката я просто застреваю так как хз как это всё делать и суть такого что смотреть уроки (к примеру тут) не вариант так как тут темы а обычных примерах тебе задают вопрос который ты должен решить более менее основами (Массив к примеру) знаниями но всё же хз как это решать и да я просто застрял и не могу идти дальше (я очень люблю Програмирование) и у меня вопрос тем кто это всё вроде бы прошёл, что делать? Читать книги, смотреть на уроки, идти на форум или что? Знаю что задать такой вопрос в коменте к видео это не ахти но это проблема у меня идёт уже целую неделю((
@CODEBLOG5 жыл бұрын
Привет. Смотри, для начала нужно познакомиться с основами синтаксиса языка, который ты хочешь использовать. Для этого и нужны эти видео или книги. Без этого, ты просто не будешь знать что "так можно, а так нельзя", не сможешь нормально гуглить и т.д. Это примерно как изучение алфавита для чтения - само знание букв не научит тебя скорочтению, но очень сильно в этом поможет :)
@PuishImov5 жыл бұрын
@@CODEBLOG Благодарю за внимания)
@sweatyhands98304 жыл бұрын
На Codewars я вообще не видел ООП. Чтобы решать там задачки нужно очень хорошо понимать что такое циклы, массивы и условные операторы. Понадобятся и двойные циклы. Они очень неприятны поначалу, но чуть попрактиковать посмотреть все в режиме отладки и все становиться очень просто.
@AlexKwestCraft5 жыл бұрын
Меня смущает сложение яблок. Наверное при сложении яблок должна возвращаться корзинка яблок с экземплярам яблочек в ней и общими данными (вес, калорийность). Понимаю что тут был просто пример. Но ООП вроде должно максимально быть приближено к реальности. Или я ошибаюсь и лучше отойти от реальности?
@CODEBLOG5 жыл бұрын
Все зависит от того, как ты реализуешь поведение ) ты в праве реализовать так, как тебе нужно в системе
@jeb_77494 жыл бұрын
Я что-то немного не понял. Абстрактные классы нужны для создания других классов с ТАКИМИ ЖЕ характеристиками, без добавления новых? Просто, если добавлять другие поля(?), будет, насколько я понял, обычный класс. Или не так это всё работает?
@urbans64 жыл бұрын
Если мы хотим посчитать калорийность блюда, в котором есть по мимо яблока с его значениями ещё есть допустим груша, нужно создавать отдельный класс с методом,который должен наследоваться от яблок и груш?
@Давид-щ1ю8б3 жыл бұрын
Год прошел, но пофиг, во первых этот метод можно определить в сомом классе родителе(продукт) так как в нем есть поля калорийности, ну или же если необходима логика посложнее то можно и создать класс для операций, который лучше сделать что бы принимал в себя интерфейс IProduct и допустим что бы у интерфейса было определена функция нет калории, тогда ты в классе продукт этот метод определяешь, которы йпросто возвращает количество калорий, а если в наследниках нужно будет как то по другому вычислять то ты его переопределишь, но в любом случае в нём будет реализована функция геткалирии и в классе который работает с этим всем и считает ты можешь использовать этот метод, получать калорийность и считать, кстати год прошел, как твои познания в языке, не забросил программирование?
@ДенисЛитвинчук4 жыл бұрын
Здравствуйте.Не могу понять public override string ToString().Что это? и как это работает?
@CODEBLOG4 жыл бұрын
Переопределение виртуального метода. нужно для полиморфизма
@ivanomelchenko19953 жыл бұрын
спасибо за урок
@veerit38223 жыл бұрын
Cпасибо!
@sashkosashok6 жыл бұрын
Благодарю.
@andreyartemov54104 жыл бұрын
В этом видео вы объявили конструктор в котором определили свойства классу. Я к любой переменной и к любому методу этого класса смогу обратиться только введя аргументы ???? есть ли возможность обратиться к классу не вводя переменные. Например я хочу чтобы этот же класс записывал переменные в список, а потом из другого класса хочу обратиться к этому списку( не вводя аргументы).... возможно ли это реализовать???
@archivfan4 жыл бұрын
Спасибо за урок кстате не подскажите как сделать всплывающие подсказки, на русском когда наводишь на строки, а то когда создал новый проект всё стало на английском (интерфейс на русском, а вот сами подсказки на англ)
@CODEBLOG4 жыл бұрын
Проверь какую версию проекта ты используешь. например поставь .net framework 4.6
@archivfan4 жыл бұрын
@@CODEBLOG Да спасибо, я просто делал консольное приложение core из-за этого =)
@51113 жыл бұрын
вместо math.round можно использовать побитовые операции Думаю так будет шустрее
@iraklissepianov76475 жыл бұрын
Хмм, я в общем понимаю, для чего нужен {get; set; }, но, всё равно, до конца не догоняю. Не могли бы вы объяснить мне?
@CODEBLOG5 жыл бұрын
Посмотри видео в курсе CLR via C#. 10 глава, я там как раз рассказываю подробно про свойства
@iraklissepianov76475 жыл бұрын
@@CODEBLOG благодарю
@Денис-у1и4я4 жыл бұрын
За этот и предыдущий урок возник вопрос. Допустим есть родительский класс Человек, у которого есть поле Имя и есть конструктор, в котором нужно обязательно ввести Имя при создании экземпляра. А теперь создаем класс Продавец и наследуемся от класса Человек. Теперь Продавец должен реализовать конструктор Человека и вводить каждый раз Имя при создании экземпляра. Но как быть, если у Продавца есть поле Специализация и нужно Продавцам делать собственных конструктор, где будет и Имя и Специализация . Я пробовал так сделать, но почему-то начинает ругаться IDE на меня. Что делаю не так?
@Денис-у1и4я4 жыл бұрын
Все я разобрался сам. В общем для того , чтобы был "пустой" конструктор у Наследника, то нужно создавать "пустой" конструктор и у Родителя и у Наследника. А если ты хочешь дополнить новым полем конструктор Наследника, то через ключевое слово base вызываешь конструктор Родителя и дополняешь новым полем (добавив проверку) .
@nerub96905 жыл бұрын
немного не понял что делает строка public override string ToString() . Что значит override?
@debasher3 жыл бұрын
Если кого интересует ответ на вопрос о перегрузке метода сложения в предке, то почитайте про универсальные шаблоны(буковака Т в качестве типа данных) и интерфейсы, думаю через всю эту кашу можно будет реализовать подобное поведение. (ИМХО)
@КириллБулыгин-р8о5 жыл бұрын
А почему когда переопределяли оператор +, мы после static писали Apple, а когда переопределяли оператор == то вместо Apple писали bool.?
@CODEBLOG5 жыл бұрын
потому что == и другие операторы сравнения являются логическими. то есть результатом их выполнения всегда должно быть да или нет. а в результате сложения должен получиться какой-то объект
@v_lobo5 жыл бұрын
Колоритность у продукта может быть отрицательной. Это когда колоритность у продукта = N , а организм что бы усвоить этот продукта тратит N+1 колорий. Кататак))))
@leo240-p5i3 жыл бұрын
Не так. Затраты на переваривание любого продукта - это проценты от его собственной калорийности. Могу порекомендовать найти соответствующее видео на канале CMT Бориса Цацулина
@Sergioshe4 жыл бұрын
Спасибо
@BogdanovArtemiy3 жыл бұрын
Тема сложения бананов с киви не раскрыта. Как складывать обьекты из разных классов, и что мы должны получить по итогу? Смузи или салат?
@youshkow4 жыл бұрын
Что то я залип.... вроде с общего понимаю, но если более подробно то не понимаю вообще. Учу C# и прохожу еще Javarush. Но тут понял что застрял , не доходит до меня... какие то перегрузки, операторов, что, зачем? Какие то возвращения класса продукта...я поплыл кароч :( что лучше делать? Почитать книгу какую, или это нормально что я сейчас не понимаю, потом может разберусь поточнее, но тогда ведь смысл в уроках которые не понимаешь до конца, просто код строчу как в уроке...а как он работает до конца не соображаю. Началось это где то с урока 8го....
@BogdanovArtemiy3 жыл бұрын
Тут тебе время в помощь, пересматривай пока не поймешь, читай статьи.
@aleksey_peresvet Жыл бұрын
Есть вопрос к гуру C#, как перегрузить оператор + типа char?
@NeizBest4 жыл бұрын
Если честно, на этом видео внезапно, резко стало сложно. Скажем так, если раньше многое объяснялось, то сейчас... Тоже, конечно, немало объясняется, но при этом остаётся много не объяснённого. Так, что даже и не поймёшь в конце, понял ты или не понял) Хотя может это просто я такой новичок... В общем, нужно разбираться в теме больше. Во, пересмотрел и кажется понял суть произошедшего. (Сама перегрузка, которая названа темой видео, фактически запрятана в видео про наследование и abstract:))
@MikhailPavliuchkov4 жыл бұрын
30:40 Что такое summary?
@NeizBest4 жыл бұрын
Это что-то вроде глобального комментария. Фишка Visual Studio. Короче говоря, третий способ сделать комментарий. (Но он не работает ни в VSCode, ни в monoDevelop))) Ещё эта штука называется XML комментарием. В общем - захотите, найдёте)))
@alexspeleers5 жыл бұрын
отрицательные калории - съел и умер.
@CODEBLOG5 жыл бұрын
На самом деле действительно существует такой продукт с отрицательными каллориями - это сельдерей. Для того, чтобы его переварить организму нужно больше каллорий, чем в нем содержится )
@автору1секунда4 жыл бұрын
CODE BLOG - Программирование и C# о мой бог, это тот самый продукт из навязчивых желтушных баннеров типа «чтобы похудеть нужно лишь есть...»
@paveldukov6 жыл бұрын
спасибо
@ktsin5 жыл бұрын
Про указатель(а указатель ли?) base нужно было говорить в уроке №9)
@CODEBLOG5 жыл бұрын
Ну вообще да, естественно, это не указатель в общепринятом понимании в программировании, но смысл вроде бы передал )
@hamdybasuony79206 жыл бұрын
Спасибо Из Арабской Республики Египет
@FreeCoinsChannel5 жыл бұрын
public override string ToString() { return Name; } Не могу понять почему этот метод срабатывает...вы же нигде его не вызываете?
@CODEBLOG5 жыл бұрын
этот метод CLR автоматически вызывает, когда пытается привести объект к строке. например, когда встречает сложение строки и числа "string" + 134. это равносильно "string" + 134.ToString(). или если идет интерполяции строк $"{var}" - будет вызвано приведение к строке автоматически
@ilnurryazhapov4 жыл бұрын
Я думаю в граммах измеряется масса а не объем
@АлексейНемцов-х6у5 жыл бұрын
Почему так резко появилось столько непонятных названий
@CODEBLOG5 жыл бұрын
А какие именно названия не понятны?
@PuishImov5 жыл бұрын
@@CODEBLOG override, base.что-то.
@epicdayman62004 жыл бұрын
@@CODEBLOG override, nameof, ArgumentException, throw и т.д.
@OpalGooDog3 жыл бұрын
@@epicdayman6200 ArgumentException, throw работа с исключениями, override переопределение абстрактного или виртуального метода в дочернем классе, nameof выводит в стрингу нужное нам имя
@АристархЗловредович3 жыл бұрын
ыхыхых про калории автор не въехал хотя ему подсказали в чате. И потом если видео про перегрузку операторов, то зачем все настолько усложнять ? К чему в примере базовый класс, абстрактный какие то наследования и тд. ? И потом автор почему то умолчал о том ,что для == и != и вообще операторов сравнения необходимо переопределять методы методы Object.Equals() и Object.GetHashCode() . В итоге пришел посмотреть про перегрузку операторов а на деле какаято лажа.
@crzyduck14 жыл бұрын
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
@CryptoVangard3 жыл бұрын
Кто из 2021 ? Ругается на наследие .если дополнительно не создать в Product - пустой конструктор .
@BogdanovArtemiy3 жыл бұрын
так и есть
@walkingcode5 жыл бұрын
на скорости 1.75 смотреть можно
@CODEBLOG5 жыл бұрын
Да, отличный вариант )
@sergbr25523 жыл бұрын
Блин думал хоть тут норма, а нет как и все спустя несколько понятных занятий начинаются сразу дебри. Откуда должен новичок догадываться о том что он не знает. А знал бы не смотрел.
@musicbox17143 жыл бұрын
Для новичков, есть предыдущии видео!
@АлексейКарпунов-х8э3 жыл бұрын
очень много воды..
@ShymkoDmytro4 жыл бұрын
с английским у автора все очень плохо...
@LinDahai885 жыл бұрын
Ахренеть продвинуто... Наследование это ОЧЕНЬ продвинутый уровень в C#...