Уроки C# - Расширения, Extensions, Синтаксический сахар - C#
HTML-код
- Опубликовано: 29 сен 2024
- Донаты и на кофе ➜ t.me/win10twea...
Эксклюзив для спонсоров ➜ / xpuct
Если недоступна спонсорка ➜
Форум по C#:
win10tweaker.r...
Основной канал:
/ jailbreakvideo
#Расширения #Extensions #СинтаксическийСахар #СиSharp #СиШарп
Христ ты крутой!! Открыл мне глаза)) Так можно было делать?!
Мужик, ты крут, урок огонь
Просмотрел весь твой курс, хочу сказать спасибо!
Появилось начальное понимание и представление программирования на c#, а то в моем универе преподы такого дать не могут.
Буду самостоятельно развиваться в этом направлении, ну и конечно жду новых курсов, у тебя талант доступно объяснять.
привет, прошло 2 года, есть результаты?
Напоминает создание пользовательских элементов, наследуемых от базовых))
очень круто что делаешь такие уроки) спасибо по твоим видео учу c#)
4 года обучения, а узнал об этом только сейчас... Спасибо. :
Просто чакра открылась. Конечно понятно! Спасибо большое!
Круто !!!! Не знал!!! Пойду немного подкорректирую код)))))
хороший урок, но лучше методы называть глаголами - не просто Bold(), а ToBold() - сделать жирным, как в общем-то и все дефолтные типа ToString()
То что я искал с момента как начал кодить и изучать все это!
Нету слов, одни маты как это о****но(офигенно)!
Вот где лежит оптимизация и быстрота написания
Пришел со своими инструментами, быстро все сделал и ушел.
Кайф, спасибо за этот ОЧЕНЬ интересный материал
Всё понятно, понял ещё на первом примере. Спасибо за уроки.
Теперь я смогу добавить больше вещей в свою либу
мне кажется самый крутой плюс расширений это оставлять написанные ранее классы "чистыми", не захламляя их доп. функционалом. А вообще по факту расширения это обычные статические методы, их можно писать прям в классе, но для удобства создают отдельный класс, и в методы передают 1 аргументом this, что бы вызывать этот метод прям на экземпляре, так что это синтаксический сахар.
Бляха, у меня сразу глаза загорелись, когда я это увидел. Это просто офигеть как круто. Я прям на своём опыте могу представить дофига случаев, где это могло бы пригодится.
P. S. Кст, в js это очень не плохо делается с помощью prototype.
.. и почему я раньше не видел Ваш канал, БОЛЬШОЕ уважение, восхищение калорийные лайки и главное здоровья Вам.. Спасибо за Ваши труды..
Хотелось бы понимания как это работает "под капотом", а не просто: "пишите this и будет вам расширение". Я вот понимаю под this - текущий экземпляр класса. Получается в параметрах метода можно указывать экземпляры классов? И что с этой ссылкой на экземпляр статического класса Ext делает метод дальше?
Нет, не правильно. Это именно фича и Я не знаю, как можно объяснить почему именно так.
Мне кажется, что Вы просто взяли разные this из языка и пытаетесь их сравнить. Я тоже так делал по началу, потом просто нажимаю на F1 и залетаю в справку, чтобы точно понять, что это и почему. Не всё даёт MSDN, но многое становится понятно. Если нужна природа происхождения или философия, то это уже на stackoverflow. Там обсуждают логику поступка решить сделать именно так, а не так.
ув. Хачатур привет
пояснил понятно, но наверно рано))
Хачатур, будут ли уроки по WPF ?
Всё может быть. Сначала нужно изучить Windows Forms.
@@XpucT Буду ждать. Щас пишу программу по твоим урокам, ты обьясняешь как боженька, теперь уроки других людей не воспринимаются)
@@XpucT ждем WPF! Ты лучший!
@@XpucT WPF реально нужен, пытался реализовать простенький САПР, который устанавливает связи между объектами, как в табличном виде так и в виде графических связей, но засыпался в особенностях контроллов и связях в БД. Может еще раз соберусь и попробую, но базовых представлений пока маловато.
Попробую еще раз Linq-ом все связать... или до пенсии отложу... печаль...
@@XpucT вроде win forms уже не актуален,его никто не использует
вот это крутая штука, я сразу ее понял и думал, как бы прилепить свои свойства в контролы
я там в каждом контроле хранил его порядковый номер и у него было свойство Tag, но оно строковое и приходилось постоянно конвертировать, а так я мог бы сам создать его
просто не знал, что это свойства называются и что они вообще есть
Хачатур, спасибо большое тебе за уроки! Очень просто, понятно, доходчиво объясняешь :)
Лучший вросветитель по C#! Реально круто!
Спасибо Христ, на коленке и понятно! Всех благ, побольше вдохновения и качественного материала!
Спасибо тебе! Для меня как для .NET junior developer твой канал открытие! Ты супер!
Невероятно крутая штука, прямо таки восторг. Типо действительно сложно описать зачем это нужно, но иметь такую штуку у себя очень круто. Подозреваю, что позже вернусь к этому видео :)
Кстати вот делаю програмки понемногу по урокам, кидаю друзьям, прикалываюсь, вообще весело, но вот вылетел такой прикол, который фиг знает почему не работает. В одной программе гифки в пикчбоксах запускаются как гифки, а во второй чё бы я не крутил, не запускаются и всё. Статичная картинка. С такой грустью отправил как финальную историю, но вот может знаете как его исправить, чтобы в будущем знать куда кликать, чтобы запускалось нормально.
оч круто рассказал! Спасибо большое за урок! Как раз делаю лабу, и в ней эти расширения просто незаменимы
Готовлюсь к экзамену по вашим видео)) Спасибо за то, что вы делаете!
Очень крутая штука!)
Да, отлично объяснено. Это действительно крутая штука, которой буду пользоваться неоднократно!
Спасибо, въехал в тему )))
очень круто и полезно.
Давай урок по dll и плагинам)
Почему я раньше не нашёл это видео? Просто топ! Сейчас решил написать программку для раздачи wifi, благодаря твоим видеороликам сделал такую штуку, чтобы программка показывала количество подключенных устройств и их mac адреса. Большое спасибо)
кому интересно ссылка на проект
yadi.sk/d/_nJ5tAN9ENMJKw
в папке release лежит готовый .exe'шник
Шикарно 👏
Жаль что проект удалили (
Классно очень классно и понятно. Такие уроки прям супер. Жаль что ваш канал нашёл только спустя 2 года обучения C#.
Top!!!!!
Буквально вчера дошел на Metanit до расширений и совершенно не осознал профита от их использования. Ваше видео полностью перевернуло мое представление. Спасибо!
Век живи, век учись. У меня куча таблиц в окнах и перед динамическим созданием каждого окна, я создаю почти одинаковые настройки таблиц строк на 20 в каждом окне. Я же могу создать расширение с настройками и вызывать метод у свеже созданной таблицы. Не догадался. Хотя расширения юзаю давно. Сделал интересную штуку: например в контролах есть поля Location и Size, а у меня это ещё и методы. Вместо button1.Location = new Point (960, 540); я пишу: button1.Location(0.5, 0.5); и левый верхний угол кнопки будет по центру при любом разрешении экрана с учётом того, где находится полоска пуска: внизу, вверху, сбоку или скрыта и за вычетом хед бара с крестиком и полоски меню.
Все...меня уволят...останусь без роботы... не знал этого. Очень круто.
Пришел сюда, что бы вспомнить синтаксис. И заодно написать, что никогда бы не подумал, что когда то меня припрет написать подобный метод :)
наааайс, пушка Броо)
Если например я делаю несколько расширений то получается для них надо создать отдельный class? ....
Хачатур, вопрос на миллион, покажи пожалуйста, как менять иконку любого файла, получив его путь и выбрав заранее заготовленную иконку ?
Иконку файла? Перефразируй.
@@XpucT Ну вот лежит у меня на рабочем столе например екзешник, как мне по нажатию кнопки присвоить этому екзешнику иконку из моего списка ? Или например, я создаю файл командой File.WriteAllByte(path, byte[]) как мне к этому файлу приделать значок ? может есть что то типа (File.Icon = my icon) ?
@@Happy_Ted крутая задачка однако =))Далеко зашёл Ты =))
Попробую глянуть.
@@Happy_Ted вижу, что проще воспользоваться сторонними ресурсами, чем писать своё:
angusj.com/resourcehacker/
@@XpucT это я все заню про ресурс хакер, нужно свое, иначе зачем жить ?
Круто. Спс.
Тараторишь много
Удобная вещь, а в других языка такое присутствует?
Вот эта инфа! Огромная благодарность, то что нужно. Особенно при создании своих собственных элементов управления.
Хочу отдельно поблагодарить за win 10 tweaker, не могу представить как я жил без этой программы. Есть вопрос сам интерфейс твикера сделан на вин формах?
Всё полностью на Windows Forms 😇
@@XpucT еще один вопрос давно хотел узнать. Что у вас за тема папок, синии очень приятные глазу
@@coffeebydny393 ruclips.net/video/gb3DMe5OJBg/видео.html
Надеюсь автор найдет время и будут еще ролики о c#. ) Каждый ролик заменяет несколько глав из заумных книг. )))
Всё будет ;)
Спасибо за уроки. Все доходчиво и внятно. Пожалуйста, если можно сделай урок про рекурсивные методы
Гораздо понятней, даже чем в код блоге
привет. win 10 tweaker на каком языке писал?
Спасибо
Огромное спасибо за отличные уроки: сложные вещи объясняешь быстро без нудятины и человеческим языком.
это же можно таким образом смену языка и настроек реализовать еще, прописать все варианты, и потом просто переключать их через расширение. Шикарно :)
ВОТ ЭТО НИФИГА СЕБЕ! СПАСИБО ОГРОМНОЕ! ОЧЕНЬ НУЖНАЯ ВЕЩЬ!:3
Я уверовал в Господа.
Лють, кулл!
да, удобно, понятно - класс
привет! есть возможность с тобой связатсья?
очень понятно, разборчиво и доходчиво, но я не понял))
У тебя крутые уроки. Ждём WPF.
Как люди могут не понимать зачем это нужно? Постоянно пишешь одно и то же, работаешь с одним и тем же и в каждом новом продукте/задаче пишешь одни и те же методы. Догадывался что такое возможно и хотел сделать, но никак не мог найти. Огромное спасибо!
Что то сахарку захотелось))
Спасибо за уроки , объясняете всё очень доходчиво !
з.ы Немного не по теме, но всё же спрошу, так как Вы автор твикера и скорее всего хорошо знаете внутренности винды :)
Проблема в 10 -ке есть, память(RAM) забивается под 99% за сутки. Вы не сталкивались с таким? Если да, то случайно не знаете как решить эту проблему.
Какое-то приложение не сбрасывает свой кэш или висит в памяти.
Тут, как обычно, поможет Win 10 Tweaker и его виджет очистки оперативной памяти.
Да, +- понятно. Полезная штука.
Хм....почему мне удалось это расширение вызвать вот так:
private void button1_Click(object sender, EventArgs e)
{
Ext.Bold(label1);
}
}
public static class Ext
{
public static void Bold(this Label label)
{
label.Font = new Font("Rubik", 9.75F, FontStyle.Bold);
}
}
....но все равно это расширение да....потому что ....this ?
Покажи как работать с длл
Добрый день, Хачатур! Хороши видосы)) хотел бы узнать будет ли видео на тему создания апдейтера программы (например по FTP)?
Обязательно будет. Это один из тех туториалов, которого не может не быть 👍
Мне кажется не самая хорошая практика.
В чем суть, вот ты понаписал своих методов расширений, запихнул их в либу и таскаешь от проекта к проекту. Берет твой код другой человек, он знает фреймворк, он знает как работает то что ему надо, но он не знает что это за какой-то ValMax, он должен сидеть и гадать, тыкать палкой и играть в Вангу, а если ты ушел уже из проекта и исходников твоей библиотеки с расширениям не осталось, то в случае если ты там чего-то нехорошего неделал, оставшиеся работать в проекте вынуждены будут это все выпиливать ручками.
Конечно, для своих поделок на коленке можно писать как хочешь, но делая что-то серьезное, нужно понимать, что ты не один в команде, люди занимаются отдельными частями проекта, а ты, скорее всего, таки уйдешь из проекта и твое желание написать меньше аукнется тому кто дальше с этим кодом работать будет.
Это возможность. И как её использовать и кому - это уже другой вопрос. Это как goto. Если бы не нужен был, его бы убрали или не делали. Поэтому не обязательно примерять всё на личной ситуации. Я лично разраб-одиночка. Мне никто не помогает, никто код не знает. Всё своё, всё для себя. И это удобно. Для крупных компаний есть классы, которые одни могу читать, другие нет, всё просто. И там как раз расширения. Просто представь, что у кого-то всё держится на анимации. И каждый раз костылять это... Проще иметь фирменное расширение.
Здравствуйте Хачатур!
Извините,что не по теме. Можно вас попросить снять обучающее видео по Virtual Box. Как правильно пользоваться,настраивать,устанавливать системы и сохранять все изменения в виртуальной машине. Понимаю,что таких видео на ютубе хоть пруд пруди но лично я вам как-то больше доверяю и хотел бы научиться пользоваться данной программой с вашей помощью. Спасибо!
Добрый день, Рома ☀
В Уроке 1 как раз рассказывал обо всём, что нужно знать в VirtualBox.
ruclips.net/video/MGypxPUNtWk/видео.html
Спасибо большое Хачатур! 👍
Прошу прощения за мою невнимательность. Что-то с памятью моей стало.
Прошу прощения за беспокойство. Можете мне объяснить, почему при создании виртуальной машины в списке систем у меня только 32-х битные системы? В данный момент моя основная система 64-х битная и оперативной памяти у меня 8 гигов.
Откуда Вы брали VirtualBox?
С оффсайта.
Помоему или процессор не поддерживает виртуализацию или может в сборке винды дело.
Это конторский компьютер с Intel Pentium Dual-Core E5200. Хотел на нем поиграться с Virtual Box но видно не судьба.
как сделать так что-бы при наведение на любой контрол под курсором появлялся текст если не трудно в конце следующего видео покажи )) ps спасибо за видео!
В следующем после потоков 👍
Очень доходчиво и в приятной атмосфере, спасибо!
Шикарно !
Подсажите пожалуйста в чем проблема?! У меня не срабатывает расширение. Подчеркивает красной Ext, при наведении на него пишет: CS1109: Методы расширения должны быть определены в статическом классе верхнего уровня, Ext является вложенным классом. Все повторяю точно, вроде ошибок нет, не понимаю что нужно делать.
Ответ в ответе =)
static забыл?
@@XpucT где именно? пробую c Bold тоже самое =(
public Form1()
{
InitializeComponent();
}
void Button1_Click(object sender, EventArgs e)
{
label1.Bold();
}
public static class Bld
{
public static void Bold(this Label label)
{
label1.Font = new Font("Papyrus", 9.75F, FontStyle.Bold);
}
}
Вопрос (не по теме видео):
Я в последнее время часто работая с БДшками, и у меня вопрос, как правильно структурировать программу?
Ну, допустим, есть несколько таблиц, они связаны некоторыми полями между собой. Как я обычно делаю: просто создаю формочки с полями ввода (textbox-ы, datatimepicker-ы, combobox-ы ну и т.п.), в коде у них создаю поля (как в табличке БД) и пару функций, что выполняют запросы к БД.
Стоит ли структурировать код как-то по другому (например вынося все таблицы из БД в классы C#) или мой подход нормальный?
*Заранее спасибо за ответ
Чем больше кода, тем больше хочется, конечно, раскидать всё по классам.
Я считаю, что это вкусовщина и каждый кодер сам выбирает, когда уже пора =))
ты опдошел к тому порогу, когда нужно изучать паттерны проектирования и паттерны программирования, чтобы разделять код форм от кода логики софта и еще там будет код, который связывает эти 2 сущности
все это называется mvc mvp mvvm
правда я нигде не нашел годных курсов, где бы создавалось приложение с нуля по такому шаблону
@@kalobyte годных курсов действительно нет, поэтому найду время и сниму на канале.
Проблема в том, что очень сложно эту паутину с чего-то начать. Снимают и учат все, а толку ноль.
Я-то уже знаю, в чём проблема объяснения MVVM - паутина. Но думаю, что найду время и распутаю её, чтобы было всё последовательно.
@@XpucT
учат неправильно потому что
я недавно нашел ответ на вопрос по этому поводу и это было как дар с небес
теперь вот жду, пока автор курс платный сделает, но он по пхп, а пхп мне тоже пойдет
вот тут дан ответ в 3х роликах
ruclips.net/video/ibVp1ZQtiDs/видео.html
ruclips.net/video/BNbEJHi-aFs/видео.html
ruclips.net/video/3UG61JvgW2s/видео.html
Очень понятно, спасибо
Есть вопрос.
Будут ли расширения написанные для одного базового класса видны у класса наследника?
Надо пробовать. Вроде, как должен.
А как написать расширения для своей программы? Ну по типу плагинов?
А поконкретнее?
@@XpucT например у notepad++ есть поддержка плагинов(Converter, MIME tools). Я хотел бы узнать, как можно сделать поддержку плагинов для своей программы.
Например, грамотно реализовать калькулятор(обычный), и плагин для перевода из dec в hex(чтоб его отдельно можно было скачать и просто в папку рядом кинуть,напримпр) .
красиво