Это копия, сохраненная 15 марта 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
1. Ресурсы:
— https://dotnet.microsoft.com/learn
— https://ru.stackoverflow.com/a/416585/422180
— https://metanit.com
— https://professorweb.ru
2. С# для веб
— https://docs.microsoft.com/ru-ru/aspnet/core
3. C# для десктопа
— https://docs.microsoft.com/ru-ru/dotnet/desktop
4. С# для игр
— https://ru.stackoverflow.com/a/609901/422180
5. С# для мобильной разработки
— https://docs.microsoft.com/ru-ru/dotnet/maui
6. Годные ютуб-каналы
— https://www.youtube.com/c/CODEBLOG
— https://www.youtube.com/c/AndreyShyrokoriadov
— https://www.youtube.com/c/DevJungles
— https://www.youtube.com/user/Shmachilin
Шапка: https://pastebin.com/HT7Hi6FD
Прошлый тред: >>2551587 (OP)
Паджит, съеби из тренделя
Где тег?
Ну есть решарпер для тех, у кого много денег и рабочая станция с 512 Гб оперативки, 28 ядерным 6 ГГц процессором и 6 Тб NVMe SSD RAID 1 (иначё всё тормозит).
А есть беспланые аналоги для отдельных функций решарпера. Я их юзаю.
>решарпер
Зачем нужно это говно? Студия и так из коробки жопу подтирает настолько усердно, что опасаешься дырок. Куда еще сверху накатывать жопоподтиралки-то?
>А есть беспланые аналоги для отдельных функций решарпера. Я их юзаю.
Напиши про них, пожалуйста. Для решарпера у меня машина соответствует, но оплатить не получится
Крч, мож посоветуете книги какие-то годные, лайвкодинг канал какой актуальный ну или туторы где посмотреть, ну или где бы с рынком как познакомится на этом языке. Я совсем уж зелёный.
На сайте микромягких все разжевывается донельзя. Про книги - хз, мне кажется, и на джаву, и на условный пайтон можно найти говносправочники. Кажись, ты просто не там ищешь попробуй заглянуть в шапку
.NET коммьюнити наиболее дружелюбное, еблан. Особенно если с вебмакаками сравниить.
Ощущаю себя попущеным. Тестовую задачу солвер решает за 164 хода, а у пацанов оптимальное решение 52 хода. Хрен бы с оптимальностью, но решение занимает 700 строк кода. Это длинее чем у ассемблера, лел.
Даже не знаю выкладывать этот говнокод или нет. Он какой-то со всех сторон сомнительный. Одно радует, что я до него сам додумался. Свое не пахнет.
Ну хз. У вебмакак вот такое нашёл https://github.com/rolling-scopes-school/tasks/tree/master/stage1 , теперь сижу у них в чатике спрашиваю вопросы и, с поиском любой инфы, с учебниками(на ютубе кучу туториалов) ноль проблем. А вот в сишарпе даже группу в условном вконтакте по нему хуй найдёшь.
кстати майки наконец то додумались сделать UnreachableException
хз. теперь 2 треда. вместо того чтобы создать нормальный тред, приходится сидеть в тонущем треде и в том, которое не тонет )
а во вопросу - ну со студией 22 все не очень же работает потому приходится юзать то что работает
решарпер понятное дело
supercharger ...и все в общем то (и то нужна лишь малая часть его функций)
ozcode не работает толком
stop on first exeption не работает
всякие дамперы тоже криво работают
визуалайзеры тоже никак
в общем так и живем
>А как их учить то?
В большинстве случаев, такие вакансии это легаси, требующее либо поддержки, либо переписывания на более актуальный стек. И туда из нормальных разрабов мало кто идет, поэтому если действительно хочешь, то смело вкатывайся и тебя на месте всему научат.
Ищи рефлексией по сборкам
>stop on first exeption не работает
Хз о чем ты, но в настройках студии есть список экзепшонов, на которых она останавливается и показывает тебе сообщение
Не делай этого, это очевидный симптом говнокода.
Ты инжектишь абстракцию, в виде интерфейса, который выполняет одну задачу. И можешь свободно подменять имплементации, изменяя таким образом поведение.
Код, куда ты инжектишь, не должен ничего знать о конкретных типах своих зависимостей.
об удобном способе включения выключения этого одной кнопкой
чтобы попав на первое исключение можно было тут же выключить и нажать продолжить, а не стопаться на каждом rethrow
Аналогично и включить ибо постоянно включенное не гуд. Помнится мне было дело как где-то в чем то мелкософтовском сделали подргрузку необязательных либ через try..catch. В итоге запускаешь и бац стоп, стоп, стоп, еб...й стоп. Им даже на гитхабе написали "да епрст сделайте TryLoad". Ответ был вроде "а мы хотим так". Не знаю чем дело кончилось, не следил, но вроде бы прислушались к голосу разума.
Сейчас для этого дела нужно постоянно лезть в окно исключений и держать его открытым. Вместо удобной кнопки.
Звучит как что-то нинужное, если честно. Хотя у меня код миллионом исключений не стреляет.
разработка
отладка
остановка на первой ошибке
"что-то ненужное ага" )))))
ведь так приятно читать стектрейс чтобы понять где оно случилось вместо того чтобы просто быть на месте сразу
ну да ну да.
>>66643
Да я тупанул. У меня в базе есть метод, который переопределяется в потомке. Я подумал, если я обращаюсь к базовому классу, то он выполнит метод в том состоянии, в котором он там находится. Оказывается, что выполняется в переопределенном виде.
>Не делай этого, это очевидный симптом говнокода.
>И в целом наследование это рак, не пользуйся им
У меня 80% кода одинаковые и только часть уникальная. Через интерфейс не выйдет.
Если твой код при запуске выстреливает десятком исключений, то это повод задуматься, может ты что-то делаешь не так.
Ставить расширения, которые, по сути, поощряют плохие практики, такая себе идея.
у тебя мухи идентифицируют себя как котлеты.
>выстреливает десятком исключений
1. во время разработки код может выстреливать хоть сотней исключений. на то она и разработка. даже если ты пишешь через тесты, то первый шаг - тест должен упасть.
2. это не значит что выстреливает сотнями. достаточно и одного, который возникает. Кода без ошибок не бывает (особенно на этапе создания этого кода)
это дебаг-фича для разработки как никак.
>по сути, поощряют плохие практики, такая себе идея.
какие плохие практики? использовать отладку в IDE????
Вылетающее исключение вылетит так или иначе. Разница в том, откуда ты будешь выцеплять его источник - читая портянку стектрейса (попутно получив все сайд-эффекты) или поймав его сразу на месте.
Эта фича настолько "плохая" что встроена во все IDE всех языков что я видел (исключая разные блокноты), просто не включена под дефолту по понятным причинам.
Ты давай еще дебаггер плохой практикой назови типа крутой кодер должен сразу писать без ошибок и такие кодеры должны быть все в мире (ведь и либы не должны генерить исключений даже если это штатно))))
ps: плохая практика - вот как в WPF глотать исключения, где эта фича особенно хорошо себя показывает
>хоть сотней исключений
Тыкать дебаг после написания каждой строчки кода - плохая практика, демотивирующая разработчика думать.
>тест должен упасть
Падающие тесты не выбрасывают исключений.
А вообще смысл твоей простыни от меня ускользает.
Для единичных исключений хватает встроенного функционала студии.
Десятки исключений твой код, как я понял, не выбрасывает. Получается, что экстеншен нинужен, как я и писал.
>Тыкать дебаг после написания каждой строчки кода
как разработчик хочет так и делает - раз
вот ты разработчик, вроде бы в логику умеешь - хз как ты из моих слов сделал вывод о "тыкает после каждой строчки кода".
в остальном у тебя явно хз какое понимание в голове
какие еще десятки исключений. откуда вообще такой глупый вывод я не понимаю.
летит одно исключение и попутно оборачивается в другие. Это вообще из best practices если что.
а теперь о том когда может вылететь исключение
1 при разработке легко. написал кода (сколько угодно, слова про "строчка и запуск" бредятина) запустил посмотреть результат работы - бац неожиданное исключение.
уже на этом можно и заканчивать собственно...можно и не упоминать очевидные штуки как регрессии либо баг реквесты где поймать исключение само собой цель
>Получается, что экстеншен нинужен, как я и писал.
в чем ты вообще пытаешься меня убедить? что тебе не нужно? ну так и проходи мимо. Мне вот нужно, мне нравится когда при неожиданном исключении (а других у меня и не бывает) мой код в отладке сразу останавливается в этом месте и я могу сразу увидеть контекст при котором возникла эта ситуация.
Это как дамп при ошибке - создал дамп, открыл в студии и ты находишься в ситуации когда все видно
да блин это очевидные вещи я рассказываю.
некоторым удобно и в блокноте писать и в консоли дебажить. и что с того - это их путь, пусть пердолятся как хотят. А те, кто хочет удобства...ищет удобства.
некоторые сидят на голой студии и им норм
а другие ставят решарпер и радуются жизни
или вот такую штуку
https://marketplace.visualstudio.com/items?itemName=CodeValueLtd.OzCode
и искренне удивляются почему сама студия такого не предлагает
почему в голой студии все так убого
я на 19 сижу
А хули ты хотел? Петушарп!
Вот это коупинг обезьянки майков. Рыгнул тебе в ебальце.
Говнотреду говношапка. Терпи, омега.
не знаю как он, а я вот жду билд авалонии где они cleartype типа пофиксили
а они как специально сделали последний билд 11 ноября и тянут резину.
>или вот такую штуку
>https://marketplace.visualstudio.com/items?itemName=CodeValueLtd.OzCode
Блин, посмотрел - с виду клевая штука, но в 2022-й студии не пашет.
ну они выпустили билд для 22 (на оффсайте можно скачать), но по факту это альфа, а значит с проблемами
и раз за год не было обнов и в маркет не попало и вот выдали вечный ключ - значит в эту сторону обнов не будет.
Я как раз ее и попробовал. Основная фишка с дебагом и раскрытием LINQ как раз и не пашет. Просто не раскрывает выражение и все.
там 70% не пашет и это бы еще ладно, но через несколько запусков дебага будет зависать
Где-то на хабре читал, что в переводе сильно накосячили. Куча опечаток, вплоть до листингов кода, так что примеры не собираются. Так что читать только на английском. А так вроде норм.
Понятно что на ангельском. Последнего издания мб и нет даже на русском.
Да, шарп это жалкая попытка в Java, скорее даже неудачная попытка. В итоге ни то ни сё, ни в играх не преуспел, ни в вебе, ни в мобилках.
>ни в вебе, ни в мобилках
Звучит как похвала.
>ни в играх не преуспел
Юнити самый популярный игровой движок.
Популярный, да, среди разрабов говнины и ссанины. Даже тарков это кал из жопы.
Теперь назови мне хоть одну годную игру, написанную на юньке. Вот пример: Perfect World, Mass Effect, Spore, Civilization, The Witcher 2-3, дока, лол и т.д
В общем продолжать можно бесконечно, ни одной игры на юньке в топе нет, а твой "популярный" тарков забудут через пару лет навсегда.
А на джаве написана самая популярная игра на планете - Minecravt. Чтоб ты понимал что к чему в этом мире, дружочек! Так что не надо слов, просто смирись что ты девелопер на языке-типакрутом-пофакту-позорнике-копипастере.
2:11
Посмореть на получившегося монстра:
https://rosettacode.org/wiki/15_puzzle_solver#C#
Еще записал видосик с бодро ебущимися пазлами джаст фор фан.
>Теперь назови мне хоть одну годную игру, написанную на юньке.
>ни одной игры на юньке в топе нет
Cuphead
Cities: Skylines
Hearthstone
Totally Accurate Battle Simulator
0ri and the Blind Forest
Endless Space
Subnautica
Pillars of Eternity
Hollow Knight
Beat Saber
Phoenix Point
Тот, который в танки раньше играл?
А как назвать похожий метод, если он должен выводить ошибку в консоль, а не выбрасывать исключение? На пике примеры.
if (CheckIf...) - получается тавтология, но лучше пока не придумал.
>>67582 (Del)
А нормально в каждом методе устанавливать Try для логгирования?
Если в основном методе указать, то он не покажет цепочку ошибок.
Как вообще отследить почему у пользователя возникает ошибка?
Try имеет смысл использовать в двух случаях на мой взгляд:
- Если ты хочешь дополнить возникшее исключение (то есть создать новое на основе возникшего)
- Если ты не хочешь прерывать выполнение код и эксепшен был для тебя ожидаемым
> Как вообще отследить почему у пользователя возникает ошибка?
Просто логируешь все основные действия с уровнем Warning/Information.
>Просто логируешь все основные действия с уровнем Warning/Information.
А что это такое?
Программа же ведь может думать, что нормально работает, а потом ей в функцию прилетает какой-то параметр и эксепшин не говорит какой именно и я не могу проследить каким образом этот параметр образовался.
Нет никакой штуки, при активации которой включалось бы что-то вроде режима отладки только в текстовый файл?
Логи могут сохраняться в файл и даже отправляться на сервер. Тут уже от тебя зависит.
Просто записываешь в логи "пользователь нажал туда", "программа сделала это" и так далее. Если возникнет ошибка, то ты увидишь, что к ней привело, прочитав лог-файл.
Зависит от того, что ты хочешь создавать. На шарпе можно создавать игры, бекенд и софт под винду.
Получается выбора нет?
Я х.з. как там в джаве, но по шарпу у меня сложилось стойкое ощущение, что где-то половины вакансий по нему на открытом рынке труда вообще нет. Что два года назад, что сейчас если на hh (или еще куда) залезть, то по сути лежат огрызки вакансий какие-то (многие годами). Но с другой стороны меня сейчас при наличии имеющейся нормальной работы, активно зовут на несколько неплохих проектов, на которые в принципе достаточно стронг-джун / мидл-минус уровня. Хоть на постоянку, хоть на совмещение. И просят еще с собой кого-нибудь привести, т.к. нормальных разрабов не хватает.
Ну т.е. вкатится с нуля сейчас сложнее чем на джаве. Но если ты уже влез и закрепился, поднял хоть немного связей, то процесс поиска в разы облегчается.
Бэкенд, поэтому и сравниваю вакансии C# ASP.NET с Java Spring.
А если уже на пол-шишечки?
Я х.з. честно говоря не очень много таких свитчеров встречал. Ну и у них уже был как минимум опыт работы на проекте с шарпом. Ну т.е. не просто чел в один момент решает "а пошло оно, нахуй джаву, завтра пойду в шарп". Обычно это уже чуваки с приличным опытом, которые на предыдущей работе успели как минимум год-два посовмещать несколько проектов на разных языках и решивших, что в другом стеке им комфортнее. Вот таких берут.
Ну у тебя как будто остальные проблемы решены.
>Если я после джава скрипта привык открывать скобки на той же строке
Хорошая привычка. Студия правит, но она дура.
А еще хорошо бы закрывающую скобочку тоже оставлять на той же строке. Не ничего хуже висящей скобочки на всю строку.
>И обязательно имена методов с большой буквы именовать?
Религия не позволяет? Так же обязательно как с писать большой буквы начало предложения в комментариях. Почему ты не написал с маленькой?
>И обязательно имена методов с большой буквы именовать?
А как ты напишешь имя функции, состоящее из двух слов и больше? через_нижний_прочерк?
>сильно сложно будет перестроиться
Я летом пришел на проект где кодстайл был настроен был а-ля джава, т.е. как раз со скобкой на той же строке. Первую неделю подгорал немного, а потом похуй стало. Он менее удобен в шарпе визуально, т.к. сложнее визуально отделяь сигнатуру метода от его тела, но по большому счету похуй, т.к. все равно студия сама все расставляет.
Сейчас параллельно работаю над несколькими проектами где и так и так используется, и вообще не замечаю разницы.
>сильно сложно будет перестроиться?
пишу на нескольких языках и в каждом из них использую тамошние правила
к этому привыкаешь. по глазам бьет как раз обратное
Не, я имею в виду PascalCase (C#) против camelCase (JavaScript). Первый как то вообще дико смотрится после жс. Ну а открывающая скобка на новой строке это просто трата места.
Да, да, можно милилон аналогий привести. Для меня например висящие скобки выглядят как распахнутые ворота, мешающие на тротуаре.
>Ну конечно, байты и строки нынче дорогие.
высота экрана дорогая.
мониторы 16 на 10 умерли
и остались только танковые щели.
я ценю выразительный код, который влазит в экран
а тут "кооменты, название, скобка, ни о чем ни о чем, скобка, новая строка" (повторить пару раз ) = экран закончился.
Так как комп рабочий, это не вариант. Чем можно заменить VS, eclips пойдет? Или что-то другое?
в утонувшем спросил, теперь тут
>высота экрана дорогая.
Есть две вещи на которых разрабу не стоит экономить. Нормально кресло и хороший большой монитор.
Стандартный 16:9 при размере 28'' в FullHD уже спокойно позволяет кодить нормально не заморачиваясь с высотой, т.к. половины экрана хватит на код, а во вторую всякую дополнительную инфу можно поместить. Ну либо вообще на 90 градусов повернуть.
Visual Studio Code
Мб VS code?
И какой именно стак учить чтобы вакансии были? Украина если важно. Мб с фронта начинать и в фулстек пытаться?
> какой именно стак учить чтобы вакансии были?
Либо бекенд (asp.net core). Либо геймдев (unity3d).
>Украина
Да, начинай с фронта, а там уже пiхуй будет.
Мне вот руби нравится, тут вопрос действительно актуальный: найду ли я себе работу? Поэтому параллельно изучаю шарп и для полноты картины и для увеличения шансов на работу.
Мб потом полностью переключусь на какой-то один язык/стек, пока поровну по 2 часа читаю, изучаю и тот и тот. Интересно шо пизда. Вчера всю ночь не мог оторваться, всё читал, гуглил, уснул только в 10 утра.
Да сорян цифрой ошибся. На 28 уже наверное 2К нужен. Я изначально хотел сказать 24 дюйма на фуллХД. На таком вполне комфортно работается.
На руби вакансии хотя бы есть, хаскель мне еще больше нравится, но я все-таки отговорил себя, вакансий на нем 5-10 в год.
Ну да, чем больше пул, тем больше шансов. Можно в пхп, пайтон, руби, шарп, джаву, сипипи сразу вкатываться, но человеческого ресурса не хватит.
А нехуй постоянно таскаться куда-то. Организуй себе рабочее место и там сиди.
Ну так-то 2К23 на дворе. Сейчас для вката нужно очень глубоко в тему погружаться, так что ни на что лишнее времени не останется. А с поверхностными знаниями двух языков ты ни там, ни там не нужен будешь.
ну это нужно любить руби и рор, ведь руби === рор.
лично я когда то любил руби за его дикую динамичность и DSL, но в итоге накушавшись "нихера не понять что есть в классе, можно понять только в рантайме " свалил на шарп и теперь приемлю только языки с типизацией, где IDE может помочь, а не играть в угадайку.
Безусловно, если каждый день юзать одни и те же гемы и задачи, то будешь просто помнить чего где, но это все равно на любителя.
ага в наше время сидеть на одном месте )))
а если серьезно то это ж просто дичь
void MyFunc()
{
if(...)
{
...
}
else
{
}
if(...)
{
...
}
else
{
}
}
вместо
void MyFunc() {
if(...)
...
else
...
if(...)
...
else
...
}
А-а-а-а-а-а-ааа аж трисет от такого. А еще ж там коменты у метода будут )
ага в наше время сидеть на одном месте )))
а если серьезно то это ж просто дичь
void MyFunc()
{
if(...)
{
...
}
else
{
}
if(...)
{
...
}
else
{
}
}
вместо
void MyFunc() {
if(...)
...
else
...
if(...)
...
else
...
}
А-а-а-а-а-а-ааа аж трисет от такого. А еще ж там коменты у метода будут )
Так 2 языка это норм. Люди же учат пхп/лара + жс/вью. А тут тем более руби, сильно отличается от шарпа, еще проще запомнить.
У стиля Олмана (открывающая скобка на новой строке) есть несколько преимуществ, которые с лихвой перебивают мнимую экономию строк.
1) Визуально четко отделяет сигнатуру метода, от его тела. Особенно это заметно в конструкторах.
2) Скобки четко очерчивают область видимости. Глаз проще зацепить комбинацию скобка+скобка, чем строка_текста + скобка
3) Намного проще выделение отдельного блока кода при редактировании (не нужно искать где находится открывающая скобка. Т.к. гораздо чаще необходимо это делать именно для тела без сигнатуры или оператора которому блок принадлежит.
1 чушь. отступ прекрасно выполняет эту работу.
2 смотри пункт 1
3 вообще не понял о чем это
пара замечаний
1 в других языках где не используют скобку с новой строки - ну вообще не страдают "ай как плохо читается". и я тоже не страдаю.
2 в шарпе есть экспрешен методы, которые как бы нарушают все твои три пункта. интересно зачем их добавляли если оно рвет удобство
Тут же вроде везде дот нет фреймворк, нет? Сильно отличается от нет кора? Или это теперь одно и то же?
.NET 5 это уже кор.
В шарпе в каждой версии всё переделывают. Версии выходят каждый год, а книги с запозданием в 3 года.
Хочешь стабильности - изучай джаву.
>в других языках где не используют скобку с новой строки - ну вообще не страдают "ай как плохо читается". и я тоже не страдаю.
Я не говорил, что одно "плохо читается", я говорил, что "одно читается лучше другого". Мне сейчас приходится работать и с тем и с тем стилем, но когда у меня доступен выбор, я выбираю Олмана.
>>68184
>в шарпе есть экспрешен методы, которые как бы нарушают все твои три пункта. интересно зачем их добавляли если оно рвет удобство
Нихуя они не нарушают. В большинстве своем это однострочники, в случае же если нужно больше одной строки, то тело метода так же ограничивается скобками.
1280x720, 0:07
Ведутся, значит заслужили такой участи. Фигурные скобки, охуеть вообще, сложно придумать наброс толще. И всё равно ведутся.
>>68215
так то вполне нормальный спор. это тебе не табы с пробелами. и похер кто набросил - ведь факт проблемы реально есть.
стоэтажные скобки где скобки занимают больше строк чем сам код - реально раздражает такое читать. Просто неудобно
вон у питонистов никаких скобок нет, одни отступы - проблем нет.
Нет никакой проблемы. Вот реально вообще похуй, где блядская фигурная скобка стоит, через пару дней перестаёшь замечать. Это какой-то бзик на скобках надо иметь, чтобы сначала смотреть не на переменные и вызываемые методы, а на скобки ебаные. Спокойно переношу открывающую скобку, когда пишу на шарпе/плюсах или оставляю на той же строке, когда пишу на жабе или тайпскрипте.
> вон у питонистов никаких скобок нет, одни отступы - проблем нет.
А вот у питонистов как раз проблем дохуя. Там и IndentationError, и невозможность сделать автоформатирование при копировании кода, и отсутствие do-while и многострочных лямбд из-за того, что не вписываются в синтаксис с отступами. Зато хеллоуворлд выглядит компактнее, это да, охуеть как важно.
О, круто! У меня появился уже один подписчик на ранний доступ!
В честь такого знаменательного дела выкладываю роадмар проекта.
PUZZLE V3.0
- Система нативных плагинов для солверов. Игрок сможет выбрать солвер который будет решать игру за него. Из коробки доступен тормозной и неоптимальный C#-солвер.
- В магазине приложений станут доступны солверы на С++ и чистом С решающие задачу за лучшее время оптимальным способом.
- Открытое API по стандарту RFC для релизации своего солвера.
PUZZLE V4.0
- Улучшеная графика игры для разных уровней пользователей.
-- Бесплатная версия - стандартные винформы на сером фоне.
-- Бронзовая подписка - На пазлах появляются пастельные пейзажи разных мест.
-- Серебряная подписка - На пазлах появляются голые 3д девки.
-- Золотая подписка - На пазлах появляются аниме 2д девки.
-- VIP под заказ - Возможность устанавивать на пазлах свои картинки.
да пиши как хочешь. проблема не в писании, а в чтении
когда смотришь чей то код, а там как на пике.
такая херня только мешает, а не помогает.
если убрать нахер все скобки - читабельность только улучшится, но "не по гайдам"
>А вот у питонистов как раз проблем дохуя
я не хочу вступать в этот спор. это не питон тред. скажу лишь что все эти проблемы сильно преувеличены. и как бы вообще не проблемы.
и да - компактность тоже важна. не стоит искусственно сужать контекст показывая "вот смотри маааленькую часть")
>если убрать нахер все скобки - читабельность только улучшится
А еще пидорские отступы. И пробелы. Нормпосаны пишут в одну строку, ибо нехуй засирать код битами бесполезной информации.
нет. только скобки.
я повторюсь - по дизайну языка питон этих пустых строк со скобками нет в принципе, а питон при этом один из самых популярных языков и не в последнюю очередь из за читабельности.
А у шарписта чет "глаз без скобок не понимает где что"
>>68309
скажи, чего ты пытаешься добиться ковыряя пазлы? умение изобретать алгоритмы? оно нужно только на олимпиадах.
>стоэтажные скобки где скобки занимают больше строк чем сам код - реально раздражает такое читать
ну братан братишка brother если у тебя столько скобок образовалось в одном месте то наверное присядь задумайся а что за хуйня у тебя там творится и начинай разделять
самый обычный код. просто отформатированный по гайдам - а значит добавлены куча ненужных скобок на if, скобки на блоках вида try..catch только вот так многострочно и тому подобное.
В джава-треде уже полгода какая-то петушня и клоунада, даже не хочется туда заходить. Сижу здесь, играюсь с шарпом, хоть на работе жаба.
>скажу лишь что все эти проблемы сильно преувеличены
Нет, это то же самое как обертки оберток фабрик в жабе. Нужно для корпорастных галеромакак, чтобы можно было вставлять код куда угодно и ничего не ломалось. Без скобок поломается код.
Смотри, конгда есть скобки, ты просто не думая пихаешь строчки и всё заебись, а без скобок, тебе придется анализировать код и при необходимости расставлять скобки даже в тех местах, где не твой добавленный код, короче лезешь куда не надо делаяя лишние модификации создавая угрозу новых ошибок. Короче, эта хуйня совершенно оправдана для конвеерного производства кода в галерах.
>ты просто не думая пихаешь строчки и всё заебись
Ну так, а не в этом ли весь поинт? Нахуй мне на работе думать еще. Я делаю свою задачу за 1...2 часа из 8-ми положенных, а дальше могу чилить как хочу. Хоть так же идти и писать говнокод без скобочек для души.
>скажи, чего ты пытаешься добиться ковыряя пазлы? умение изобретать алгоритмы?
Просто пишу ерунду. Бывает хочется.
От си тут одно название. Язык почти калька с дельфи. Истинный наследник си - это джава.
>Язык почти калька с дельфи.
Плохо что ли? Хорошо же.
>>68622
>Истинный наследник си - это джава.
Оба этих языка испытали влияние дохулиона других языков от С/С++ до совсем уж сейчас забытых, вроде Ада или Модула. И так же оба этих языка тащили друг у друга все, что возможно.
И кстати основные фишки джавы и шарпа, вроде трансляции в байт-код и последующим выполнением его на виртуальной машине, сборщик мусора и т.д. были придуманы еще Николасом Виртом в 80-х, как раз для одного из вариантов Паскаля. И оттуда по факту и были позаимствованы.
Джава не наследник, это помойка сама по себе, уникальная, а вот шарп как раз копирка от майкрософт чтобы заиметь свою джаву. И за это можно даже поблагодарить, шарп с виндой хоть работает более-менее нормально, а отличие от джавы которая помойное дерьмо на любой платформе, потому что своей платформы не имеет. Кроме разве что андроида, но мобилки всё равно убогий огрызок, нерелевантно.
>Нет, это то же самое как обертки оберток фабрик в жабе
ты пишешь на питоне? я вот пишу и много. и утверждаю что озвученные тобой "проблемы" таковыми не являются
с автоформатированием при копировании проблем нет, если пишешь не в блокноте. достаточно выставить базовый отступ для вставки и вставить. При удалении можно вызвать автоформат и все починится.
do..while я даже в шарпе использую редко. в питоне же легко заменяется на while(true)..break - работает идентично, хз о чем спор
многострочные ламбды заменяются на локальные функции. в питоне не сможешь писать развесистые LINQ подобные вещи. это вам не руби. там больше про читабельность и единообразние (ну раньше так было, щас они сахарят)
>Смотри, конгда есть скобки, ты просто не думая пихаешь строчки и всё заебись
ну я когда то тоже питон хейтил за вот эти вот отступы. и в итоге питон один из основных моих языков.
>не надо делаяя лишние модификации создавая угрозу новых ошибок
1 как бы не вставляешь километровые простыни. впрочем даже вставляя их с отступами проблем не будет
2 а копипаст с инета в любом случае не вставишь бездумно
когда не тащишь свой устав в чужой монастырь, то оказывается что и нет никаких проблем.
ну а макаке никакие скобки не помогут.
А доки прочитать религия не позволяет?
https://learn.microsoft.com/en-US/dotnet/api/system.gc.keepalive?view=net-7.0
В основном нужна когда байтоебишь что-нибудь или системные библиотеки дергаешь. Например если криптографией балуешься.
Хотя на скрине авалония. Судя по нему подозреваю что там это делается для оптимизации работы с изображениями и прочим графионием.
доки говорят что это удерживает ссылку от сбора. используешь в начале метода с unmanged кодом что-то, а в конце GC.KeepAlive вызов которого комплятор не вырежет, а значит удержит ссылку до этого момента. То есть GC.KeepAlive ничего так то и не делает кроме "мне в конце метода нужна будет эта ссылка, не убивай ее".
то есть ставить в начало метода лишено смысла.
>трансляции в байт-код и последующим выполнением его на виртуальной машине, сборщик мусора и т.д. были придуманы еще Николасом Виртом в 80-х, как раз для одного из вариантов Паскаля
Да кстати, Вирт придумал пи-код чтобы легче было писать рантаймы паскаля для новых платформ. Программы на нем становилсь идеально переносимыми. Идея очень опередила свое время.
>чтобы легче было писать
Вот-вот, типичный рецепт говна.
Что хорошего может быть в высере, который делают по принципу легче вместо лучше.
Легче — лучше.
ну если у тебя после штатного Dispose что то остается - значит ты рукожоп и финализе тебе не поможет ибо в нем ты как бы и вызовешь этот самый Dispose, который и с первого раза не смог все сделать, а со второго раза в нем будет уже неправильное состояние объекта.
Загуглить не сложно. А ты сам читал?
Одни пишут, что SuppressFinalize запрещает ставить в очередь finalize, другие пишут, что подчищается то, что не было подчищено.
Ну я думал, что подчищаю какие-то очевидные места, типа неуправляемых ресурсов, а все остальное говно подчищается автоматом. А оказывается, что при SuppressFinalize я должен чистить каждый итем класса, потому что я запретил совать нос GC.
Так?
управляемое подчищается само
неуправляемое требует явной очистки.
туда же всякие Close()
для этого ты делаешь Dispose и финализатор
сама очистка происходит в Dispose - если его вызвали, то значит финализатор вызывать уже не нужно, что и указывается с помощью GC.SuppressFinalize ()
если же рукожопы не вызвали Dispose, то значит финализатор будет вызван (а внутри него обычно все равно вызовут тот же забытый Dispose)
таким образом в данном паттерне финализатор вызывает Dispose если он был забыт и не был вызван явно.
Ну а то что забывать не стоит и нужно вызывать - это уже другая проблема которая заведет нас в lifetime-ы, но это уже оффтоп
А я могу подвесить Dispose к событию Unloading?
>а внутри него обычно все равно вызовут тот же забытый Dispose
Это проверяется? Ведь по умолчанию у класса нет Dispose. Финализатор чекает на то, является ли класс IDisposable?
>А я могу подвесить Dispose к событию Unloading?
это перпендикулярные вещи. IDisposable вещи обычно такие для того чтобы их диспозили (но не все - httpclientые штуки исключение). это самый обычный метод общепринятый. ничего особенного в IDisposable нет. Ну кроме того что про него знает using(var ...)
а когда ты это сделаешь тебе решать.
>Unloading
десктоп что ли? диспозишь вьюмодель? не сработает
>Финализатор чекает на то, является ли класс IDisposable?
финализация и диспоз это вещи сами по себе каждое.
диспоз обычный метод (соглашение такое и интерфейс)
финализе - особый метод который будет вызван GC, если метод есть и не супресс.
из этих вещей и собирают паттерн очистки с учетом "нет смысла чистить дважды, но вдруг очистка не была вызвана явно, тогда уж чистим как нибудь (учитывая что финализация происходит так то в отдельном потоке и от этого могут быть траблы))"
не каждому объекту нужна финализация.
Это гораздо хуже растровых изображений. Я думал, что проблема в них. В моем TreeView © каждая нода мерджит словарь ресурсов. 200 нод знаете скольо перативы засрали? 200 мегабайт! А каждая загрузка сотни нод занимает 2 секунды из-за ебаного парсинга ресурсов, текст которого по ходу как писали в интернете буквально конкатенируется со словарем ресурсов предыдущего итема.
Вы представляете? Каждое новое открытие ноды содержит все копии предыдущих словарей + еще одна. 100 итемов == 100 копий словарей ресурсов в одной простыне, которая парсится в риалтайме.
Это хуже подписок, это хуже битмапов. Это ебаное зло. И ведь этот вопрос поднимался лет 10 назад и ничего не было придумано для решения этой пробелмы (или придумано, но я хз как это искать).
Словари ресурсов не любят когда их многократно подгружают. Хз как это фиксить, учитывая что у меня решение состоит их кучи проектов. Ща буду смотреть, а xaml просто сходит с ума, если я буквально не указал словарь ресурсов. Я даже не могу его передать по свойству.
Попробую черед dataContext добавлять
Если у тебя решение состоит из множества проектов, то не все проекты увидят ресурсы основного проекта. Как итог xaml ругается что не видит ресурсы, хотя при запуске все норм и всё видится.
А есть еще стили, которые нужны только на уровне одного преокта. Не пихать же мне все в мейн проект? Это вообще подрывает всю идею модульности.
Я просто задумался, мне в принципе одна огромная база данных не нужна, только для данных самих пользователей, а вот у каждого пользователя уже свое.
Как будто ты пользователей приковал цепями, запретил им увольняться, расти по службе. Как будто ты какой-то странный.
Не понимаю, чего тут странного.
Почему ты вообще предположил увольнение, продвижение по службе, у меня не компания какая-то, где люди работают, а просто приложение для обучения, где люди могут свои данные загружать и заучивать их
есть такая беда.
ну тут каждый ехешник держит копипаст словарей
а на дизайнероское "нимагунайти" я и сам хз че делать.
нет, это ты какой-то странный
>а на дизайнероское "нимагунайти" я и сам хз че делать.
Пока решил проблему mc:Ignorable="d"
Наконец-то этому найдется применение, лол. Великая тайна "нахуя она здесь?" наконец-то раскрыта. На момент верстки ксамл будет брать ресурсы оттуда, но в сборку не попадет и ресурсы будут искаться в мейн проекте.
>какое отношение имеет к словарю ресов
Дизайнер не может подхватить глобальные ресурсы приложения.
Пишешь:
mc:Ignorable="d"
<d:ResourceDictionary ...
Тогда дизайнер увидит словарь ресурсов. Но возможно это из-за того что я юзал UserControl который создан так, чтобы не видеть глобальные словари ресурсов. Ща переделаю и посмотрю как работает.
И я не знаю как при помощи датаконтекста прибиндить словарь. Ну будет это какой-то словарь а даьше что? Как дизайнер узнает есть ли в этом словаре нужный элемент?
ну если тебе не лень писать данные для дизайна ты можешь создать параллельные вьюмодели, но я такого никогда не делаю - я всегда использую для дизайна реальные вьюмодели классы но без их создания.
что конечно в списках выглядит ой. правда они там сделали новое типа SampleData
а еще во че нашел. не знал
https://learn.microsoft.com/en-us/troubleshoot/developer/visualstudio/general/cannot-find-resource-named-error
Я не понимаю. При чем здесь вьюмодель?
Она вообще не имеет никакого отношения к словарю ресурсов. Это xaml файл, живущий совей жизнью.
Ты сказал про дата контекст. Я и сделал вывод что ты пытаешься данные на дизайнере вывести.
Да я хз как это прикрутить. У меня проблема не в билде, а студии. Она отказывается видеть словари ресурсов из другого проекта.
Даже mc:Ignorable="d" по факту не помогает.
Из-за этого мне надо в каждый контрол вставлять чертову простыню, котоаря клеится со всеми остальными. Я не знаю как это говно порешать.
Как же меня бесит SO. Десятки отдних и тех же ответов уровня "да епта, юзай MergedDictionaries". Вы пробовали мерджить ресурсы для итемов и чтобы приложение не улетало в космос?
Такое чувство, что я один на планете с такой проблемой. Какие-то намеки вижу по запросу WPF prism, но там описывается проблема как добавить в проект, а не в сотню итемов.
ну тут мелкие тупанули
потом немного подтянули дизайн но все равно плохо
а тебе вот это разве что
https://stackoverflow.com/questions/8712228/wpf-sharedresourcedictionary
Суть токова. В финализаторе обычно есть только один вызов Dispose. В самом Dispose происходит основная работа очистки всех ресурсов. Если программист сам вызвал диспоз, то финализатор ему становится не нужен, он может об этом сказть GC вызвав SuppressFinalize.
В чем профит?
Объекты с финализаторами удаляются за два прохода сборщика мусора, а объекты без них только за один(т.е. сразу улетают в топку доступной памяти). Получается меньше мусора, меньше простоев программы на работу с ним, при этом есть финализаторы, чтобы подстраховать братишек забывших вызвать диспоз.
Да, да, щас вот это пробую. Типа класс мерджит ресурсы только если их нет в сборке. Интересная идея, главное чтобы десигнер не заругался.
это костыль так то. решение было бы правильное дать возможность указать словари в дизайнере
Такую портянку говна никакое расположение скобок не исправит.
Че ты орешь? Нормальный же код! В деревнях такой все ели!
Наверно надо вытащить ResutCode и превратить дерево вызовов в линейную структуру: вызов - проверка. Если все проверки lflen саксес делать ExecuteSignOut.
Вообще на пике типичный результат функциональщины головного мозга.
Сейчас идут на любую зп лишь бы взяли. Вакансий нет ни фига.
>Вообще на пике типичный результат функциональщины головного мозга.
Да я думаю, как раз любой функциональщик за такой код тебя с разбегу обоссыт. Да и не функциональщик тоже.
Ну это геймдев, да еще и VR там в принципе денег нет. Народ за идею и возможность приобщиться работает.
> превратить дерево вызовов в линейную структуру: вызов - проверка
Как бы ты это сделал? Исходный SDK PlayFab работает на основе коллбеков.
60 откликнулось. Это пиздец
Я вообще не понимаю смысла в этих 5 и 7 версиях? Они промежуточные и никто на них ничего писать не будет кроме хеллоуворлдов. Лучше бы выпускали нормальную версию раз в 3 года с обдуманными изменениями, а не всякую ерунду тащили.
Джавист, спок.
Блять за тем и делают промежуточные версии чтобы спокойно обновить приложение.
И да джава дебил, у нас тут КАЖДЫЙ НОЯБРЬ выходит новая версия, не промежуточные а прям мажорная
Джава - это кобол, её почти не развивают. Можно раз в 10 лет читать чейнджлог за 30 минут. Это шарп пилят так активно, что скорее в нём надо ежегодно читать талмуды.
1 новая версия шарпа
2 дает возможность привнести новые фичи (тут вам не жава - тут хотят новых фич и не через тысячу лет)
2 дает возможность стабилизировать новые фичи перед выпуском лтс
а на шарпе типа нельзя что ли?
> Js, TypeScript
JS придётся учить, TypeScript чаще берут в больших проектах, но после JS и шарпа учится очень быстро.
> Bootstrap, jQuery
К "современным" сайтам не относятся, к тому же там и учить почти нечего.
> React, Angular, Vue
В проекте пишут на чём-то одном. Ангуляр в легаси, вуе непопулярен, реакт самый хайповый. Учится не быстро, хотя и быстрее, чем тот же ASP.NET.
>Как бы ты это сделал?
Как на пикче примерно. Самое главное не херачить новый код сразу после "Result =>". Должен быть либо флаг, либо вызов новой функции.
Мать твою ебал
Зашивайся, петушок стрелочный.
> реакт
Почитал про реакт, посмотрел синтаксис, по ощущениям это что-то вроде mvc, только в браузере, также контроллеры возвращают вьюшки. Зачем это нужно?
я нашел волшебную таблетку
https://github.com/Sergio0694/PolySharp
Лучше бы даунгрейднулся, чем остальной код начинять непонятной парашей с полифилами.
Расскажи что потом получилось, лол.
Я наоборот вертикально пишу, стараясь уложить строки в 80-120 символов, включая отступы. Ну и любимое, это передавать параметры по именам. Такая-то читаемость у кода.
TestMethod(
....name: "vasilii",
....age: 22,
....anotherParameter: you.are.gay);
Сорян за почерк, пишу с кофемашины.
Чтобы контроллеры возвращали только данные (обычно JSON), а не аж целую веб-страницу. Помогает снизить нагрузку на сервер и сеть за счёт повышения нагрузки на клиенты и отделить бизнес-логику от презентационной логики, особенно когда видов клиентов несколько - веб, мобилки, десктоп.
>Я наоборот вертикально пишу
что значит наоборот
я тоже пишу вертикально
просто предпочитаю заполнять пространство кодом, а не лишними скобками которые ничуть не улучшают читабельность
..я
....пишу
......диагонально.
Хочу рендерить на сервере экзешники.
Ну мне похуй, я все равно вкачусь в асп рано или поздно, потому что я круче буду. Рано или поздно я буду настолько крут, что меня невозможно будет не заметить.
мимо 26 лвл тнн рнн сыч шиз дошел до 60 страницы
читал её, ток последнюю главу про блазор скипнул
недели 3 ушло на всё
щас наверно буду пикрел, потом пару петов, литкод, и на джобмаркет
Что пикрил должен мне сказать? Типа у них там много откликов? Если да, то у нас так-то тоже много откликов, уж явно больше 6. Это же речь шла об отношении всех резюме ко всем вакансиям, понятно что на вкатунских вакансиях соотношение минимум 100 к 1 даже на .net'е.
>>71994
Лучше скажи: как собираемся конкурировать с такими кадрами?
>как собираемся конкурировать с такими кадрами?
С таким - никак. Такое резюме с вероятностью 80% сразу в мусорку улетит.
Хз, кажется самый простой собес из всех что у меня были не считая руби-скрапера в профитеро. Из-за этого возникли сомнения в какую контору я вообще собеседуюсь. В моей предыдущей галере на роль ворочателя ямлов требовалось решить литкодовскую задачку сложности middle. Тут -- ответить на вопросы, которые зазубривает интерн-ждун перед собесом на курсы в ерат.
Офер еще не прислали, отпишусь когда и если получу. Договаривались на 2к евро + виза.
Судя по списку ключевых навыков молодой человек вообще не одупляет, что происходит.
Отсюда вывод, что резюме старательно писалось чтобы выглядеть солидно.
Я б пособеседовал, но без каких-то заоблачных ожиданий. Скорее всего там обычный джун, которого учить и учить.
Хочу в С# вкатиться первым языком, но не могу установить VS, так как на рабочем компе нет админки. Посоветовали скачать VS Code, но и тут проблема, не могу установить .NET из-за ошибки 0х80070005, для ее устранения тоже нужна админка.
На что еще можно заменить, на чем удобно в C# вкатываться?
Обратись к системному администратору на своей работе
Сложно было вкатиться на уровень, при котором ты сможешь простого бота написать?
Ну тогда поздравляю.
Двачую, я такое "резюме" в универе писал чисто наотъебись в качестве задания по какой-то гуманитарной хуйни.
>У меня такой же опыт работы
Какой такой же? В том резюме его вообще нет. Есть набор просто набор слов вычитанных из учебных пособий и видеоуроков.
Расписывать нужно конкретный опыт
- место и срок работы
- проект/проекты над которыми работал
- какие задачи выполнял, достижения сделал
- инструменты и технологии которые использовал
И так для каждого места работы/проекта
И быть готовым, что вопросы будут задавать конкретно по этому опыту (это помимо теоретической базы). >>72691
>какие подводные?
Есть много разных тем, которые хоть и описаны в документациях на фреймворки и язык, но пока ты лично с ними не столкнешься ты даже знать о них не будешь.
>>72691
>А что от мидла ждут кстати? Что надо уметь?
Скажем так мидл не должен чего-то не уметь. Он может не иметь опыта работы с чем-то, но это просто означает, что он потратит чуть больше времени на задачу, т.к. ему придется приобрести этот опыт.
Та на Ангуляре накидаю ерунду какую-нибудь.
Потому что ангуляр нормальный фреймворк и вообще единственный во фронт говне именно фреймворк. Поддерживает тайпскрипт, ДИ и ООП из коробки, также из коробки полноценный хттп клиент и реактивные расширения. Также у него лучшая структура проектов и сборка.
Ангуляр не любят только разные додики которым сложно и хочется быстро говна высрать аля вуе и реакт
Древний - это покойный AngularJS. Современный Ангуляр совершенно новый и обновляется чаще детских подгузников. Его часто упоминают в шарпотредах, потому что Шарп - это кровавый энтерпрайз, и Ангуляр для него лучше всего подходит. Он куда менее модный, нежели Реакт, но поддерживать на нем сложные системы сильно проще, потому что Тайпскрипт и почти все нужное есть искаропки - не нужно ебаться с милллионами зависимостей и выдумывать костыли.
И чо, дядя, привет 2к23, тут и среакт такое способен если ты не знал.
Приложухи писать. Нахуй нам твое вебоговно? Что вы там постоянно "пишите", говносайтики у друг дружки копипастите? Вы бы еще посоревновались, кто красивее срет, лолки.
Ну какие приложухи, какая сфера хоть. То что на си шарпе можно что угодно делать это понятно. На с++ тоже дохуя чего можно, но это ничего не говорит о реальном применении языка.
>какие приложухи, какая сфера хоть
Ну смотри. Есть аналоговнетное оборудование, тысячи его. Смены ему нет и не будет, ибо дорого и ссанкции-хуянкции. Большинство комплектуется довоенным софтом еще под дос, на винде оно еле пердит. А бабке сраке с этого устройства надо таблички выдирать для отчетности. Вот тут-то и приходит на помощь Шарпоспец. Он и протокольчик через компорт организует, и данные в виде екселевского файлика на фтп выгрузит. Вот она, реальная задача и реальная работа, а не эти ваши те самые.
И как, норм платят?
Все так, за исключением мелких деталей.
Вместо древнего софта метатрейдер, вместо бабки манагеры.
Ну и не в рф, а на кипре.
Метатрейдер это что? Какие технологии используешь? Специфичные для языка и платформы. Может можешь что в целом по рынку труда сказать, стоит ли перекатываться с фронта в бэк на с#?
Метатрейдер это софт для брокеров.
По технологиям - аспнет, ентити фреймворк, кафка.
Стоит ли перекатываться - в душе не ебу, зависит чего тебе надо. Зп у фронтов +- такие же.
Фронт это прикольно и в целом нравится, но у меня развился комплекс неполноценности из за того что не представляю себе целостную картину. Хочу погружаться в предметную область сильнее, взаимодействовать со сторонними апи и сервисами, как то вширь развиваться. Хочу в фулстек попробовать, хотя бы на каком то уровне обе области зацепить. Десктопная/нативная разработка меньше интересует, не думаю что на С# это направление так уж актуально.
Если не на шарпе десктоп актуален, то на чем тогда? На элексире что ли? Кажись только шарп и элексир и делят большую часть рынка, хоть он и полуживой.
Ну я в целом говорю, что десктоп на второй план уходит, работы меньше и удачи нужно больше, на самом деле у С# тут сильные позиции, просто коряво выразился.
>Шарп - это кровавый энтерпрайз
Это джава - кровавый энтерпрайз, а шарп так, для сайтиков средней сложности, где РНР пробуксовывает
Додо пицце это расскажи.
В общем. Я посмотрел код https://github.com/RapidScada/scada-v6
И блин. Это же просто отличнейший код. Может быть там баги и есть, но блин: просто, понятно, без всяких новомодных изъебств. Просто шишка колом.
Теперь я хочу там работать.
Может быть кто-то имеет контакты или знает че там да как?
Серьезно, давно такого не испытывал. Только в эталонных примерах от майков, но там по другим причинам.
Достойно расписал, спасибо
Открыл, увидел static void init(), вызываемый из совсем другого места, закрыл.
Но я рад, что тебе нравится.
Ты не шаришь, няша. Так еще деды наши делали.
Ну да ладно.
Мне нравится, как все стройно, понятно, логично. И при этом - без магии. Поймет как это работает - даже дебил.
Допустим, в отличии от текущей моды, где у тебя - 0 вызовов конструкторов, 0 вызовов методов, но, блядь, какой-то магией оно слепилось во что-то напоминающее приложение. Фу-фу-фу. Не люблю такое.
>стройно понятно
И развалится нахуй при первом же изменении требований из-за тесного связывания.
Плюс эту поебень еще и задолбаешься юнитами покрывать.
>магия
Это называется di. И суть там в том, что при изменении требований ты добавляешь новую имплементацию существующего интерфейса, и правишь одну строчку в инициализации, а не чистишь вилкой 10 классов, в которых у тебя этот init вызывался.
Ну и название репы намекает, если v6 означает количество раз, которое это переписывалось.
Зато как деды и дебилам понятно.
Т.е. у них каждые 2 года накапливается критическое количество говнокода и они начинают заново.
Пишешь интерфейс IFilter<T> с одноименным методом принимающим lEnumerable<T> и возвращающим его же.
Для каждой категории пишешь имплементацию, которая фильтрует по строке. Строку передаешь в конструктор.
Пишешь еще одну имплементацию, которая принимает в конструктор пачку IFilter, примегяет их на енумерабл и объединяет результаты.
При запросе создаешь фильтр, и применяешь на последовательность своего говна.
Опциональнл можно передавать фильтр в репозиторий и применять его там.
Я не знаю как у вас, но в обычной разработке - лидирующий номер версии - значит, что был внесен достаточно большой список новых фич, изменений и исправлений, чтобы можно было отделить одну версию от другой. Лол.
Допустим - на первом этапе был только сборщик. Ок-да. Дальше прикрутили редактор мнемосхем, веб-сервер, дашборду. Ну серьезно, делать: 1.0.9999999?
А когда пора делать версию 2?
Ну и да. В том конкретном случае- v6 обозначает переход с .Net Framework+Mono, на .net6. Что немного намекает, на то, как часто полностью переписывать приходилось. Раз о переходе задумались только в 21 году.
Блин. Вообще, чет вы злые. Я посмотрел репозиторий. Отличный код. Зашел на форум - так приятно читать. Хочется либо работать с этими людьми, либо влиться в попенсорс и как-то им помогать. А вы тут... Эх.
> И развалится нахуй при первом же изменении требований из-за тесного связывания.
10+ лет не разавлилось. Я вижу как проекты модные-молодежные - разваливаются при попытке впихнуть в них что-то, что не было учтено на первом этапе.
> Плюс эту поебень еще и задолбаешься юнитами покрывать.
Какими ты собрался юнитами покрывать работу скады, лол? Скада - это про - стоит где-то датчик по модбасу опрашивается. 99% сложности скады - это производительность и стабильность, а юниты - нахуй не упали. Логика скады - собирать данные телеизмерения, состояния, отправлять на устройства команды.
> Это называется di
Это называется - спрятать мусор под ковер. Когда вы не способны нормально продумать архитектуру так, чтобы без магии оно клеелось, потому - нужно обмазаться магическими хреновинами, чтобы как-то оно работало.
Я не против, что люди хорошие и код аккуратный. Но это не отменяет того, что он хрупкий и дубовый.
Любовь проходит, когда ты начинаешь такое поддерживать, а оно сделано так, что для минимальных изменений нужно либо городить лютые костыли, либо переписывать с нуля.
Ты можешь di написать ручками, суть от этого не изменится, просто будут прямые вызовы конструкторов в строго определенном порядке.
>делфи
>qt
Так мы не про говно мамонта тут рассуждаем, а про modern текнолоджи, за которые тебе будут башлять 300кк. За куТэ и дельфи тебе максимум 70к будут платить. Еще и с командировками. Нах надо такое? Куда-то жопу постоянно поднимать еще и за гроши!
Веб-скрапинг это называется.
Просто получить веб-страницу легко: https://metanit.com/sharp/net/2.2.php
Дальше начинаются сложности:
- Если у найденного сервиса с расписанием есть публичное API, надо обратиться к нему, полученный JSON/XML распарсить.
- Если нет API и там HTML, надо будет его парсить какой-нибудь либой, хотя может хватить регулярок
- Если нет публичного API, а сайт сделан как SPA-приложение, придётся возиться со всякими Selenium.
Ну и многие сайты скрапинг не одобряют, в любой момент могут обнаружить и забанить.
А готового велосипеда нету? Там же по идее алгоритмы можно (и наверное нужно) приплести? Неужели нету библиотеки для поиска для АСП?
Спасибо.
Шарп - это кровавейший энтерпрайз. На нем бойлерплейтом и абстракциями обмазываешься ничуть не хуже, а байтоебство и прочий аллокейшен-фри код - де-факто стандарт шарповой разработки.
Есть, linq называется.
Там буквально return items.Where(x => x.YourProperty.Contains(query)); надо сделать, какая библиотека.
Интерфейсы нужны, чтобы из таких мелких запросов собирать более сложное - как у тебя в задаче.
>Стоит ли перекатываться - в душе не ебу, зависит чего тебе надо. Зп у фронтов +- такие же.
А тут не актуальнее ли наоборот перекатываться? Так-то в бэке куда больше доля галер была, которые сейчас ушли, выкинув на рынок кучу разработчиков.
>аллокейшен-фри
Иронично, что память выделяет рантайм независимо от того, будешь ты ее использовать или нет. А потом просто двигает указатель на край кучи и пишет данные в заранее аллоцированную память.
Хз, я на кипре, мне срать.
Но метаться между технологиями в любом случае так себе идея - делай что нравится, при условии что оно хоть как-то востребовано.
Твой личный скилл влияет на зп и трудоустройство гораздо сильнее, чем выбранный стак.
Дотнет коре мультиплатформенный. Я бы даже сказал, что на шарпе в основном пишут под линукс, если считать апихи, которые разворачиваются в докер контейнерах.
Как это забанить? По айпи или что? Ну так я роутер перезагружу и заново будут тырить данные. Я пока только 3 главу на метаните читаю, но заниматься начал как раз-таки из-за желания сделать "веб-скрапинг", вот заранее пытаюсь понять куда мне вообще двигать.
А какие БД наиболее распространены? И вообще какое технологии больше всего в ходу?
Т. е. нет такой херни, что тупо в силу моды массово используется та или иная связка?
Asp.net core это аналог спринга из жавы. В основном используется для апи, но вообще на нем можно и фронт писать. Чего я ни разу не встречал.
Entity framework core для доступа к базам.
Wpf для десктопных приложений.
Если ты используешь ef core, то без разницы какая база, по большому счету.
Он дает тебе в руки dbset, ты с ним делаешь всякое через linq, потом вызываешь метод чтобы отправить транзакцию. Sql запросы никто руками не пишет в здравом уме.
> Как это забанить? По айпи или что? Ну так я роутер перезагружу и заново будут тырить данные.
Полно маркеров, не только IP, но и данные оборудования, MAC-адрес и прочее, либо сам характер запросов (если ты запрашиваешь данные точно раз в минуту с одними и теми же заголовками, ты точно бот). Да некоторые могут сразу определить скрапинг ещё до того, как ты получишь хоть какие-то данные. Специальный заголовок не передал, например, либо какой-то скрипт у тебя не запустился. Всё зависит от данных, на сайте с расписанием автобусов в мухосранске вероятнее всего никакой защиты не будет, а вот парсинг цен в интернет-магазинах или получение курсов акций обычно пресекается.
>апихи, которые разворачиваются в докер контейнерах
Им дали селф-сборки и нугет, они один хуй лезут этого говно тащить на шарп.
И не пизди. У меня 5 сервисов грузится просто по сфтп в папку на сервере под линукс и все работает без ваших блядских говно ВМ зумерских
Докер и то, что ты называешь селф-сборками, решают разные задачи.
>у меня работает!!1
Молодец, а теперь сделай так, чтобы при 10к одновременных юзеров на первом и третьем сервисах производительность не просаживалась.
ну давай, расскажи что происходит с мак адресом когда кадры проходят через узлы сети
а мы послушаем
Приходится сначала делать
WindowState = WindowState.Minimized
а затем Hide()
Спасибо за ссылку, бронон. Но у меня следующий вопрос. Вот я с помощью GetStringAsync получаю урл страницы википедии, сохранённый в стринговой переменной, как мне из него вычленить, допустим, текст подписи к википедии на другом языке(Вот он на первом скрине)? Может, нужно использовать другую команду? Или только обрезать весь текст всего урл, кроме нужного мне?
Помню вроде в Xml ридере есть опции парсинга свойств (или как там это называется). Указываешь что-то вроде "title" и тебе возвращается либо содержимое в кавычках, либо подсвойства.
ридер тебе парсит всю иерархию, а дальше ты ищешь по ключевым именам, типа div, id, title
Я смутно помню, могу посмотреть завтра.
https://learn.microsoft.com/en-us/dotnet/api/system.xml.xmlreader?view=net-7.0
HTML и XML не совместимы между собой. Нужен специальный парсер HTML, похоже, что из коробки в дотнете такого нет, надо сторонние либы подключать.
Ты бы сначала узнал, может у сайта открытое апи есть, и не надо будет ничего скрапить. Если документированного апи нет - зайди в девтулзы/сеть, посмотри не передается ли нужная тебе инфа в запросах, если передается - то тоже скрапить не нужно. Для скрапинга же сишарп слабо подходит, там полторы всратых библиотеки, две из которых используют xml, лучше джава скрипт. Хотя, если тебе одно значение - то вообще без разницы, можно тупо поиском зафигачить регуляркой, и не париться со скрапингом.
Скул сервер и постгрес. Постгрес юзают потому что он мощный, открытый и бесплатный, скул сервер - майки двигают.
>В основном используется для апи, но вообще на нем можно и фронт писать. Чего я ни разу не встречал.
Корпоративную фигню пишут иногда, и эмбедед системы для всяких касс и банкоматов. В целом же в вебе - так себе идея. Сейчас вообще все через SSR делают, лишь бы 100мс на парсинге js сэкономить, тянуть clr, чтобы сишарп в браузере завелся - никто не станет.
>эмбедед системы для всяких касс и банкоматов
В магазе очередь на кассу.
Очередь стоит, на табло надпись "Не работает".
Кассир извиняется: "Новая программа, а компьютер старый, за сегодня уже третий раз зависает".
Все стоят ждут пока говно перезагрузится.
Признавайтесь, кто из вас эту парашу лепит. Я в рожу плюну.
Это на джаве.
Насколько помню, эту парашу лепит хуинтел. Но даже он, хоть и кал, не виноват. 20 лет назад никто не предполагал, что кому-то из-за жадности помноженной на врожденную тупость приспичит пихать в 2023 году четвертый пень в рабочий пк.
Ты же читать не умеешь. Было сказано "программа новая, а компьютер стары". Это значит раньше было всё нормально, но ОБНОВЛЕНИЕ отыквило компьютер и всё затрещало по швам. При чем тут интел, когда очевидные говношлепы параши клепатели срут говном вместо нормального софта. Ебаные макаки виноваты во всём, а не интел или еще кто, такие как тут сидят и довольны баблом в карманах, пока остальные страдают от их говна насранного.
Плюсую. Сам работал в тех. поддержке и бесило как эти говноделы выпускали обновления и обязательно что-то ломалось.
Так они бы вечно клепали обновление, если бы не подстегивающий кабанчик. Конечно же макаки виноваты, ага.
>Это значит раньше было всё нормально,
То что РАНЬШЕ все было нормально, не значит то, что все это нормально СЕЙЧАС.
>>74869
Как бы смысл их работы не в том, чтобы все быстро работало и не ломалось, а в том, чтобы в их сопровождении была потребность. Вот и приходится ломать потихоньку. А тп для того и нужна, чтобы бомбящие клиенты с легкой формой даунизма поносили бедного человека на телефоне/в чате, а не сам отдел разработки.
Работаешь - ты, а не кабанчик. Это твой выбор, твое поганое действие высирающее говно. Отмазы "это не я говно, это жизнь такая" не проходят. Это ты - быдло, поэтому и жизнь такая, а не наоборот, потому что жизнь и состоит из людей, из каждого такого как ты, вот и результат.
>>74922
Ну да, было нормально, а потом пришли макаки и всё изгадили. О чем и разговор.
Обожаю наблюдать за такими максималистами на реальных проектах, когда окружающая действительность начинает отвешивать им смачные плюхи.
>Работаешь - ты, а не кабанчик. Это твой выбор, твое поганое действие высирающее говно.
Ну с такими идеалами можно сразу идти бомжевать под мостом.
>это не я говно, это жизнь такая
Это меньшая из проблем, которая может возникнуть. Мне когда друг, монтирующий жд-пути, рассказывает охуительные истории рядового рабочего дня, то внутри холодеет.
Если такой идеалист — пили свое приложение.
Тогда учи 10 языков сразу.
Их даже искать не надо. Сами приходят в этот тред и начинают кидаться какашками.
Ты так пишешь, как будто у тебя яичек наберется на целую корзину.
По факту у тебя всего одно яичко и десятки корзин.
Анон, дай, пожалуйста, ссылку на гайд как сделать юнит-тесту для шиндус формс, а то я чувствую, что либо я крайне тупой (что верно), либо что все вокруг крайне тупые(что тоже верно, но не так важно, как первое)
Тоже не догоняю в чем прикол. Большая часть тестов и так очевидна.
В чем их смысл? Узнать, что функция не работает если передать ей титановый лом? Ну я и так это знаю.
Да никто не понимает, это языконезависимая проблема. Стандарта нет, все клепают как хотят. Тестируют обычно логику, а не UI, Для UI иногда пишут тесты, но это не юнит-тесты, а нечто иное. Для веб-говна ещё справляются худо-бедно с селениумами, но с десктопными формочками приходится возиться с эмуляцией событий клавиатуры и мыши, ну и занимаются этим обычно не программисты, а всякие QA-автоматизаторы.
Хаха лошки, у нас в PHP-треде всё по полочкам расписано, как, когда и для чего делать тесты. Так что забудьте про майкоговноподелие и шагом марш учить лучший язык кодерства - PHP.
Я так понял, он нужны для того, чтобы сразу понять где именно лом влез в шестерёнки программы. Вот типа компания долго пользуется программой, дополняет её и всё такое, а потом бац и что-то перестало работать. Вместо того, чтобы с лупой читать весь код от начала и до конца, можно запустить тесты и понять где и что не работает и почему.
>>75225
Просто мне для работы сказали покрыть тестами небольшую программку, а я вообще их никогда не писал и тупо не могу это сделать, не получается, то .нет проектов не совместим, то ещё что-то.
Тесты - для людей с IQ 80. Им сложно в голове удерживать больше одной вещи одновременно, они пока до написания конца метода из 5 строчек доходят - забывают, что на первой строчке было. Для таких людей написать метод - труд и достижение, переписать метод - еще сложнее, у них же в голове он за один присест не умещается. Поэтому, чтобы программировать могли даже такие - и придумали юнит-тестирование и TTD. Т.е. ты сначала пишешь тест - т.е. что хочешь получить от метода, а потом этот метод подгоняешь, ищешь, почему не получается нужный результат. Или при переписывании метода - тест тебе покажет, что ты совсем что-то не то делаешь, у тебя совсем другой результат получается. Здоровым людям такое, разумеется, не нужно, у нас все в голову влезает, когда нам надо написать метод, складывающий три числа, мы понимаем, что нужно первое со вторым сложить и прибавить к нему третье, когда нам надо переписать, чтобы второе к третьему прибавлялось сначала, а потом к нему первое - тоже никаких проблем. А люди с низким интеллектом так не могут, они прибавят первое ко второму, а потом начинают прибавлять второе ко третьему (они же по порядку складывают, третье по порядку возле второго, вот с ним и складываем), и складывают два получившихся результата. И вот чтобы они такое могли отловить - они сначала пишут тесты, мол 1+2+3 должно быть 6. Ага, а у меня программа выдает 8, я забыл второе число из суммы наверное вычесть, ага 1+2+2+3-2 = 6, тесты зелененькие, метод написан. Ага, задача переписать, чтобы второе с третьим сначала складывалось, переписываем, так, мы тут делаем так, а нам надо сложить сначала второе с третьим числом, так, 2+3=5 Не подходит, не хватает первого, а первое у нас в старом методе было 1+2, т.е. 2+3+1+2=8, опять не так, черт я запутался, ну-ка посмотрим, а, точно, мы еще должны второе число вычесть, так 2+3+1+2-2 =6, о, заебись. Фух, какой сложный метод я сегодня написал, как мощен мой скилл, с какой комплексной логикой, на славу поработал, воистину без тестов никуда.
Тесты - для людей с IQ 80. Им сложно в голове удерживать больше одной вещи одновременно, они пока до написания конца метода из 5 строчек доходят - забывают, что на первой строчке было. Для таких людей написать метод - труд и достижение, переписать метод - еще сложнее, у них же в голове он за один присест не умещается. Поэтому, чтобы программировать могли даже такие - и придумали юнит-тестирование и TTD. Т.е. ты сначала пишешь тест - т.е. что хочешь получить от метода, а потом этот метод подгоняешь, ищешь, почему не получается нужный результат. Или при переписывании метода - тест тебе покажет, что ты совсем что-то не то делаешь, у тебя совсем другой результат получается. Здоровым людям такое, разумеется, не нужно, у нас все в голову влезает, когда нам надо написать метод, складывающий три числа, мы понимаем, что нужно первое со вторым сложить и прибавить к нему третье, когда нам надо переписать, чтобы второе к третьему прибавлялось сначала, а потом к нему первое - тоже никаких проблем. А люди с низким интеллектом так не могут, они прибавят первое ко второму, а потом начинают прибавлять второе ко третьему (они же по порядку складывают, третье по порядку возле второго, вот с ним и складываем), и складывают два получившихся результата. И вот чтобы они такое могли отловить - они сначала пишут тесты, мол 1+2+3 должно быть 6. Ага, а у меня программа выдает 8, я забыл второе число из суммы наверное вычесть, ага 1+2+2+3-2 = 6, тесты зелененькие, метод написан. Ага, задача переписать, чтобы второе с третьим сначала складывалось, переписываем, так, мы тут делаем так, а нам надо сложить сначала второе с третьим числом, так, 2+3=5 Не подходит, не хватает первого, а первое у нас в старом методе было 1+2, т.е. 2+3+1+2=8, опять не так, черт я запутался, ну-ка посмотрим, а, точно, мы еще должны второе число вычесть, так 2+3+1+2-2 =6, о, заебись. Фух, какой сложный метод я сегодня написал, как мощен мой скилл, с какой комплексной логикой, на славу поработал, воистину без тестов никуда.
Посмотрим, как ты удержишь в голове проект на 500к строчек, которые писали 30 разрабов в течение 10 лет.
Значит, у всех разрабов 80 IQ.
Вот про таких я и говорю, которым сложно вещи понимать. Причем туту юнит тесты и размер проекта? Ты конкретный метод тестируешь, в качестве костыля, помогающего преодолеть неспособность удержать в голове логику этого метода.
У тебя точно айсикью меньше 80. Ты тестируешь что не сломал А когда делаешь Б, когда об существовании А ты даже не подозреваешь. Это и называется "не держать проект в голове"
>Я так понял, он нужны для того, чтобы сразу понять где именно лом влез в шестерёнки программы.
Ну так выдаст исключение. Основная проблема это когда функция все понимает, но выдает не тот результат. Ну и как такое отловить?
Взять к примеру какой нибудь парсер текста. Ну придет в тексте какой-то неведомый символ, которой порушит парсинг (да знаю я про подход "не знаешь - пропусти"). Функция чет высрет, это говнище потечет по трубам в другие функции, которые тоже чет не то высрут.
Т.е. получается замкнутый круг. Если я ЗНАЮ какой символ мне порушит парсинг, то я сделаю в функции защиту. А если я не знаю что может придти, то как тест это отловит? Сектантская хуйня короч.
Единственный смысл в тестах, это когда кто-то другой тестирует, а не ты сам. Наверно так и происходит, а надрачивать самому себе это хуйня, наверно. Я лучше буду пользоваться внутренним регламентом.
>Посмотрим, как ты удержишь в голове проект на 500к строчек, которые писали 30 разрабов в течение 10 лет.
А не писали бы юнит тесты, справились бы за 5 лет.
Смысл в том что когда ты пишешь свой код то и пишешь тесты к нему, потому что ты лучше в нем разбираешься. Вася пишет свою часть кода и пишет тесты соответственно к ней, потому что лучше в ее логике разбирается. То есть Вася пишет тесты для тебя чтобы ты его работу не поломал, а ты для Васи.
>А ты даже не подозреваешь.
Именно. Когда у тебя IQ выше сотни - ты не мыслишь в категориях "подозрений", ты знаешь. У тебя 5 строчек метода целиком в голову влезают, ты одномоментно находишься в осведомленности о том, что метод должен делать и что делает код, который ты пишешь, и соответствует ли одно другому. Ты не бьешься головой об клавиатуру, в надежде, что у тебя получится Б, чтобы потом обнаружить, что ты сломал А - у тебя в голове полная картина действий в методе, включая те, которые взаимодействуют с A, и ты конкретно знаешь, что твой метод делает c A, тебе не нужно потом это "обнаруживать".
> Основная проблема это когда функция все понимает, но выдает не тот результат. Ну и как такое отловить?
Так ведь есть expected и прочие хуйни, где указываешь какие значения должны быть, а какие нет.
Не тупи. Никто не пишет тесты чтобы понять свой код. Тесты пишут чтобы у других разработчиков был сигнал что они нарушают поведение кода которое было задуманно автором. Особенно полезно когда проекту уже несколько лет, сменилась пара поколений разработчико и нужно рефакторить код чтобы ввести новую функциональность.
>Когда у тебя IQ выше сотни - ты не мыслишь в категориях "подозрений", ты знаешь.
Чел, мы тут все в айтишечку за баблом вкатываемся, а не затем чтобы думать лишний раз.
>Тесты пишут чтобы у других разработчиков был сигнал что они нарушают поведение кода которое было задуманно автором.
Ты что несешь? У шарпа - строгая типизация, он просто обмазан надежностью и безопасностью. Другим разработчикам не нужен сигнал, что они нарушают поведение кода - они попросту не могут его нарушить, если ты сам того не разрешил. У тебя линтер буквально в вижлу встроен, если тебе чего-то со стороны языка не хватает, для чего тебе тесты?
Так IQ именно про то, что тебе думать то не приходится (и, соответственно, ты не ошибешься в размышлениях, если ты не думал), тебе и так все ПОНЯТНО и ОЧЕВИДНО.
Для строго типизированных языков модульные тесты меньше. Но когда несколько человек работают над кодом то им часто приходится править одни и те же файлы, особенно при рефакторинге. Чтобы например сделать иерархию классов и интерфейсов боллее отвечающей задачам. Так что тот условный вася будет пререписывать типы. В таких случаях типизация может не спасти. А уж что касаетя функциональных тестов, типизация там вообще не причем. Ты не можешь типизировать в своем коде чтобы у тебя было две кнопки на странице OK и Сancel, а не одна.
Когда Вася будет рефакторить и править типы, то что он устранит ошибки компиляции не означает что он не выплеснул с водой ребенка, которого ты родил в своем коде.
Тут скорее типизация с тестами играет роль костылей подпирающих с двух сторон. Типизация может быть не полной, как и тесты. Ничего нет совершенного, особенно в коммерческих продуктах
Например в коде полно мест где возвращаяются типы шире чем они есть на самом деле. И из-за этого в использующем коде полно кастингов
>Основная проблема это когда функция все понимает, но выдает не тот результат. Ну и как такое отловить
Придумать все возможные входные данные, проверить что внутри алгоритм правильно пихает их во внутренние вызовы и правильно реагирует на ответы. Проверить что на все возможные варианты входа алгоритм выдал правильный результат.
Плюс интеграционые тесты что все модули правильно работают вместе тоже все возможные варианты проверяем.
Краткий обзор на эту йобу: https://learn.microsoft.com/en-us/dotnet/framework/debug-trace-profile/code-contracts
Контракты форсят думать о любых методах как о наборе пред- и постусловий при котором они останутся гарантировано работоспособными. Первый нарушеный контракт это источник багофичи - с него начинается трейс. Тесты как таковые писать не нужно если обмзывать все методы контрактами.
Все это дело закономерно выпилили. Индусы не осилили предварительное проектирование кода где определяются все зоны ответственности методов. Какбы лишняя работа, проще делать тесты по факту обнаружения проблем. Плюс все выполненые контракты не гарантировали отсутвие логических ошибок в коде, что тоже успешно отлавливают функциональные тесты.
>предварительное проектирование кода где определяются все зоны ответственности методов. Какбы лишняя работа, проще делать тесты по факту обнаружения проблем
Твоя ошибка что ты думаешь что тесты делают по ошибкам. Контракты засирали код тоннами копипасты и говна.
Тесты пишут для фиксации работы алгоритма или модуля. Чтобы спустя год если кто-то случайно на 3 из 10 слоев что-то сломал ты узнал об этом ещё до мерджа
там написано
>Consider using Nullable reference types instead.
Не пиздишь ли ты?
может быть он просто сильно тормозил
Ни очистка, ни пересборка не помогает.
Единственным вариантом это удалять папку .vs
Можно как-то явно связать файлы?
Есть классы, которые работают с GameCenter и Keychain на iOS, через DllImport, как бы выступая мостом между управляемым и неуправляемым кодом. Как бы их лучше назвать? GameCenterNative или KeychainBridge?
>как бы выступая мостом между управляемым и неуправляемым кодом.
Как делаешь? У меня та же проблема, я в управляемую библиотеку расставляю точки входа, чтобы выглядела как неуправляемая библиотека.
длл нативный? Преврати в илкод, поменяй данные и снова упакуй.
Установил на рабочий комп (на win7) VS Code. По видосам настроил, и даже написал некоторый текст для вывода в консоль. Но вот беда, даже такой не большей код вызвал у компа попытку суицида, минут 20 крутит build и не понятно как долго еще будет крутить. А выдал в процессе приклил.
Может, кто на опыте сказать, что за хуйня?
К слову при вызове функции число 100 почему то имело тип sbyte и использовалась инструкция для записи sbyte в регистр int32. Пришлось еще и инструкцию менять.
Спермерка не поддерживает новые версии дотнета.
>что за хуйня?
Судя по твоему скриншоту, у тебя переизбыток говна в голове, аж глаза заливает. Кто тебя скрины так делать учил?
Я студию даже на планшет устанавливал, правда там десятка.
4Гб оперативы. Конечно, юзабилити там условное.
Ты случайно ен ЧПУшник какой? Чому семерка? Придется тебе таскать с собой ноут.
Хм, или просто при первом вызове запомнить, какой был результат. И потом его возвращать всякий раз при вызове Authenticate. Обычному коду не обязательно знать, что этот метод работает только 1 раз.
Удали его с помощью рефлексии после первого вызова.
Ну вот я видел в классах такой флаг IsInitialized. Только сделай его static и тогда будет тебе на веки вечные, пока жива программа.
Потому что внешний сервис, который предоставляет эту функцию, позволяет сделать это один раз. Если вызвать ещё раз, то ничего не произойдёт и коллбеки не будут вызваны. Так устроен сервис.
Ну попробуй несколько раз переопределить dependency property, к примеру. Че не мужик что ли?
Так и ты в методе просто нихуя не возвращай, у тебя же по сути фасад над апишкой, к чему эти изъёбы? Она уже всё предоставила
Нагуглил несколько "решений", но все сводятся к тому, что Document конвертится в строку. Это "нормально" или лучше поискать как биндиться к другому FlowDocument?
Данные хранить буду в бинарном виде, используя BinarySerialization.
> разместить
> На слое бизнес логики
Наверное не совсем верно сформулировал. Понятное дело, что на слое БЛ. Где это добро вызывать? В WPF был метод OnStartup и свойства Initialized/Loaded. Эту подготовку надо выполнить непосредственно перед запуском самого приложения.
Разобрался. Оказывается это не библиотечные методы, а методы расширения, которые этот придурок Адам Фриман описал только в конце главы. Вот что за манера давать код, который с ошибкой? Я из-за него голову сломал как фиксить это говно.
Но микрософты тут тоже виноваты, что надобавляли сахара и теперь хрен пойми где ошибка: то ли библиотечная функция не та, то ли где-то в коде кто-то присобачил метод расширения.
1) Пробуй сначала прочитать главу полностью, а потом уже код ебашить.
2) Обычно к таким книгам прилагается диск или ссылка на ресурс со всем кодом из книги.
>A class contains the members of an object, including methods.
Я че-то не понял. Я думал, что класс это типа описание объекта, его возможностей и туда-сюда. А тут написано "мемберс ов эн обджект". Что за члены класса? Как это понять?
Тогда почему студия рекомендует вместо
List.Count > 0 использовать List.Any?
Потому что разработчики дотнета считают, что any яснее отражает намерения разработчика.
Думал, что решил проблему, но нифига. Теперь валится эксепшен во время выполнения.
Главу дочитал до конца. Автор пишет, что уже всё должно работать.
Смотрел на гитхабе код и у меня всё один в один, но не работает. Скорей всего микрософты всё равно что-то сломали и даже смена дотнета не помогает.
>Теперь валится эксепшен во время выполнения.
Так а в чем проблема? В эксепшене у тебя есть сообщение, гуглишь по нему и понимаешь смысл проблемы.
Ответ найти не удалось. Точнее там пишут, что надо как-то по другому работать с сессиями, но я не понимаю. Фримен же не пишет, что и как работает, а просто суёт код и говорит, что в последних главах будет объяснение.
Главу и книгу скажи. А ещё ты хоть смотрел доку майков?
https://learn.microsoft.com/ru-ru/dotnet/api/system.web?view=netcore-2.0
В коре нет HttpContext и даже в .net framework 1.1 https://learn.microsoft.com/ru-ru/dotnet/api/system.web.sessionstate.httpsessionstate?view=netframework-1.1 нет таких методов.
Это самописные методы расширения чел, а ты НА РУССКОМ не смог просмотреть документацию. Буквально бля 1 минуты в гугле и сайте
>Тогда почему студия рекомендует вместо
>List.Count > 0 использовать List.Any?
Это хорошая практика. В некоторых местах например за ассерты с List.Count > 0 в юнит тестах, могут и пизды дать.
Адам Фриман - ASP.NET Core MVC 2 с примерами на C# для профессионалов (2019). Конец 9 главы, где создаётся корзина товаров.
Код из книги есть на гитхабе: https://github.com/Apress/pro-asp.net-core-mvc-2/tree/master/09%20-%20SportsStore%20-%20Navigation
Эксепшен валится именно на этих методах, что нет этой сессии.
А нет пизжу нет на русском
Я спизедел. На русском ласт это кор 3 8е издание.
А вообще кор 6 9е вышло в 24 февраля 2022. Спец книга для спецоперации
Сдается мне, что все-таки это ты что-то делаешь через жопу.
Я вот сейчас дернул реп по ссылке, загнал в студию и все работает, с первого запуска. Ни одного эксепшена не вылетело.
Все нажимается. Смотри запись.
Он там добрую четверть книги посвящает нахрен не нужным razor pages, а веб апи уделяет всего одну главу. О jwt токенах разумеется ни слова.
Да? Сорян, не знал. Мне просто один чел ее хвалил, прям в противовес Фриману.
Я так-то по asp.net вообще ни одной книги не читал (хотя работаю уже лет 5 с ним), мне хватило майкрософтовских доков.
А откуда ты взял практики как всё правильно распределять по коду? Там всякие репозитории выделять, внедрять зависимости через конструктор, тестирование кода?
Кинь в тред скрин чему те методы принадлежат, я не он мне просто интересно
>Там всякие репозитории выделять, внедрять зависимости через конструктор, тестирование кода?
Не поверишь блять берешь гуглишь про ДИ и тестирование. Репозиторий можешь себе в жопу блять сунуть баребух у тебя ЕФ есть.
Мимо другой анон
> Репозиторий можешь себе в жопу блять сунуть баребух у тебя ЕФ есть.
Вызывать savechanges в логике плохая практика...
class Name {} - OK
class name {} - не ок
Так? Хуле там примера нет, я что откуда знать должен что значит "type names"??
Да, так.
Кто сказал? У тебя должен через ДИ кидаться контекст нужный, ты делаешь что тебе надо и сохраняешь изменения. Естественно ты реальную работу с БД делаешь точечено когда все готово, а не открыл ворота и начал дрочить.
Ваши репы поверх ЕФ это кал который ломает суть ЕФ. Особенно когда я вижу getFirst(), getById() прям уебать хочется.
ЕФ это уже суть репозиторий который скрывает от тебя рельную работу с базой и тонкости работы с ней
Я видел такую практику, что создают интерфейс CRUDService и сразу определяют методы: create, findById, findAll, update, delete
>Ваши репы поверх ЕФ это кал который ломает суть ЕФ
Суть репо - в том что бизнес-логика ничего не знает про EF, и знать не должна. Всё что она знает - есть такой-то класс, который позволяет получить данные. А что там внутри - EF. Dadder или ADO - глубоко пофиг.
куда копать? в кодогенераторы?
Хочу вкатиться в С# по видеокурсу IVDN. Альтернатива - ulearn.me
Потом уже переходить на что-то более серьезное.
Какие подводные? С чего вообще лучше начинать? Я говорю вообще о самых основах.
Ты хуй и не можешь в нейминг. Ставлю на того чувака громоотвод.
>(заебался конструктор руками писать и дерево зависимостей постоянно обновлять)
А ты передавай фабрику в конструктор.
>С чего вообще лучше начинать?
Установи VS открой метанит и пиши код. Потом берешь и ищешь работу.
Идеально конечно сходить в какой-то вуз типо МГУ, МАИ, МФТИ на направление 09.03.01
Да. Перекатываемся на питон!
Какое все? Немного же увольняют.
Магистратуры хватит? Неохота заново 4+ года учица. А вобще я блин сыч + накопилась куча болезней, вряд ли осилю очное обучение. А дистанционка полноценная есть только на бакалавриат на информатику... На магу в России пока толкового ничего нет, но обещают в течение пары лет организовать.
Почему дистанционная мага есть для психолухов, для экономистов, даже для инженегров блять есть, а хуле для кодерков ниче нет? Что так не оперативно-то!? Всё как обычно с запозданием сука. В школе моей начали вести информатику только через 3 года после моего выпуска. Магу откроют через 3 года после моего уже трудоустройства или вообще смерти, я хуй его знает что за проклятие такое!!!
Если есть 8-12к долларов можешь на коурсере заочно отучиться в США или Канаде. Естественно на магу придётся сдавать экзамены по информатике и всякой хуйне
>>78597
https://ru.coursera.org/degrees/master-of-computer-science-asu
На держи 15000 долларов всего.
Candidates without an undergraduate degree in computer science, but have a strong foundational understanding of computer science, looking to formalize their knowledge.
Тебе подходит если сдашь экзамен
ну че ты сразу начинаешь назови parameters, specs, details, instructions, guidelines, routines, delineations, descriptions, schemes
Какие магистратуры, сынидзе? Тебе нужен компьютер + интернет + бумажный вариант хороших книг по C#, чтобы было удобнее и было больше мотивации добить книги. ВСЁ. Больше нихуя не надо.
И в то же время пофиг на то что у упрощенного using будет несколько лишних строк захвачено в его scope
>который показал насколько все это не нужно
Ага настолько не нужно, что разработчики визуал студии создали это
https://github.com/Microsoft/vs-validation
>>75665
>Consider using Nullable reference types instead.
В прошлых тредах я пояснял что это абсолютно не замена. Это как тебе вместо всей машины предлагают колесо. Конечно колесо часть машины, но машина это не только колесо
Проблема в контрактах не в том, что они не нужны - там просто сделали реализацию через жопу. Вместо простых if throw там какая то CLR зависимая портянка что мешает ей быть кросс.
>И в то же время пофиг на то что у упрощенного using будет несколько лишних строк захвачено в его scope
Ты о чем? Какой еще скоуп у упрощенного using-а?
>это прям реально магистратура без наебки?
Прям без наебки. Экзамены сдай только и баллы набирай, делай научные работы. Диплом прям труевый. Экзамены сдаёшь по вебке так чтобы было видно что ты один, у тебя нет шпор и прям преподу.
>Даже в такое время мне разрешат? Я же из России!
Сама курсера шлёт нахуй с ру адресов, не знаю сработает ли сейчас. Вопрос входа на страницу решается просто впн. Думаю им похуй и они больше из-за невозможности оплаты, поэтому главное им деньги дать
неявный до конца метода.
Если у тебя есть вложенный using - то ты вместо "вижу вот scope" постоянно вспоминать "ага до конца метода"
и это еще полбеды. беда начинается тогда когда ты дописываешь строку и она автоматом подпадает под using
Наверно надо проверить версии подключаемых билиотек из гака, где этот ричбокс обьявлен.
>версии подключаемых билиотек из гака
шта
В обоих вариантах я создавал стандартный WPF проект на Net 5. На первом пике ещё кое-какие проекты добавлены с зависимостями, но они же не должны влиять? Второй солюшен создал кое-что попробовать, можно сказать почти чистый темплейт ВПФ проекта.
Есть класс Device. Он типа представляет из себя, внезапно, устройство с которым можно связаться. Держит сессию с устройством(в зависимости от типа устройства, это либо реальное TCP-соединение, либо таки программная сессия для UDP, в который мы активность соединения обозначаем как - удалось в прошлый раз получить ответ). Каждое устройство - имеет набор Variable, Property и Action. Variable - объекты, которые можно читать/писать или читать и писать; помечаются Tag'ами, которые позволяют понять, что это такое в контексте системы(объект регистра 251 - температура, объект регистра 152 - факт открытия двери и т.д.)
Есть класс DeviceManager. Инициализирует список устройств, и объектов, которые можно считать с устройства. Предоставляет к ним доступ.
Есть 3 класса DeviceDashboardService, DeviceIntegrationService, DeviceDomainService.
DeviceDashboardService - раз в секунду - отправляет менеджеру запрос на чтение объектов дашборды, обновляет состояние дашборды, на фронт отправляет по веб-сокетам информацию, что обновилось.
DeviceIntegrationService - по запросу сторонней системы отдает менеджеру запрос, менеджер - устройству, потом отдает клиенту данные в виде который нужен клиенту
DeviceDomainService - раз в 10 минут отправляет запрос к менеджеру, чтобы почитались "доменные" объекты, которые важны безотносительно интеграции и дашборд(аварии всякие, координаты, выходы за пределы допустимых значений для показателей различных), затем - получив ответ - делает "доменную" логику, ну, типа включает сигнализацию, обновляет координаты на карте и т.д.
На текущий момент - обращение выглядит как
IReadRequest(int DeviceId, int[] VaribalesIds, Func<IReadResult, Task> onReadComplete);
Т.е. менеджер принимает этот запрос, диспачит его устройству. Устройство в своем потоке разгребает очередь этих запросов, в конце - вызывает onReadComplete;
Собственно. На текущий момент оно вот так выглядит.
И мне не нравится/
Чего хочу. Хочу чтобы было как-то более единообразно.
Жду предложений.
Есть класс Device. Он типа представляет из себя, внезапно, устройство с которым можно связаться. Держит сессию с устройством(в зависимости от типа устройства, это либо реальное TCP-соединение, либо таки программная сессия для UDP, в который мы активность соединения обозначаем как - удалось в прошлый раз получить ответ). Каждое устройство - имеет набор Variable, Property и Action. Variable - объекты, которые можно читать/писать или читать и писать; помечаются Tag'ами, которые позволяют понять, что это такое в контексте системы(объект регистра 251 - температура, объект регистра 152 - факт открытия двери и т.д.)
Есть класс DeviceManager. Инициализирует список устройств, и объектов, которые можно считать с устройства. Предоставляет к ним доступ.
Есть 3 класса DeviceDashboardService, DeviceIntegrationService, DeviceDomainService.
DeviceDashboardService - раз в секунду - отправляет менеджеру запрос на чтение объектов дашборды, обновляет состояние дашборды, на фронт отправляет по веб-сокетам информацию, что обновилось.
DeviceIntegrationService - по запросу сторонней системы отдает менеджеру запрос, менеджер - устройству, потом отдает клиенту данные в виде который нужен клиенту
DeviceDomainService - раз в 10 минут отправляет запрос к менеджеру, чтобы почитались "доменные" объекты, которые важны безотносительно интеграции и дашборд(аварии всякие, координаты, выходы за пределы допустимых значений для показателей различных), затем - получив ответ - делает "доменную" логику, ну, типа включает сигнализацию, обновляет координаты на карте и т.д.
На текущий момент - обращение выглядит как
IReadRequest(int DeviceId, int[] VaribalesIds, Func<IReadResult, Task> onReadComplete);
Т.е. менеджер принимает этот запрос, диспачит его устройству. Устройство в своем потоке разгребает очередь этих запросов, в конце - вызывает onReadComplete;
Собственно. На текущий момент оно вот так выглядит.
И мне не нравится/
Чего хочу. Хочу чтобы было как-то более единообразно.
Жду предложений.
>то ты вместо "вижу вот scope" постоянно вспоминать "ага до конца метода"
Ты ебанутый? Упрощенная форма using, как раз и придумана для случаев, когда тебе реально похуй, на то где объект задиспоузится. Она буквально означает указание "Приберись когда из метода выходить будеш". Если тебе важен момент когда ресурсы должны освободится, то ты продолжаешь пользоваться старым способом, со скобками. Ну или вообще try-finally если ты совсем старовер или из джавы пришел.
FlowDocument'ы с картинками.
Потому что при наследовании ты переопределяешь уже существующее поведение, а с интерфейсами ты всего лишь реализуешь контракт, для которого нет никакой реализации.
В файл, например.
Вообще наверно надо было спросить как хранить/клонировать FlowDocument, до сохранения содержащего его класса у меня ещё пока не дошло, но ведь FlowDocument придётся преобразовывать во что-то.
https://www.cyberforum.ru/blogs/529033/blog3840.html
Вот это изменение стандартного ICommand меня сбило с толку. А еще смутило запоминание предыдущего цвета прямоугольника prevColor.
Команда запомнит только последнее изменение цвета, а если я 10 раз запущу команду? Данные предыдущих 9 изменений канут в небытие.
Что предполагает автор? Что на каждое действие я должен создавать новый экземпляр команды? Но так не работает стандартная команда — экземпляр команды создается единожды, а далее используется Execute.
Из чего я делаю такой вывод:
Мне нужно создать свою команду с реализацией стандартного ICommand, внутри Execute(object parameter) я создаю новый экземпляр что-то вроде ICommandChange с методами Execute() и UnExecute() и скармливаю этот экземпляр менеджеру истории действий UndoRedoManager?
Чет какой-то оверинжениринг получается.
Вообще, это все про паттерн "Команда" ( https://en.m.wikipedia.org/wiki/Command_pattern )
Как бы интерфейс ICommand, который используется в паттерне к интерфейсу System.Windows.Input.ICommand отношения особо не имеет. Создавай свой отдельный интерфейс команды и реализуй его.
И да, на каждое параметризированное действие создаётся свой экземпляр команды со всеми параметрами этого действия. Иначе ты никак цепочку действий без потерь не сохранишь.
Книга C# 11 and .NET 7 – Modern Cross-Platform Development Fundamentals
Mark J. Price
>почему он называет класс и структуру обобщённо ТИПОМ?
Он не классы и структуры называет типами. Это int, string — типы.
Ага, вот только до этого он писал:
>
In C#, their equivalents are types, variables, fields, and properties. For example:
• Animal and Car are types; they are nouns for categorizing things.
• Head and Engine might be fields or properties; they are nouns that belong to Animal and Car.
• Fido and Bob are variables; they are nouns for referring to a specific object.
А что здесь не так? Если продолжать аналогию, то автомобиль — это один тип, а человек — другой тип, и тебе предлагают не заморачиваться насчет того, что одно ездит по шоссе, а другое ходит по тротуару.
А вообще, я тебе советую не заходить далеко с аналогиями, иначе начнешь сам себя запутывать. Собственно ты себя уже и запутал.
Все что чел предлагает, это называть интеджеры, стринги типами, не заморачиваясь на тем, хранятся ли они в стеке или в куче.
Там другая сторона медали. Формализм настолько запутывает простые вещи, что уводит в дебри непонимания не меньше, чем аналогии про машинки и людишек.
Чего стоит интерфейс. Нет бы назвать это шаблоном или требованием. Так еще в туторах начинают запутывать еще больше аналогиями с физическими интерфейсами, уводя твой разум в неведомые дали.
Ток щас делал тоже самое.
в впф стандартный MenuItem — он для всего.
В контекст MenuItem кладешь еще одни MenuItem.
Он там сам определяет что есть что, у него 4 триггера.
Пикрил 1.
Сложнее, когда тебе надо вставить список итемов не в всплывающем справа от стрелочки попапе, а как бы находящимися внутри итема. Тогда надо кидать в контент MenuItem.Header
Пикрил 2.
А может шизофрения у того, кто на любой пердеж любит придумывать аналогии, которые хорошо работают только в голове придумавшего аналогию .
Мне же не для впф, а для проводника. Когда на папочку кликаешь, должна строчка с моей программой появляться, а при наведении раскрываться.
копай в сторону батников, тоже самое потом сделаешь через консоль из своей проги.
https://stackoverflow.com/questions/8449167/how-do-you-make-context-menu-submenus-in-windows
>Ты ебанутый?
А ты быстр на такой. Значит не против если тебя нах пошлют с твоим самомнением.
А теперь по делу
>Если тебе важен момент когда ресурсы должны освободится, то ты продолжаешь пользоваться старым способом, со скобками
Я, ДА. Я не приветствую такое "мне пох когда", потому что у меня все строго - ничего не болтается сверх лишнего. Но я не все. Как говорится - "я не смотрю телевизор, но мне приходится иметь дело с теми, кто его смотрит".
Если есть фича, то значит будут те у которых "а мне пох вообще всегда" чем усложнять чтение и доработку его кода.
Потому эта фича приветствуется далеко не всеми.
Зачем она? Меньше скобок? - так скобки указывающие на скоуп наоборот приветствуются.
Меньше вложенности? - Лучше бы сделали нормальный множественный using вместо того убожества.
>>79569
в структуре будет выделена память на ссылку (8 байт на х64) на кучу со значением.
Наверно тебе нужно погуглить винапи для создания системных контекстных меню. Там наверняка есть подкласс для описания дочерних подменю.
Ну так а кто мне вернет время, которое я просрал, доверевшись сладким речам ютубера-инфоцыгана?
Никто. Читай метанит и доки и практикуйся.
Разбрешься. Он очень логично устроен, хотя позволяет писать некотрую магию через атрибуты и рефлексию.
>>79576
>почему он называет класс и структуру обобщённо ТИПОМ?
Переменные могут быть классами или структурами и в общем виде это называется "тип переменной". В широком смысле тип определяет поведение переменной и все что с ней можно сделать.
используй рецепт " как выучить с++ за 21 день". с шарпом оно тоже работает проверено.
>интерфейс. Нет бы назвать это шаблоном или требованием.
Но ведь он не является шаблоном, а требование - лишь часть его назначения, не?
Плес..
Не, автор книги просто путает объекты и типы. Он считает, что это умно новичкам не объяснять, что такое класс, что такое объект класса, что такое структура. И просто на похуях обзывает ВСЁ это типами: класс, структура, все примитивные типы.
В сравнении с этой книгой метанит это сикп.
не вижу проблем в параграфе
Ну вот я и пишу, что умные дядьки посидели, голову почесали
и такие "так бля, шаблон уже занято, требование — не емкое описание" и придумали название "интырфейс".
Ну формально подходит, но понимания не дает.
интерфейс никак не является шаблоном. интерфейс описывает контракт взаимодействия с объектом, считай точка дотсупа/работы с этим объектом. А это и есть интерфейс (смотри хотя бы аналогию с сетевыми интерфейсами)
Класс это тип данных, структура это тип данных, типы данных целых чисел или чисел с плавающей запятой. Даже функции это тип данных ибо в том же С++ можно объявить переменную типа функция.
У тебя каша в голове.
Интерфейс это описание поведения. Че вы все пытается каким-то ебнутым языком говорите выучив еба определения
Вот код:
foreach(var it in _db.SomeItems)
{
var items = _db.Items.Where(x=>x.Fk==it.Id).ToList();
QueueManager.Handle(it, async (ctx) => await OnComplete(items));
}
QueueManager.Handle - в отдельном потоке разгребает очередь.
Собственно в чем вопрос.
В OnComplete - будут переданы все нужные данные, либо же эта хуйня захватит только для последнего it?
> что такое класс
Способ описания контракта, чтобы рантайм - знал куда в памяти положить говно всякое
> что такое объект класса
Просто область памяти в которой лежит говно всякое.
> что такое структура
Буквально то же самое, что и класс, только называется по другому
> И просто на похуях обзывает ВСЁ это типами
Потому что это и есть ТИПЫ, блядь. Тип - это просто некое соглашение, о том, что это такое, что мы с этим можем делать, что не можем, описание некоторых ограничений. Все, блядь, это тип.
Сеньер
Причем тут анонимные функции додик? Знаешь умное слово решил пернуть?
Я ещё круче знаю. Лямбда-выражения
ну типа шарпист будет скобку на новой строке делать
выше на эту тему был спор
и я был как раз тот, кто говорил что лишнескобство есть дичь.
по факту же даже в студии просто набираешь в одну строку и она сама по нажатию ентер перенесет скобки. Тот кто жмет ентер заранее самостоятельно - ну жаль его.
Хуй-то там, товарищ.
Студия делает ровно так как прописано в .editorconfig в первую очередь.
Я вот сейчас работаю одновременно над проектами где и тот и тот стиль применяется. И я уже настолько преисполнился в своем познании, что мне похуй где там эта скобка, на новой строке или предыдущей.
Поэтому я обычно просто набираю текст в открытой студии и копирую его. А как она там скобки расставит - по барабану.
Вот тебе интерфейс:
interface IFoo
{
void Bar();
int Buzz();
}
Какое поведение тут описано-то, лол?
То что Buzz - вернет int а Bar - ничего?
Ну такое. Потому что таким хуем - ниже - одинаковое поведение.
class A : IFoo
{
void Bar() => throw null;
int Buzz() => -1;
}
class B : IFoo
{
void Bar() => Console.WriteLine(42)
int Buzz() => _socket.Receive(Array.Empty<byte>());
}
>анонимные функции
Это процедурный тип. И кстати это объект с метаданными, которые полностью описывают структуру вызова, а не сырой указатель хуйпоймикуда как принято у плюсовых каличей.
Метод доступа get для поля класса age типа int. Ты просто туповатый и не вкурсе что само поле будет добавлена уже в классе. Интерфейсы суть обеспечивают наследование таблицы виртуальных функций.
Сейчас можно добавить реализации, но именно в плане свойств сами поля создаются именно в классах
А че такое рантайм? Чем отличается от компиляции и интерперетации?
Диспоз у итератора?
А вы знали что если в последней визуал студии используется в проектах global using (а он по дефолту используется) почистить папки obj/bin, то эта фича ломается пока в настройках проекта не выключишь галку и снова не включишь? И бесполезно удалять .vs, ребутать студию, смотреть на *.csproj где все нормально.
Вы знали, а я вот только узнал.
А вы знали что если их не чистить, то там скапливается куча файлов для каждого фреймворка которые пережил проект? и вот он дорос до нет7, а там файлы для неткор 3.1 лежат и будут лежать вечно и чистить приходится.
У меня не копится ведь я не долбоеб и чищу проект с помощью cleanup project.
Зумеры познают мир
>используется в проектах global using
Не знал, потому что принципиально не пользуюсь этой штукой.
>почистить папки obj/bin
А разве так можно? Там же лежат импортируемые библиотеки.
Решение не загнется?
Нет, туда компилируются бинарки при билде солюшна. Собственно bin и obj всегда чистятся при клине.
>всегда чистятся при клине
Нет. Клин удалит скомпилированные бинари
Весь остальной хлам останется.
Чистить obj полностью это сриптиком надо.
В общем clean solution лишнего не чистит.
Дропнуть bin безопасно если у тебя в нем ничего нет что не хотелось бы удалять.
дропнуть obj всегда было безопасно - все сразу пересоздаст и вот впервые стало опасно - у меня отвалился global using и я не понимал почему он его не перегенерил как все остальное.
Потому что солюшены с которыми я работаю часто содержат по несколько проектов плюс подключаемые сабмодули. Там такой зоопарк с неймспейсами иногда бывает, что разрулить нормально через глобальный юзинг - хуй там плавал.
Никто не пытается сбежать. Каждому инструменту своя задача. Предпочтение не значит абсолют.
так не нужно, что если убрать наследование из языка, то все взвоют. Желаю удачи даже с простейшими отношениями воробей-птица-животное. Желаю удачи с многочисленными хелперами ибо абстрактных классов нет, а интерфейсы их совсем не заменяют. Желаю удачи с типизированными коллекциями, которые нельзя будет использовать ведь нет общего типа. Желаю удачи запилить свой гуи фреймворк без наследования и офигеть от неудобства. Удачи в написании игр...
ну и так далее.
Ну ладно в коллекциях можно юзать как типы интерфейсы. Но все равно делегирование придется впихивать в сам класс. Делегирование ВСЕГО.
> зачем оно вообще нужно?
Представляет одно из базовых отношений между типами, а именно "является".
Композиция: А "состоит из" B, C, D - любоя часть не может полностью заменить A.
Наследование: А "является" специальным B. Тут фича в том что А и B - могут быть взаимозаменяемыми для тех алгоритмов где используются их общие черты. Это часто полезно.
>Ведь композиция лучше наследования ¯\_(ツ)_/¯
Если у тебя куча депенденси проперти в базовом классе, че делать будешь, петух?
Ты когда пиздел про композицию, которая лучше наследования, мылом не чет пользовался.
Тогда прыгали осознанно, восстановив проёбаную за год до этого нумерацию. А сейчас какой-то даун просто умножил на 2.
В общем. Никто ничего не посоветовал(((
Как я сделал.
Я сделал класс CommDeviceReadAction, DeviceCommandDispatcher,
CommDeviceReadAction - следующего вида:
{
public int DeviceId;
public int[] Variables;
public Func<ICommDeviceReadResult, CancellationToken, Task> OnCompleteCallback;
}
Диспечер - ищет устройство, находит, отдает устройству, получает ICommDeviceReadResult и вызывает OnCompleteCallback
В фоне - DeviceDashboardService менеджеру отдает CommDeviceReadAction с активными устройствами и тем что на их дашбордах
В фоне - DeviceDomainService менеджеру отдает CommDeviceReadAction с активными устройствами и тем что мы пометили как доменные объекты, потом находит нужный IDeviceDomainHandler и обрабатывает это говно.
Ну и контроллер - отдает DeviceIntegrationService'у запрос. Тот формирует CommDeviceReadAction'ы и отдает диспечеру, В коллбеке пишем в шину на внешний сервис че прочитали.
Собственно вот так и сделал.
Не нравится все равно. Но раз советов не дали, будет так. Эх. Да.
Нормально. Сходу и без кода все равно лучше ничего не придумать.
Совершенный код Маконнела прочитай(есть на русском). Сирисли, мне он очень помог отрефлексировать некоторые моменты говнокодинга. Дядю Боба не читай - у него больше воды и меньше контрольных вопросов в чеклистах.
Вообще нет, обычно есть девопс, который занимается этим. Но хорошо понимать как это работает, можно будет на собесах пиздеть "Выполнял функции девопса, создавал пайплайны и писал скрипты для диплоя приложений", сразу +10% к зарплате.
Хороший вопрос. Если коротко - DateTimeOffset имеет смысл использовать если приложение работает в нескольких часовых поясах. Но на практике везде время хранится в DateTime в UTC, без выебонов. Тут уже какой подход выберете, потому что и одно и другое правильно.
Майки опять наебали с бенчмарками.
Получается надо было учить джаву?
В БД однозначно хранишь время в DateTime в UTC, а в самом приложении уже в зависимости от потребностей.
И?
1920x1080, 0:01
Джависты полгода как разучились правильно перекатывать треды. В шарпе пока ещё помнят, хотя прошлый тред перекатил даун и джава-треда.
>the library cannot be used without a more up to date IDE (eg. VS 2022 17.3 or greater) or .NET SDK version (.NET 6.0.400 SDK or greater)
эт мне чего получается надо на 2022 переползать с 2019? посоны?
Качай старую версию либы.
Это копия, сохраненная 15 марта 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.