Video není dostupné.
Omlouváme se.
КЛЮЧЕВОЕ СЛОВО REF C# | C# ref что это и для чего нужно | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ | # 43
Vložit
- čas přidán 30. 05. 2020
- В этом уроке мы изучим ключевое слово ref в языке программирования C#, выясним для чего оно нужно, как используется, как ref работает для ссылочных типов и для значимых типов, а так же последние нововведения относительно модификатора ref в последних версиях языка программирования C#.
➡️ Мой курс C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ на Udemy
👉 www.udemy.com/...
✅Домашнее задание к уроку bit.ly/3eEPwAZ
✅ССЫЛОЧНЫЕ И ЗНАЧИМЫЕ ТИПЫ C# | СТЕК И КУЧА C# | REFERENCE AND VALUE TYPES C# | C# Уроки | # 38 bit.ly/3ckSKI4
✅ЧТО ТАКОЕ NULL | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ | # 39 bit.ly/3dmDFXO
✅Если вам нравятся мои уроки, вы хотите поддержать меня и развитие канала, то можете сделать это тут!=)
✅Доступ к исходному коду и спонсорство / simplecode
✅ donatepay.ru/d...
✅BTC кошелек: 12oYfJnvt76wjJbpvfhM41m6KPz6uz4LD4
✅ Telegram канал t.me/SergeySim...
✅Наша группа ВК smplcode
✅Подписывайтесь на канал / @simplecodeit
#сишарп #simplecode #урокипрограммирования #ref
Cамый лучший способ сказать "спасибо" - поставить лайк и и поделиться уроком с друзьями. Это очень мотивирует создавать полезные уроки =)
✅Доступ к исходному коду и спонсорство www.patreon.com/SimpleCode
✅ donatepay.ru/don/SimpleCode
✅BTC кошелек: 12oYfJnvt76wjJbpvfhM41m6KPz6uz4LD4
что-что, а объяснять сложное простым языком у вас получается. таких бы людей везде: и в школах, и в универах, и на ютубе)
Тут
Тут
Три раза(от начала до конца) пересмотрел этот урок, только потом начал понемногу понимать.
Аналогично
буквально также посмотрел 3 раза:D
Хз я сразу понял
Благодарность огромная,учусь по твоим урокам,и другим советую твой канал, который лучший на ютубе по языку с#👍
Кхм-кхм...CodeBlog 🔝
Но,здесь есть плюсы,Сергей раскрывает все детали каждой темы просто и понятно.Но очень долго ждать новых видео-уроков,пока до тех же делегатов дойдем...эх...Ну и практических заданий бы.
@@minoddein7205 у codebloge тоже все понятно но code blog мастер обьяснять простве вещи на протяжение часа
Ураа! Новый урок! Спс от души просто!!! Боялся что ты забросишь уроки.
Спасибо за урок!) Ждем List)
Если бы можно было ставить лайк не видео отдельно а всему каналу сразу, я бы автору его поставил... перечитал кучу книг и перепробовал кучу софта с самообучением программированию, но здесь подача просто божественная
Отличные уроки, спасибо! Я в C# хоть и не новичок, но тоже очень полезно пересмотреть. Очень часто наталкиваюсь на что-то новое о существовании которого и не догадывался, а делал раньше по старинке.
Ты не представляешь, как ты мне помог разобраться во многих темах, большое тебе человеческое спасибо!
Большое спасибо за урок! Жду новых!
Сергей, спасибо вам за урок! Сделайте пожалуйста следующий выпуск про использование выходного параметра out.
Спппасибо дяде Сереже за достойный контент
Я человек простой. Вижу видео Сергея, сразу поставлю лайк)
Огромнейшее спасибо! Такую сложную тему так легко раскидать!
Это талант! Огромное спасибо! Мира вашему дому.
Раньше смотрел в основном англоязычный ютуб, но тут попались вы Сергей и очень понравилось, как вы объясняете. Теперь буду смотреть и вас после этого урока)
На каждое видео по csharp ставлю лайк. Спасибо большое за такие понятные уроки, читаю параллельно книгу по unity и еще одну книгу просто про csharp, если бы не ваши уроки, то врятли что-то поняла еще на стадии переменных! Там хоть и стараются авторы писать очень простым языком, но все равно у вас нагляднее и понятнее, возможно еще и потому что вы подаете материал дозированно.
подскажи по юнити книгу
Один из лучших курсов! Спасибо, что делитесь знаниями!
Ссылка на ссылку.... аж ностальгия по С++ пробила) Спасибо!!!
Как много слов , как много информации . Но под конец урока всё таки смог осознать принцип работы этого ref.Спасибо за урок !)
Я только начал своё изучение С#
Спасибо за понятные и чёткие уроки. Надеюсь ты не забросиш это дело и доведёш всё до конца👍💪💪
как результат за 2 года?
@@ptichkasinichkamia зарабатывает 300к в наносекунду
Сергей, спасибо за урок! Как всегда всё понятно и вообще супер!)
Обалдеть, чуствую себя самым умным на свете после того как всё понял
хахах, понимаю
А ДЗ смог сделать ?
@@vladimir_pl я нет😂, только первое
@@ZuraevD как успехи
@@makesuprise8259 норм, курс то я этот второй раз пересматривал. Ща пока остановился, другие предметы по возможности закрываю. Ну вообще да, обленился я
Спасибо за урок!
спасибо! все уроки - очень понятным языком
Спасибо большое за уроки
нереально круто обьясняет, в начале урока думал ну пиздец приплыли... и ближе к 22-й минуте я начинал понемногу понимать. это некий симпл в мире кодирования, как симпл в кс го
Спасибо, Сергей!
Уф....Ну что могу сказать... Два дня с перерывами ломал голову. После завершения, понял что хоть я и указываю слово fer, но абсолютно его не использую. А так все работает. Понимаю, что не плохо было бы предусмотреть некоторые особенности (например при получении массива с 0 элементов, программа выдаст ошибку, тк попытается убрать еще один элемент в массиве без элементов), но в контексте моей программы, это невозможно.
static int[] Resize (ref int[] FirstArr)
{
Console.WriteLine(" Массив какого размера вам нужен? Введите число элементов :");
int YourElements = int.Parse(Console.ReadLine());
int[] FinalArr = new int[YourElements];
for (int i = 0; i < FinalArr.Length; i++)
{
if (i < FirstArr.Length)
FinalArr[i] = FirstArr[i];
else
FinalArr[i] = 0;
}
return FinalArr;
}
static int[] Add (ref int[] FirstArr)
{
Console.WriteLine(" 1 - добавить первый элемент
2 - добавить элемент по индексу
3 - добавить последний элемент");
int[] FinalArr = new int[FirstArr.Length+1];
int YourChoiсe2 = int.Parse(Console.ReadLine());
if (YourChoiсe2==1)
{
Console.WriteLine(" Новый элемент добавлен в начало массива, какое значение ему присвоить?");
int AddElem = int.Parse(Console.ReadLine());
for (int i = 0; i < FinalArr.Length; i++)
if (i < FirstArr.Length)
FinalArr[i+1] = FirstArr[i];
FinalArr[0] = AddElem;
}
if (YourChoiсe2==2)
{
Console.WriteLine(" Элемент с каим индексом требуется добавить?");
int IndexOf = int.Parse(Console.ReadLine());
Console.WriteLine(" Какое значение требуется присвоить этоиу элементу?");
int AddElem = int.Parse(Console.ReadLine());
for (int i = 0; i < FinalArr.Length; i++)
{
if (i < FirstArr.Length)
FinalArr[i] = FirstArr[i];
}
FinalArr[IndexOf] = AddElem;
}
if (YourChoiсe2==3)
{
Console.WriteLine(" Новый элемент добавлен в конец массива, какое значение ему присвоить?");
int AddElem = int.Parse(Console.ReadLine());
for (int i = 0; i < FinalArr.Length; i++)
{
if (i < FirstArr.Length)
FinalArr[i] = FirstArr[i];
}
FinalArr[^1] = AddElem;
}
return FinalArr;
}
static int[] Delete(ref int[] FirstArr)
{
Console.WriteLine(" 1 - удалить первый элемент
2 - удалить элемент по индексу
3 - удалить последний элемент");
int[] FinalArr = new int[FirstArr.Length - 1];
int YourChoiсe2 = int.Parse(Console.ReadLine());
if (YourChoiсe2 == 1)
{
Console.WriteLine(" Первый элемент массива удален");
for (int i = 0; i < FinalArr.Length; i++)
FinalArr[i] = FirstArr[i+1];
}
if (YourChoiсe2 == 2)
{
Console.WriteLine(" Элемент с каим индексом требуется удалить?");
int IndexOf = int.Parse(Console.ReadLine());
for (int i = 0; i < FinalArr.Length; i++)
{
if (i != FirstArr.Length)
FinalArr[i] = FirstArr[i];
}
}
if (YourChoiсe2 == 3)
{
Console.WriteLine(" Последний элемент массива удален");
for (int i = 0; i < FinalArr.Length; i++)
{
FinalArr[i] = FirstArr[i];
}
}
return FinalArr;
}
static void Main(string[] args)
{
int[] FirstArr = { 1, 2, 3 };
int[] FinalArr = new int[0];
Console.WriteLine(" Создан массив { 1 2 3}");
Console.WriteLine(" Вы можете выбрать одно из трех действий");
Console.WriteLine(" 1 - изменить размер массива
2 - добавить элемент в массив
3 - удалиь элемент массива");
int youChoise0 = int.Parse(Console.ReadLine());
if (youChoise0 == 1)
FinalArr = Resize (ref FirstArr);
if (youChoise0 == 2)
FinalArr = Add (ref FirstArr);
if (youChoise0 == 3)
FinalArr = Delete (ref FirstArr);
Console.WriteLine("Ваш массив :" );
for (int i = 0; i < FinalArr.Length; i++)
{
if (i==0)Console.Write("{");
Console.Write(FinalArr[i] + " ");
if (i == FinalArr.Length-1)Console.Write("}");
}
Console.WriteLine();
Console.WriteLine("Размер массива " + FinalArr.Length);
Console.WriteLine("Сумма элементов в массиве " + FinalArr.Sum());
Спасибо тебе за эти уроки! Очень внятно и доступно
Как всегда классный урок)
Мы встроили тебе ссылку в ссылку, чтобы ты мог передавать одну ссылку, пока находишься в другой ссылке)
Спасибо за ваши старания!
спасибо Сергей !!!
Я познал истину ! Спасибо, Сэнсэй !
На нашем направлении в универе старшекурсники и преподаватели рекомендуют твои уроки!
Спасибо тебе искренне!
Благодарю!
Очень понятно и классно разъяснил. Спасибо большое.
16:35 - Недавно столкнулся с такой проблемой по незнанию. У меня это прям головную боль вызвало, почему передавая объект класса в метод тот на выходе ничего не менял. Оказалось ровно то, что Вы объяснили в видео, то есть нужно указывать ref в подобных ситуациях даже для ссылочных данных
Сложная тема :) Спасибо что много примеров! Лучшие уроки!
я тоже учу сейчас на этом месте)
Давно начал учить C#?
@@ptichkasinichkamia Я его учил года 2 назад тоже по урокам в ютубе, но от Гоши Дударя(2 месяца занимался). Потом забросил, и вот недавно (месяц назад) открыл для себя SimpleCode. Объясняет он на уровень выше чем Дударь и в целом то что я учил 2 года назад оно помогло освежить большинство тем которые были в начале этого курса. Но дойдя до темы null и ref тут я уже как бы столкнулся с чем то новым) Интересно и сложно. Щас сижу пыхчу над домашкой ХD
@@user-ir5ut4tq3e я тоже сейчас её делаю
@@ptichkasinichkamia Осталось сделать удаление элементов массива с начала, конца и по индексу.
Спасибо за урок! Всё просто супер!)) Получаю кайф от выполненного дз чисто мной)
Единственное, что хотелось бы уточнить - иногда даже с ref происходит копирование Value Type'ов и все тут. Например, если структуру инициализировать не с помощью конструктора, а с помощью инициализатора - там можно словить movdqu/movdqa/vmovdqu. Там много условий должно совпасть чтобы это произошло и на поведение программы это не влияет, но может повлиять на производительность.
Спасибо за отличные уроки и домашнее задание =)
Как же круто ты объясняешь.
Сергей, привет! Сразу лайк, но посмотрю позже)))
смотрел этот урок 3 года назад и все было понятно, когда сам столкнулся с этой проблемой пересмотрел и понял все, на все 100%
Спасибо большое за видео)))
йоу йоу йоу новый урок))) когда закончились твои уроки начал бегать по всему ютубу как дворняга(
Комментарии в поддержку канала. Просьба не забрасывать это дело и конкретно курс по C#.
спасибо. очень четко.
Спасибо
Благодарю за урок.
Самый лучший обьяснятор на ютубе
Отличное видео, отличный парень!
Поддерживающий комментарий для дальнейшего развития канала
Спасибо за урок
Идея для следующего видео по Windows Forms: приложение, которое рисует фрактальное дерево, при чём пользователь сам задаёт изначальную длину ветки, делитель каждой следующей ветки, угол поворота и т.д.
закипел я на этом видосе, особенно под конец.
Очень долго ждал этот урок
большое спасибо за столь подробное объяснение
Нашел этот канал случайно, всё довольно доходчиво, но некоторые моменты я иногда не понимаю, и сижу с вопросом в голове ""а зачем так делать если это совсем не нужно""
к чему, я ПЫТАЮСЬ понять язык, но даётся с трудом, особенно какие то моменты, например с дз, просматривая тему, вроде бы как в голове отложилось, и порой понимаешь , что куда откуда и для чего, находишь некую связь, НО когда пытаюсь написать что то сам, например попробовать сделать дз, я вступаю в некий ступор, я не знаю с чего начать, что делать, что за чем следует, как проявить ту или иную задачу в голове. (надеюсь я дойду до уровня когда хотяб начну понимать). Но когда смотрю как ты выполнил дз, я сижу и думаю, так надо было делать так,и как бы понимаю весь код,я могу понять что куда и откуда, но сам писав код, затрудняюсь это делать, дай пару советов, как перебороть в себе этот момент со ступором. По урокам притензий не может, всё довольно доходчиво и хороший голос на слух, но я тупой ))) дай совет!!!
Значит ты не понимаешь, как строится структура самой программы( какая область видимости за что отвечает, где писать методы, а где основной код и тд). Пересмотри первые видосы или просто пиши простые программки по типу додать 2 числа, и постепенно добавляй в них что-то еще(например вывод сообщения). По сути, тебе просто не хватает практики. Вбиваешь в интернете задачки по с# и делаешь одну за другой)
як твої успіхи через рік?
угар хотите ? прошло три года а я до сих пор учу )))))))
Спасибо. Полезно и позновательно.
Спасибо за видео и лайк! Сергей, хотелось бы больше практических заданий или ссылку где их брать. Так же было бы интересно , чтоб Вы объяснили , что ещё нужно параллельно учить с языком С# в дополнении. Или пока только эти знания, а потом ещё, что-то?
Ура, новый видос!)
Спасибо! Шикарное объяснение
Отлично!
наконец-то я поняль! Спасибо, Серега!
spasibo za urok, ochen interesno
Дам совет для начинающих и тем у кого есть еще не большой опыт. Видео помогает на более лёгкоммастерства
миллион раз спасибо
Чел ты гений, смотрю для ознакомления и понимаю, что тебе цены не было бы в моем унике
Красава
Спасибо большое за урок) Скоро ли будет ООП?
Вы, тут все какие - то ковбои!
Больше домашек, ушло 4 дня на решение всех, но очень понравилось. Самые сложные - это задания по элементам. Оба решения по элементам, добавлению и удалению, почему-то получились разные. Последнее в разы короче вышло.
А как вам удалось изменить размер массива, не затрагивая при этом другие его элементы и их значения? Как вы смогли ввести изменения в длину массива без метода Resize? Подскажите, я в отчаянии.
Ты просто бомба!! 💣 👍
Не знал, спасибо за труд!
Благодарю
Спасибо, понял с 1 раза
Хороший урок. Полезный, интересный и без забегания на 100500 шагов вперёд. Спасибо Сергей!
Читаю комменты и виду что люди понимают и пишут что все понятно. А я понял только половину с 3 раза. Но я не сдамся, буду смотреть пока не пойму. Все остальное было проще понять.
Спасибо .
Спасибо вам ❤😍
Нничего себе, что у тебя за статистика по лайки/дизлайки(1100/1) ?)
лучший в своём деле
Спасииибо!
Вижу, что многие люди отвалились, ведь просмотры снижаются, но что уж тут поделать, это неизбежно. Что касается меня, то я вот прям сейчас начал смотреть твои серии и надеюсь, что не заброшу их. В 11 классе нам на ИКТ дали наконец-то попрактиковаться с паскалем и мне понравилось там писать мини игрушку, в которой нужно бить босса каждый ход. Понравилось мне так, что затем на телефон скачал компилятор паскаля. На тот момент в игре уже сделал завязанные на рандоме критические удары и регенерации босса, однако в школе мне друг сказал, что давай ка ты не на паскале это будешь делать, а на C#. Я такой подумал-подумал и, мостоятельно изучив малеха синтаксис, перевел эту игруху с паскаля на с++. Ну и забил конечно. А недавно, на стриме одного ютубера, один парень спрашивал, не хочет ли кто-нибудь поучаствовать в разработке его игры, ведь он делает модельки для Unity. Вот тут конечно и спросил он меня, а умею ли я на c# шаманить. Подумал-подумал я такой и решил скачать visual studio, и найти какой-нибудь гайдик. В это время уже на ютубе везде была реклама C, C++ и С#, ведь у нас тут век таргетированной рекламы. И тут бац, в рекомендации попадает твое видео по C#. Настало время переводить мою игруху сюда, я так понимаю)
Успехов тебе
@@minoddein7205 Console.WriteLine("Спасибон-н!");
Здравствуйте. Прошло 9 месяцев. Как успехи?)
@@user-xh3cz1rm4d В какой-то момент я посмотрел все серии, которые были доступны на тот момент и стал ждать новых видео, но отвлёкся на что-то другое. Время шло, а я и не заходил ни разу в visual studio со времен уроков. Недавно мой одноклассник сказал, что у них в вузе началось программирование (как и у меня, но у нас они обучают только алгоритмам работы с фортраном (древний язык, лет 50 ему)). Он вдохновился и решил сделать что-то своё, а это вдохновило и меня, так что я вспомнил про simplecode и заглянул на канал, обнаружив тут кучу новых роликов. Посмотрел и записал ещё пару уроков и снова медленно забыл это дело из-за переживаний в универе, ведь у меня ещё задолженность с первой сессии осталась. Сейчас почти ничего полезного не делаю и пытаюсь отвлечь свой мозг ютубом и сериалами (агент картер и agents of s.h.i.e.l.d.), чтобы не думать о том, что я ни черта не понимаю мат. анализ и теоретическую механику. То ли ещё будет.
@@sungvin мечта - наркомания, цель - кто не приносит плод и кто закопал свои таланты осужден будет, делай то что полезно.
Нифига не понял этот урок(
В одном из уроков чел из коммента писал: "Мой учитель говорил, что даже если не понимаешь, всё равно пиши код. Понимание придёт со временем" - Смысл, по крайней мере такой
Спасибо!
Указатели плюсов это что-то новое для шарпа)
Спасибо большое
Спасибо !!!
Кто хочет задание какое то выполнить, попробуйте такое.
Сделайте змейку. Ставится точка, и от нее уже последующая, после последующей еще одна и.тд....
Для поворотов(Их 4) используйте методы, для методов нужно будет указывать ref, пример работы гляньте у меня) Игрался долго с такой штукой(код так же скину).
(Все должно быть в .Net Core) не фреймворк.
блин, я сейчас только на 11 уроке, решил посмотреть последний урок.... Да, надеюсб в скором времени я во всем этом буду хорошо разбираться, кстати ты клево объясняешь
Можно это интерпретировать вот так:
ref создает еще одно поле в оперативной памяти рядом со стеком, где лежат ссылки на значимые(value type) объекты. Если в голове всё представить именно так, то как и в случае с интерпретацией многомерных массивов как полок с тетрадями, всё очень легко усваивается. Надеюсь кому-то помог)
Наконец то я узнал, зачем он нужен
Ура дз))
Раза 3 пересмотрел чтобы полностью понять материал, спасибо огромное вам. Я правильно понимаю, что когда мы используем ref, то мы присваеваем переменной ссылку точно такую же, что и у другой переменной, но с тем отличием, что, когда мы будем взаимодействовать с этой ссылкой (менять её и т.д) то она будет меняться и в другой переменной, у которой мы её взяли, правильно?
🐱
Так же можно сказать, что мы копируем ссылку или само значение, но с оговоркой: типо мы сможем изменять и начальное состояние переменной.
Можно даже рассмотреть это на примере: У нас есть МакДак и в нём делают бургеры и мы решили дома сделать себе бургер точно такой же как и в МакДаке - получается здесь мы копируем только лишь бургер.
А вот если будем использовать ref, то когда мы решим сделать бургер точно такой же как и маке, то мы то сделаем его. Но если мы засунем туда какой - нибудь другой ингридиент, ну к слову БЕКОН, то этот БЕКОН появиться и в бургерах у МакДака, Верно?
Что-то так много всего написано...
"Я правильно понимаю, что когда мы используем ref, то мы присваеваем переменной ссылку точно такую же, что и у другой переменной, но с тем отличием..." - без отличия. Просто через ref передаётся ссылка. И когда мы в методе что-то делаем с этой переменной, то мы уже работает с теми значениями, куда указывает ссылка, а не с их копиями.
Хочу ответить словами киногероя по youtube запросу: Дядя Джуниор - Клан сопрано
xD придется пересматривать несколько раз)
Пришел к мнению что первый язык программирования должны быть плюсы . Хороший старт для освоения всех остальных .
Нууууу... я бы не стал начинать с плюсов. Всё-таки там очень много моментов, которые не являются интуитивно понятными. И к тому же много неоднозначностей. Шарп такие вещи сразу отрубает административными методами: "нельзя так делать, иначе тут можно понять двояко".
Добрый день! Благодаря Вашим видео легче учить С#, но все же заметил один интересный момент,подскажите пожалуйста,если Вам не сложно)
Дело в том,что когда использую структуру,то так как она не является статичной,то и метод Foo не видит её. Когда же вписываю публичные статические переменные,то метод начинает видеть их. На Вашем видео же вроде не обязательно ставить static перед переменными,когда у меня же требуется в Visual Studio. Немного не понял, почему так произошло,в любом случае с удовольствием буду продолжать смотреть Ваши видео)