Это копия, сохраненная 10 ноября 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://docs.microsoft.com/ru-ru/dotnet/maui
5. С# для создания нейросетей
— https://docs.microsoft.com/ru-ru/dotnet/machine-learning/
6. С# для игр
— https://ru.stackoverflow.com/a/609901/422180
7. Годные ютуб-каналы
— https://www.youtube.com/c/CODEBLOG
— https://www.youtube.com/c/AndreyShyrokoriadov
— https://www.youtube.com/c/DevJungles
— https://www.youtube.com/user/Shmachilin
Прошлый >>2740238 (OP)
Судя по пикам, шарп существует только для того, чтобы быть костью в горле жабы.
Я ебу? Видать, за поддержку легаси из 2005.
Ты, блин, из какого года эти оппики взял? Особенно второй.
Исключительно для того, чтобы ты мог здесь и сейчас задать этот вопрос.
Гонять и насмехаться над джавой - дело богоугодное
Всем.
Первая картинка ложь, сисярп давно мультиплатформа и имеет открытые сурцы.
Не понимаю, как на винде языковой сервер в виме использовать?
Как темки настроить(стандартная таки всратая)?
Как перенастроить использование команд не из cmd а из павершела?
Что висуал студио? Мне лабы делать надо. Зачем мне качать 10+ гигабайт хреноты, которой я пользоваться не буду?
Будешь пользоваться при написании лаб и потом удалишь.
Пользуйся визуал студио и не выебывайся
Пользуйся тогда VS Code, он сотню мб весит.
При этом C# можно компилировать в такой же нативный код, как выдаёт раст или С, используя LLVM, который давно уже прикручен к шарпам.
https://dotnetfiddle.net/R2aHaC
>CLI. Серьёзно.
Серьёзный жир, да? Я в компьютерах с 80-х, и даже тогда графика была широко в ходу. Кукарекающий за командную строку это по дефолту жирный дегенерат, не говоря уже про 2023, вообще абсурд.
>Я в компьютерах с 80-х,
У нас недавно одного такого опытного недавно уволили. Тоже еще во времена DOS начинал. Не смог освоить работу с линуксовым стендом в консоли по SSH.
Надо было ему дать Telnet.
>инфоцыгане
Кстати, даже инфоцигане сейчас домохозяек обучают в консоли работать. По гиту так вообще все курсы только работе с консолью обучают.
Эксепшены нужно ловить там, где ты не можешь на процес повлиять в I/O например. Зачем это делать там, где можно без них обойтись?
Плюс, очень часто бизнес логика допускает, что значение не может быть распарсено и имеет свою ветку выполнения на это. При использовании TryParse, ты получаешь четкий флаг, того как обработалось значение и можешь спокойно делать то, что нужно. А вот в случае try/catch, ты можешь знатно поебстись, т.к. тебе либо придется прописывать дополнительную логику в catch (что уже большой долбоебизм), либо прописывать этот флаг там, что тоже нифига не улучшит твой код.
> Эксепшены нужно ловить там, где ты не можешь на процес повлиять в I/O например.
Когда кабан орет из-за высокого процента крашей хуячишь их в каждый метод...
Сеньоры - мудрецы, дайте знания
Вкатываюсь в it. Почему - то сильно понравился си шарп и хочу в него вкатиться.
Но проблема в том что майки 30 сентября поддержку прекращают в РФ, а я заводить трактор не собираюсь тк не знаю английского и вряд ли его в 21 выучу.
Так вот вопрос
Стоит ли выкатываться в си шарп чтобы найти работу в рф и свои мини проекты лепить?
И хули с ними в каждом методе делать? Обосравшись прокидывать выше? "не ну выше то точно кто то нормально захэндлит!"
очевидно со значимыми типами и там где очень нужно передать по ссылке (не путать передать по ссылке и передать ссылку)
>>09108
жавистам ничего не нужно. они говноеды.
возьмем пример. я не знаю как у жавистов, но допустим имеем мы изображение и нам нужно работать с пикселями напрямую и можно читать примерно так (пример ImageSharp)
ref Rgba32 pixel = ref pixelRow[x];
далее как бояре работает с объектом пиксель. А что в жаве по этому поводу? 4 отдельных переменных r g b a и таскаться с ними? В объект их нельзя - будет аллокация.
>>09500
видимо тред перекатил жавист. (хотя может этот тред и не перекат никакой). ведь о нем не было сказано в последнем треде.
>>12725
жвм говно из за отсутствия значимых типов и похеренных дженериков. котлин няшка, в которой конечно нет того что рантайм не позволяет. Но в плане выразительности котлин няшнее шарпа.
>>14296
эксепшены нужно ловить там где ты знаешь что с ними делать и тебе нужно что то с ними делать.
>А как на тебя должен их уход повлиять?
Ну си шарп это же от микрософта и вся экосистема ( one drive, почта и т.п ) отлетит
или я не так размышляю?
> эксепшены нужно ловить там где ты знаешь что с ними делать и тебе нужно что то с ними делать.
Никто обратного и не доказывает. Просто пришел тут в одном место работать а там без шуток огромная гора try catch у которых в обработке одинокий throw ex;
>>14304
Я понимаю если бы ты ажур клауду с потрохами продался, но тебе максимум что сулит из проблем это студия только с впном качаться будет.
Оракл давно уже сделали ноги с рынка и ничего джава вроде внезапно не трансформировалась в тыкву
>а там без шуток огромная гора try catch у которых в обработке одинокий throw ex;
Т.е. мало того что, код засрали, так и стектрейс еще на похуях проебывают.
>Но проблема в том что майки 30 сентября поддержку прекращают в РФ
Типа до этого тут дохуя поддержка от них была.
Просто линукс выучи и все. Ну а вдруг лицензии понадобятся, вон китайцы под боком.
>а я заводить трактор не собираюсь тк не знаю английского и вряд ли его в 21 выучу.
Можно подумать, будто если бы ты знал английский, то проблем завести трактор у тебя бы не было. Даже не учитывая твой возраст.
А потом начинаешь работать на одного заказчика
В итоге он тебя релоцирует.
Или работаешь на аутосорсе и тебя потом со всей командой тракторят
Ничего необычного.
>он мог бы флилансить на буржуинов
Вкатун фрилансить в 2023-м. Ну-ну.
>Или работаешь на аутосорсе
Та же хрень. На аутсорс сейчас нанимают либо совсем прожженых милордов, либо по знакомству.
Чувак, ты жопой читаешь? Речь шла о том, что анон не знает инглиша и на основе этого не собирается за бугор. Но даже если бы знал, то на ситуацию это бы мало повлияло.
К чему тут твои манятеории о том, как он там мог бы работать и как там могло бы быть? Это и без твоих соплей понятно, что можно работать на аутсорсе и чисто гипотетически потом переехать, хотя кому ты нахуй нужен, релокейтить тебя. Особенно пассажир из Рашки в 2023.
>Но даже если бы знал, то на ситуацию это бы мало повлияло.
пока ты вкатун и позиционируешь себя как вкатун - да.
>ты нахуй нужен, релокейтить тебя
если ты спец то плевать откуда ты. другое дело что ты можешь быть связан договором. это да.
>Особенно пассажир из Рашки в 2023.
А что с ним в 23 году. Как бы много народу что уехало работать - они как бы тоже из той же страны.
>А что с ним в 23 году.
Да нихуя. Всё нормально. Ничего не происходит. Дыши ровней.
>Как бы много народу что уехало работать - они как бы тоже из той же страны.
Мне нужно тебе объяснять, что из числа айтишников уезжали как минимум мидлы с минимум 5 летним стажем и целой кучей припасённого бабла или ты сам додумаешься?
>Всё нормально. Ничего не происходит.
именно так.
Вкатуну же скажу что при его раскладе лучше выбрать язык на котором есть вакансии там где он расчитывает работать. Майки вообще не причем - сам по себе в ру зоне шарп не очень популярен.
А англ пусть выучит.
>именно так.
Это был сарказм, ты хлебушек ёбаный. Война идёт, долбаёб. А все граждане рф теперь в западном мире нерукопожатные. Возится с релокейтом Ваньки никто не хочет и в 90% случаев не станет. Хотя бы потому, что есть еще тыщи Тарасов и уже приехавших Ванек- мидлов и сеньёров, да и своих спецов хватает. Усёкла, чудила?
>Продолжай в это верить.
Тут не во что верить, Вася. Это можно проверить на практике. Я понимаю почему ты так не согласен. Потому, что сам хочешь съебать отсюда именно через заключение трудового договора с кабанчиком из ЕС или США. Ставлю косарь, именно для этого ты и вкатывался в ОЙти.
Но вот в чем проблема, копируется ТОЛЬКО контент т.е. всякие текстовые файлики, джейсончики и конфигурации.
А у меня словарь ресурсов с прикрепленным .cs (пикрил 3). У словаря BuildAction:Page, а у cs-файла BuildAction:Compile. Поэтому блок из пикрил 1 переделывает этот словарь ресурсов в контент, и cs-файл не видит его, сразу же становится недоступен метод Initialize(). (пикрил 4)
Можно как-то это говно обойти, или невозможно?
вообще раньше и Fody создавал хмл файл, а потом перестал, и Nlog тоже.
А еще был пакет, не помню как называется, но там их много и каждый для одной функции расширения к LINQ. И вот оно ставилось и создавало именно cs файл с одной функцией расширением
вот как Morelinq, но он сразу много чего тащит, а там конкретно одна функция
что то типа netfx, но чет ничего не нахожу. Видимо такое больше не работает и все это удалили.
ага. вот они
https://www.nuget.org/packages?q=netfx-System.Collections.Generic.IEnumerable
только щас оно сниппеты лепит куда то
в общем не то что тебе нужно.
Раньше при установке можно было исполнять павершелл скрипты, с какой то версией деприкейтнули (и к лучшему)
>>15853
Думаю, хрен с ним, пусть будет два файла, один как Page, а другой как Content, но я не хочу это каждый раз вручную копировать. Пытался через команды, типа XCOPY воспользоваться, чтобы перед сборкой копировало само, но опять же почему-то работает только с Content-файлами. Мб словарь ресурсов и cs-файлы заняты.
Вроде лежат в одной папке, но даже если я копирую папку целиком, то копируются только файлы, помеченные как контент.
>>15877
Так, разобрался. Короче, все через жопу, но результата я своего добился.
Теперь я свободно работаю со словарем ресурсов, а далее перед сборкой, этот файл копируется в этот же проект при помощи команды 'copy'. И уже при помощи >>15838 копия определяется как контент и копируется нюгет-пакетом в импортирующий проект.
Из неудобств — дублирование файлов, которое может сбить с толку и случайное редактирование не той копии (не смотря на то, что я это разделил разными папками). Установил для этих файлов read only чтоб наверняка.
Вопрос.
Как без множественного наследия сделать примерно следующее:
public class EventEmitter<T>{
private IList<Action<T>> _eventHandlers;
public void Emit(T e){ Какая-то логика по публикации события }
public IDisposable Subscribe(Actinon<T> eventHandler){ // логика подписки }
}
public class User : EventEmitter<LoginEvent>, EventEmitter<LogOffEvent>{
// Собственно логика класса юзера
}
Конечно, можно сделать типа интерфейс, дефолтную имплементацию создать в пользователе, потом пробрасывать вызовы к этим дефолтным интерфейсам, но блин. Как жижа выглядит.
Ну есть два способа:
1. Множественное наследование (считается зашкваром)
2. (не помню как называется) Когда ты в "class User" создаешь два приватных поля с экземплярами "EventEmitter<LoginEvent>" и "EventEmitter<LogOffEvent>"
А дальше к ним обращаешься через свойства или методы. Ты так можешь хоть тысячу классов объединить и это будет куда практичнее. У тебя даже суть твоих двух классов не подразумевает наследование, даже не скажешь кто и кого должен наследовать первым.
Но несмотря на надменность некоторых пидоров к наследованию, не стоит от него отказываться вообще. Если это в пределах 1-2 классов, то гемора с наследованием будет меньше.
>Если это в пределах 1-2 классов
я имел ввиду, если наследование ограничивается 1-2 классами, либо что-то одно является ну прям базой всего остального.
- Наследование (то что у тебя щас)
- Реализация (то что ты предложил в качестве альтернативы)
- Композиция
- Ассоциация
- Агрегация
https://metanit.com/sharp/patterns/1.2.php
Именно поэтому
1. Хранить в обджекте - плохая идея из-за аллокаций. Это делается только в исключительных случаях, в основном в wpf.
2. CastTo<T> небезопасен, а проверять КАЖДЫЙ тип персонально — это ебануться какой сизифов труд.
<Thickness x:Key="Static.BorderThickness">3</Thickness>
<Style x:Key="{x:Type Button}" TargetType="{x:Type Button}">
. . . <Setter Property="BorderThickness"
. . . . . . . . . Value="{DynamicResource Static.BorderThickness}"/>
</Style>
Но я хочу сделать посредника, чтобы у меня Thickness ссылался на еще один Thickness.
<Thickness x:Key="Static.BorderThickness">3</Thickness>
<Thickness x:Key="Button.Static.BorderThickness" Left="{DynamicResource Static.BorderThickness.Left}" />
<Style x:Key="{x:Type Button}" TargetType="{x:Type Button}">
. . . <Setter Property="BorderThickness"
. . . . . . . . . Value="{DynamicResource Button.Static.BorderThickness}"/>
</Style>
Но Thickness это структура и у нее нет Dependency Properties. И хз как это обойти.
Даже если посредником будет условный класс Border, у которого есть свойство BorderThickness, то я не знаю как к нему обратиться при помощи DynamicResource.
<Thickness x:Key="Static.BorderThickness">3</Thickness>
<Border x:Key="Button.Static" BorderThickness="{DynamicResource Static.BorderThickness}" />
<Style x:Key="{x:Type Button}" TargetType="{x:Type Button}">
. . . <Setter Property="BorderThickness"
. . . . . . . . . Value="{DynamicResource (Button.Static).BorderThickness}"/>
</Style>
И как быть вообще?
<Thickness x:Key="Static.BorderThickness">3</Thickness>
<Style x:Key="{x:Type Button}" TargetType="{x:Type Button}">
. . . <Setter Property="BorderThickness"
. . . . . . . . . Value="{DynamicResource Static.BorderThickness}"/>
</Style>
Но я хочу сделать посредника, чтобы у меня Thickness ссылался на еще один Thickness.
<Thickness x:Key="Static.BorderThickness">3</Thickness>
<Thickness x:Key="Button.Static.BorderThickness" Left="{DynamicResource Static.BorderThickness.Left}" />
<Style x:Key="{x:Type Button}" TargetType="{x:Type Button}">
. . . <Setter Property="BorderThickness"
. . . . . . . . . Value="{DynamicResource Button.Static.BorderThickness}"/>
</Style>
Но Thickness это структура и у нее нет Dependency Properties. И хз как это обойти.
Даже если посредником будет условный класс Border, у которого есть свойство BorderThickness, то я не знаю как к нему обратиться при помощи DynamicResource.
<Thickness x:Key="Static.BorderThickness">3</Thickness>
<Border x:Key="Button.Static" BorderThickness="{DynamicResource Static.BorderThickness}" />
<Style x:Key="{x:Type Button}" TargetType="{x:Type Button}">
. . . <Setter Property="BorderThickness"
. . . . . . . . . Value="{DynamicResource (Button.Static).BorderThickness}"/>
</Style>
И как быть вообще?
нормально делать получателя так
class User: IHandler<Event>
тот же медиатор так делает.
Но нет никакого смысла делать отправку сообщений так, когда объект может просто владеть объектом eventEmiter и слать сообщения.
>>16458
в языке и так есть 2 синтаксиса каста. засирать ВСЕОБЩИЙ БАЗОВЫЙ класс еще и методами = палки в колеса тем, кто захочет использовать методы с такими именами для своих нужд.
>>16616
вот чем впф ущербна, так это работой со стилями. Ты слишком много от нее хочешь
Теперь вопрос. Как прикрутить к нему LS, чтобы подсказочки там, ссылочки, переход к определению и всякие рефакторинги, чтобы как в VSCode короче.
Как стыдно перед Си-анонами...
>вот чем впф ущербна, так это работой со стилями.
Да пипец, я всю голову себе сломал.
>Ты слишком много от нее хочешь
Я хочу от нее базы — динамической смены темы и скинов.
Но все туторы, что я видел по динамическим темам, немного облегчают боль, но не решают всех проблем. Все как один приколачивают гвоздями многие свойства, либо создают вещи, которые непонятно как в дальнейшем модифицировать.
Один чел решил сделать enum из стринговых ключей ресурсов цвета. А что если те, кто будет пользоваться его библиотекой, захотят расширить список ключей? Enum не умеет в наследование. Что с этим делать? Мастерить какой-то конвертер?
Или берет условный ресурс SolidColorBrush с ключом "BorderThickness" и привязывает все стили к нему. А если надо будет изменить толщину только для тексбоксов не трогая все остальные контролы? Мне придется перелопачивать стили.
Короче я решил свою проблему весьма долбанутым способом, но решил. Через StaticResourceExtension мой Thickness-посредник получает данные от Thickness-оригинала, но единожды, как статический ресурс. Но тогда образуются проблемы с обновлением в рантайме, поэтому я всех посредников выделяю в отдельный словарь, и при каждой смене темы я генерю новый экземпляр словаря и комбинирую со всем остальным.
Так что я добился пока самого идеального менеджера тем с регулируемой гибкостью настройки. Не решен (частично) только один вопрос — добавление внешних стилей.
Никак, вим не поддерживает шарп.
Код:
public class Size
{
int width;
int height;
public int customWidth = 0;
public int customHeight = 0;
void If(int customMapHeight > 0)
{
int height = customMapHeight;
}
}
Красным подчёркнут знак '>' (строка с if)
Я где только запятую не пытался ставить, не помогает. Что это за ошибка?
У тебя тип возвращаемого значения стоит перед if. Убирай его. Или если ты хотел сделать метод, тогда убирай > 0.
Ну судя по тому, что у тебя сласс Size, ты хотел сделать метод, так что убирай > 0. и если тебе нужна проверка, то пихай её внутрь метода.
У тебя вообще не валидный код, няша. ХЗ чего ты добиться пытался.
Суть.
У класса - могут быть
Конструктор - это процедура, которая будет выполнена перед созданием экземпляра класса(ака объекта).
Поля - это такие-то переменные, в рамках объекта, ака - состояние этого объекта, ака - контекст
Методы - это функции и процедуры, которые имеют доступ к полям, свойствам, событиям и другим методам класса
Сверху
Свойства - сахарок позволяет тебе избавиться от постоянной пары методов Ассесора и Мутатора(ака геетера-сеттера)
События - сахарок, чтобы ты паб-саб не реализовывал постоянно, пусть и с некоторыми проблемами.
Собственно. Да.
А тот код что у тебя - это не класс, а ХЗ что.
Спасибо за оперативный ответ. Сейчас ошибок нет, а чтобы проверить как он работает, мне нужно написать дополнительный код.
>Я хочу от нее базы — динамической смены темы и скинов.
зачем. ох уж эти красочные интерфейсы
дизайн должен быть хардкорным - 100 кнопок и 10000 таблиц на одной форме.
Просто ты бежишь от проблем. Если бы UI писался левой пяткой, то ты бы так не утверждал.
У меня нет проблем. Я пишу софт для внутреннего использования. И вот там темы, анимации и прочие перделки - никому нах не нужны и даже наказуемы. А вот старые добрые таблицы, многооконность и "много инфы на экране" - очень даже приветствуется, ибо ехать, а не шашечки.
Вернее проблемы есть - ибо работать со стилями в впф таки нужно и много (это ж в WPF - там миллион косяков нужно лечить через стили).
Дизайн не противоречит функциональности. Студия выглядит вполне таки стильно и молодёжно при этом упихивая тонны иконок и панелей в тонны окон.
В внутренних же продуктах у юзеров просто нет выбора, вот потому и выглядят корп порталы/софт как правило как говно (да и работают примерно так же)
А у меня есть другой пример - idea-based редакторы. И вот там начала задвигать идею "а давайте сделаем минимализм по типу visual studio code", как будто это хорошо.
Хорошо что эту дрянь можно отключить.
>у юзеров просто нет выбора
но не потому что "жричодали", а потому что иначе просто неудобно работать. Даже вон в десктопном телеграме сделали возможность выделить разговор в отдельное окно, что как бы нарушает дизайн "делаем аля у нас тут планшет, а не какой нибудь qip"
и забыл - даже в студии вон хотят задвинуть новый дизайн с большими отступами. Исключительно ради "а че другие пидорасничают, а чем мы хуже"
и тонны всего просто перестанут упихиваться.
1. Хоть и сижу на старой теме в джетовских продуктах (новая совсем говно) но и старая не нравиться особо из-за ограниченности в композе панелей в окне.
>>17429
2. Новость видел давно, надеюсь их бог покарал и инициативу свернули
3. Ты привёл пример и я привел. Сделать красиво и удобно можно, но бизнес за это платить не будет. Проклятый мир который мы сами создали
>Новость видел давно, надеюсь их бог покарал и инициативу свернули
В мае было. Тема вроде заглохла, но не до конца, они вроде как фидбек переваривают. Там народ им в принципе аргументированных хуйцов прилично натолкал в обсуждении, но и долбоебов вопящих "Круто, новый интерфе-е-ейс" тоже немало было.
А еще они похерили старую добрую контрастную синюю тему с 17й студии. Хорошо что решается через расширения, но это показательно.
>А еще они похерили старую добрую контрастную синюю тему с 17й студии.
Согласен. Синяя тема была топ.
Ниче не заглохла. Видел скриншоты от дев команды с новым интерфейсом студии. Внутренний тест идет. Думаю, к 8 дотнету выкатят.
проблевался? я не слежу, но после того как в файрфоксе сделали дебильные отступы просто "а пусть будут" и в итоге вкладки стали выглядеть как кнопки, а закладки просто не влезать в экран - от такого дебилизма просто тошнит и хочется уе...ь (и это не уехать)
Там не понятно нихуя. Скрины были по фитче, не от команды UI. Кусок контекстного меню и только. Суть в том, что фемки зашарили свой интерфейс на остальных. Тестят всем майкрософтом.
1. Допустим, в nuget-пакете есть перечисление с расширениями аудиофайлов
enum
{
. . . mp3 = 0,
. . . wav = 1
}
И я хочу добавить расширение ogg. Как это сделать правильно или хотя бы легко? Понятно, что когда всего два элемента, то можно вручную создать свое перечисление, но если взять полный список всех расширений файлов, то он будет содержать до сотни элементов. И самое главное как сделать совместимым с оригинальным enum?
Решения, кроме создания метода расширения для конвертации я не нашел. Ну и собсно гемор с ручным переписыванием всех итемов.
Это что ли?
Тут явно ориентир на большие мониторы. Так-то если сейчас открыть студию 2022 на мониторе 800х600, то едва ли там влезет хотя бы одна панель.
Сделали закругленный десигн, как у шиндовс 11.
Ну и отступы я так тоже делаю, лол, тут спорное решение. Я считаю, что для приложений с более широкой аудиторией можно жертвовать информативностью в угоду красоте, а для технических нужно приоритет ставить на функционал.
Но отступы увеличивают читабельность, а в профессиональной среде иметь минимум 2 монитора на специалиста это уже норма. Попытка запихнуть ВСЁ в один экран с разрешением 1280х900 — это слабоумие и отвага.
Ну да, раньше все влезало, ну так и мультимониторов или 4к мониторов раньше не было. А теперь есть, так почему бы не сделать лучше? Понятно что соснет одноминитораня челядь, но кто они такие? Они теперь в меньшинстве — их черед страдать. А для 4к мониторов увеличение UI только в плюс, ибо там все СЛИШКОМ мелко.
Сижу на ультравайде с 4к по низу на 100% скейле. Считаю дизайн текущей студии идеальным. Отступы просто жрут полезное пространство.
Рака жопы таким слабовидящим как ты. Скатываете всё до уровня бабушкофонов
Лично я для своих приложух указываю настройки масштабирования и спейсинга. В любом проф софте у тебя есть целая кипа настроек.
Все таки вся эта ебля со скинчиками UI и создана для того, чтобы каждый настроил рабочее пространство под себя. Хош — берешь скин как на XP, хош как на модной 11, хош светлую тему, хош темную, хош модные шрифты да покрупнее, хош крупные иконки, хош иконки + текст.
Непонятно хули вы тут осуждаете то, что буквально создано для решения вашей проблемы. А то, что многие производители оскотинились и забили на вариации, ну так это классика почти для любой области.
>Считаю дизайн текущей студии идеальным.
Ну это ты считаешь, а другой — нет. Анон выше сожалел о синей теме, а другой бы изошел на говно, увидев ее.
>Рака жопы таким слабовидящим как ты.
А знаешь почему я стал слабовидящим? Из-за мелких отступов в предыдущих темах UI.
>иметь минимум 2 монитора на специалиста это уже норма
- которые расположены...ммм.....рядом с друг другом? ведь да? ну рядом же?
- ясно. владельцы ноутов не профи. зопесал.
И потом твое расширение по большущей пизде пошло бы, когда в нюгете собственное расширение изменят.
>Непонятно хули вы тут осуждаете то, что буквально создано для решения вашей проблемы.
Это было бы так, если бы они действительно предлагали это как какой-то вариант кастомизации. Но будет скорее всего замена старого на новое, как когда-то везде начали применять ублюдочный риббон, вместо нормального интерфейса.
Я, кстати удивлен, что до студии эта тема не докатилась, хотя некоторый серьезный инженерный софт в свое время тоже наступил в это говно.
>Сделали закругленный десигн, как у шиндовс
И поскольку он способствует сливанию элементов в единую кашу решили сделать отступы побольше. Еще и выделение активного элемента ухудшили.
1 енумы в шарпе убоги
2 для такого используется адаптер. паттерн такой.
конечно если ты не хочешь сделать свой нюгет пакет расширяющий первый. тогда или все таки делать адаптер или пункт 1
Ищи чет другое, на данный момент работы для джунов нет вообще нихуя, я уже не первый месяц ищу.
Новый интерфейс райдера топ кстати
Как создать несколько объектов, название которых задаётся кодом а не вручную (b1, b2, b3, b4)?
Для задач когда у тебя куча похожих объектов и тебе их нужно различать в коде, была придумана куча способов. Массивы, списки, словари, базы данных и т.д.
Ты же хочешь использовать самый ебанутый, с кучей переменных/объектов отличающихся друг от друга именами.
Понял. Но словарь содержит лишь два свойства об объекте (имя и значение), а что если значений 2 или больше?
>оторые расположены...ммм.....рядом с друг другом?
Да хоть вокруг. Суть моего посыла в том, что у пользователя увеличилась площадь экрана. Для этого либо ставят несколько обычных мониторов, либо один большой. Лично я сторонник перового варианта.
>ясно. владельцы ноутов не профи.
Если на постоянке работают, то как минимум долбоебы. Если используют как мобильный девайс для командировок или выездов на объекты — то отличный вариант.
Вот это тоже проблема. Странно, что для энумов не реализовали наследование. Так неудобно.
>хотя некоторый серьезный инженерный софт в свое время тоже наступил в это говно
Автокад и 3д-макс? Я думал это собственная разработка Автодеска.
> а что если значений 2 или больше?
Лучше бы тебе конкретно описать задачу, иначе нижеописанное может в твоем случае пойти во вред.
Тебе нужен для этого новый класс. Совершенно очевидно по твоему описанию, что это некая группа с неким именем или идентификатором, которая содержит в себе кучу других объектов. Налицо иерархия.
Обычно есть простой список, а все свойства хранит в себе итем. Внутри каждого итема могут быть списки других итемов, а те содержать в себе списки еще одних.
По поводу генерируемого имени. К примеру у меня были итемы, у которых есть свойство ID, которое генерировалось случайным образом в конструкторе итема. Вот создал ты новый экземпляр и у тебя автоматом заполнился ID.
Если нужно неслучайное ID, а последовательное, как у тебя (b1, b2, b3), то можно хранить последний индекс созданного итема как статическое поле и при каждой инициализации инкременировать
public List<Prisoner> Prisoners {get; set; }
public class Prisoner
{
. . . static int lastID; //хранилище последнего созданного ID-индекса
. . . string ID {get; set; }
.
. . . public Test()
. . . {
. . . . . . lastID ++; //инкременируем индекс
. . . . . . ID = 'b' + lastIndex.ToString(); //билдим новое ID
. . . }
}
Если же индексация каким-то образом зависит от коллекции, в которой находится, то индексацию берет на себя эта коллекция.
Как например это было с другим свойством - Parent, моего итема, которое редактировал мой кастомный класс, реализующий IList, либо наследующий List (небезопасно). В этом классе я реализовал метод Add(item), который помимо добавления в список еще и помещал ссылку на себя в Parent добавляемого итема.
public class PrisonBlock : IList<Prisoner>
{
. . . private List<Prisoner> prisoners = new();
.
. . . public void Add(T item)
. . . {
. . . . . . prisoners.Add(item);
. . . . . . item.Parent = this; //добавляем себя в качестве родителя
. . . }
}
Таким образом мы можем обратиться к итему Prisoner и по Parent узнать его актуальынй индекс в блоке. Кстати, в этом блоке тоже может быть свой Parent, который сообщает номер этажа, а в этаже ссылка на корпус и так далее. Это пример на случай, когда идентификатор итема зависит от его положения в списке родителя.
> а что если значений 2 или больше?
Лучше бы тебе конкретно описать задачу, иначе нижеописанное может в твоем случае пойти во вред.
Тебе нужен для этого новый класс. Совершенно очевидно по твоему описанию, что это некая группа с неким именем или идентификатором, которая содержит в себе кучу других объектов. Налицо иерархия.
Обычно есть простой список, а все свойства хранит в себе итем. Внутри каждого итема могут быть списки других итемов, а те содержать в себе списки еще одних.
По поводу генерируемого имени. К примеру у меня были итемы, у которых есть свойство ID, которое генерировалось случайным образом в конструкторе итема. Вот создал ты новый экземпляр и у тебя автоматом заполнился ID.
Если нужно неслучайное ID, а последовательное, как у тебя (b1, b2, b3), то можно хранить последний индекс созданного итема как статическое поле и при каждой инициализации инкременировать
public List<Prisoner> Prisoners {get; set; }
public class Prisoner
{
. . . static int lastID; //хранилище последнего созданного ID-индекса
. . . string ID {get; set; }
.
. . . public Test()
. . . {
. . . . . . lastID ++; //инкременируем индекс
. . . . . . ID = 'b' + lastIndex.ToString(); //билдим новое ID
. . . }
}
Если же индексация каким-то образом зависит от коллекции, в которой находится, то индексацию берет на себя эта коллекция.
Как например это было с другим свойством - Parent, моего итема, которое редактировал мой кастомный класс, реализующий IList, либо наследующий List (небезопасно). В этом классе я реализовал метод Add(item), который помимо добавления в список еще и помещал ссылку на себя в Parent добавляемого итема.
public class PrisonBlock : IList<Prisoner>
{
. . . private List<Prisoner> prisoners = new();
.
. . . public void Add(T item)
. . . {
. . . . . . prisoners.Add(item);
. . . . . . item.Parent = this; //добавляем себя в качестве родителя
. . . }
}
Таким образом мы можем обратиться к итему Prisoner и по Parent узнать его актуальынй индекс в блоке. Кстати, в этом блоке тоже может быть свой Parent, который сообщает номер этажа, а в этаже ссылка на корпус и так далее. Это пример на случай, когда идентификатор итема зависит от его положения в списке родителя.
Значит тебе не нужен словарь.
И не забывай, что любой класс ты можешь модифицировать. Если в словаре не хватает свойств, ты наследуешь словарь и добавляешь нужные тебе свойства. Проблемс?
Ну как? У тебя команды Open, Import, Merge срут в историю действий и заодно могут срать в список последних использованных файлов. Дальше ты этот список сохраняешь куда хочешь, возможно с бэкапом предыдущего списка.
Для этих команд ты даже можешь создать интерфейс, чтобы он в обязательном порядке заставлял команду срать в этот список, чтобы ни одна муха ...
В фотошопе вот только недавно столкнулся с говной — они сохраняют информацию только при закрытии приложения. В итоге, когда фотошоп крашнулся, я лишился истории последних открытых файлов.
Возможно, что команда Open насрала в список своевременно, вот только энтот список сохраняется при успешном закрытии приложения. В итоге имеем что имеем. В общем это тебе пример, что успешные компании не утруждают себя этими вашими сложностями.
А можно пример?
Хотя ... с другой стороны, может лучше заполнять список истории при сохранении и экспорте. Иначе список может заполняться мусором, если пользователь просто открывает что либо и закрывает не внося изменений — например что-то ищет.
Но я такое редко где видел. Даже студия поднимает в списке ссылку на решение даже если оно было просто открыто.
ну вот я хочу поставить visual studio с поддержкой asp net, он мне предлагает ставить хуеты на 10 гигов, нахуя?
Я не понимаю зачем ты сюда вообще пришёл. Сам же говоришь что вскод прекрасно работает и не требует тонны зависимостей вот и поставь себе асп отдельно и продолжай жить на вскоде. Или идею поставь.
Всё сводится к тому что выбор у тебя есть и никто не привязывает к студии
не эстетично комп засорять, хочется, да не можется
>10 гигов
Дедусь, ты таблетки-то вовремя принимай, 10 гигов - это 1 серия Следствие ведут знатоки (или что вы там смотрите) в нормальном качестве.
>visual studio ставит миллиад говна на 10гб
А нехуй Pro с торрентов качать, долбоеб. Комьюнити чистая около 700Мб весит, а с минимальными либами около 3Гб. И лежит она на оф сайте майкрософта бесплатно.
Че за паблик стринг? В шарпе можно делать публичные поля?
Сериализатор берет во внимание только публичные свойства. На поля ему похую, про публичные не в курсе, но судя по твоему вопросу — тоже.
А еще из текста не видно, что у тебя что-то должно меняться.
Судя по этому коду, у тебя в джейсоне будет всегда манда, даже при отсутствии файла во время загрузки. Хз как ты там проверяешь в таких-то условиях.
>что у пользователя увеличилась площадь экрана.
в ширину, еще раз напишу В Ш-И-Р-И-Н-У. ширина это по горизонтали понимаешь? то есть хоть миллион мониторов но высоты они тебе не прибавят.
а у тех у кого огромные мониторы -у них проблем с видимостью нет. просто у всех забирают рабочую высоту просто "ачтобыло"
>Если на постоянке работают, то как минимум долбоебы
они не долбоебы. они просто работают.
некоторые вот с телефона даже софт пишут
Это если тебе приходится сидеть в душном офисе с кучей мониторов, то это кто еще долбоеб лол )
>>19431
Иметь возможность стрелять себе в ногу и реально стрелять в ногу - разные вещи
ты же понимаешь что JDK/SDK не то же самое что ты показываешь на скрине?
И что собственно IntelliJ IDEA и является тем что ты показываешь на скрине в той или иной мере и уж сама она с радостью ставится на диск ц ))))
вон у меня стоит комьюнити idea и занимает на диске сама 3 гига. При это я конечно без понятия чего она предоставляет, а чего не предоставляет. Ну еще и в профиле юзера накакает.
что конечно не отрицает факт, что студия любит понаставить говна. Например я не пользуюсь sql server, нахер не нужен этот энтити фреймворк и нода, но все это добро мне навалят.
> У объекта - да, но в словаре всего два поля - название и значение.
Пчел, ты изначально вообще хотел переменную. У неё тоже "два поля" - имя и содержимое.
Тебе названия переменных нужны, чтобы к ним обращаться в процессе написания кода. Нахуя тебе имена, которые ты в коде никак не прописываешь?
Хороший тон это ветка с notsupportedexception но в целом согласен что затея с наследованием энамов говно. В некоторых местах к примеру есть проверки а-ля is in enum и дальше предполагается что то что прошло дальше точно валидно.
В целом непонятен смысл дополнять чужой энам
Как реализовать логгер, который вместе с каждым логом будет передавать нужные мне параметры?
AutoMapper
Зависит от того какой у тебя сериализатор. Если дефолтный то в свежих корках стоит syste.text.json, если корка постарше или ты руками json.net подкинул то он.
И у того и у того есть атрибут который можно повесить на проп jsonpropery и там название пропа в жсоне. Одним словом гугли
Всё с чего то начинали. Его ошибка в том что он пошёл спрашивать у людей а не у гугла
Не ошибка, диагноз.
Пизды тебе за такой код вломить нужно и за внимательность тоже.
Попробуй в журнашлюхи податься, думаю взлетит
Действительно. Моя вина.
Тогда другой вопрос.
Почему шарп заставляет меня вон ту первую строчку добавить? Без этого не компилировалось, говорило, дескать - использование неинициализированной переменной.
Опять же - в JS все нормально и ничего не ругается.
Ты ебалан? Гений сравнений.
В твоём любимом JS с "use strict" будет та же самая ошибка. И не надо думать, что var в шарпе и жс - это одно и то же.
Я не прикидываюсь ни кем.
Просто я не могу понять, почему.
>>22612
Я не про то.
Шарп же умеет захватывать всякое. Может проанализировать тело, понять что пытаются захыватывать, вычислить тип и сгенерировать нужный делегат. Опять же - если переменную проинициализировать - оно работает нормально. А вот если нет - не собирается.
Потому что рослин за тебя локальные переменные не инициализирует. Может быть когда-нибудь это изменится. Как когда-то делегаты не выводились.
Не собирается, потому что анализатор понимает, что у тебя гарантированный эксепшен в рантайме.
Так логгеры serilog и log4net умеют это делать, аля string.Format. Ты через запятую перечисляешь параметры.
И даже больше. Попробовав структурное логирование жизнь заиграет новыми красками
Хочу в студии вот такой вот заголовок иметь.
И чтобы автор - проставлялся на основе гита, а время - автоматом при создании файла.
На линуксе - у меня скриптики и я просто делаю:
:r !./header.sh
после создания файла.
А вот че делать на винде в студии?
Ну. У меня пиздец встает хуй потому что кажется прям максимально эстетично. Я прямо смотрю на это и нарадоваться не могу. ХЗ как описать.
А еще у джавистов - такое же есть. Я чувствую с этой стороны - неполноценным себя, что не имею в студии такого же.
Раскидать логические куски по отдельным классам, а "вью-модель" сделать просто фассадом буквально без какой-то логики?
Узнай, как такая практика называется, ну и загугли как это автоматизировать для сутдии.
Как я это раскидаю, если мне нужно взаимодействовать со свойствами внутри вью модели?
// кусок твоей логики
class A {
public string Name { get; set;}
public void SomeImplrtantAndComplexLogic() { Console.WriteLine(42) ; }
}
// кусок твоей логики
class B {
public int Age { get; set; }
public void AnotherlrtantAndComplexLogic() { Console.WriteLine(69) ; }
}
// Фассад
class ViewModelFacade{
A _a = new();
B _b = new();
public string Name { get => _a.Name; set => _a.Name = value; };
public void SomeImplrtantAndComplexLogic() => _a.SomeImplrtantAndComplexLogic();
public int Age { get => _b.Age; set => _b.Age = value; };
public void AnotherlrtantAndComplexLogic() => _b.AnotherlrtantAndComplexLogic();
}
// кусок твоей логики
class A {
public string Name { get; set;}
public void SomeImplrtantAndComplexLogic() { Console.WriteLine(42) ; }
}
// кусок твоей логики
class B {
public int Age { get; set; }
public void AnotherlrtantAndComplexLogic() { Console.WriteLine(69) ; }
}
// Фассад
class ViewModelFacade{
A _a = new();
B _b = new();
public string Name { get => _a.Name; set => _a.Name = value; };
public void SomeImplrtantAndComplexLogic() => _a.SomeImplrtantAndComplexLogic();
public int Age { get => _b.Age; set => _b.Age = value; };
public void AnotherlrtantAndComplexLogic() => _b.AnotherlrtantAndComplexLogic();
}
Лучше чем у тебя будет partial фигня.
partial - вообще придуман исключительно для случая чтобы сепарировать то что ты пишешь от того что нагенерировал какой-то генератор кода.
Вот кто-то использует в своей работе что-то?
Вот у майков в коде - часто вижу что они используют. Но там понятно как-бы.
А на уровне пониже. Чего-нибудь генерируете? И если да, то как?
Я вот последний раз - стрингбилдером клиенты для устройств когда на заводе работал - генерировал по вычитываемой с устройства информационной карты.
Бойлерплейт гененировать. Больше нахуй не нужОн.
Активно использую postsharp
Та это уже как костыль жуткий выглядит.
Типа вот я в студии работаю.
Создаю новый файл. Переключаюс на wsl, иду по ебейшему пути в духе: /mnt/c/users/abc/sources/repos/Project1/src, открываю vim'ом нужный файл, выполняю скрипт. Закрываю wsl и дальше работаю.
Даже если не закрывать, а просто делать это переодически - все еще как добро выглядит.
Ну и не делай тогда
Ты так написал, потому что так лично тебе нравится? Или, может, пояснишь? Даже бездушная программа лучше тебя отвечает, для тебя это повод задуматься.
Первый вариант написания с использование фигурных скобок является более общепризнанным в программировании. Этот вариант обеспечивает более читаемый код и является стандартным при написании больших блоков кода. Он также позволяет легче вносить изменения внутри блока кода, если это потребуется в будущем.
есть такое. Попробуй добавить контроллеры какого то вида или общие вьюмодели, куда вынеси логику контроллерную.
Посмотрел на первый варианты. Их по методу DRY взаимно ликвидировали.
var msgs = new[] {"Число четное", "Число нечетное"};
while(true) {
var index = int.Parse(Console.ReadLine()) % 2;
Console.WrteLine(msgs[index]);
}
Ты бред несёшь и сам твой подход бред что новый что старый. Подобные задачи делаются одним вызовом на весь репо, если угодно то в хуке гита
> что кажется прям максимально эстетично
Нет это смотрится максимально хуево.
Во первых через какое-то время заебывает постоянно читать эту портянку в файле, т.к. коду она отношения не имеет, а место съедает.
Во вторых - вся эта информация итак в гите есть. Кто, что, когда из файлов создал и какую строчку в нем изменил.
>Вот кто-то использует в своей работе что-то?
Миграции для БД через EF - эвридей.
Модели для парсинга xml - часто
Клиенты для сваггера - крайне редко
1-й. Скобки ставятся всегда.
>Даже бездушная программа лучше тебя отвечает, для тебя это повод задуматься.
А ты с порядком картинок в собственном посте разобраться не можешь. На твоем месте я бы об этом задумался.
Вот тебе и шарп, нах, пишите на нем сами. Контора пидорасов, что бы я нахуй еще раз связался с любым продуктом этой конторы.
Да как бы и хуй с ним. Проблемы маководов это проблемы маководов
срать на общепризнанность.
предпочитаю 2
1 - жрем слишком много вертикального пространства просто так
3 - длинные строки тяжелее читать, особенно если в строке 2 действия - а тут сравнение и действие.
2 - самый идеал. семантика отделена и сразу видно скоуп.
а Visual Studio Code от кого?
Забавно читать это в треде языка, на котором до сих пор нет нормального нативного гуи фреймворка, при том что на маке с этим никаких проблем, и писать красивые нативные приложения способна даже макака
а ну ну, давай расскажи мне подробнее как макака будет писать на хкоде (кстати невероятно говняная IDE сама по себе) кроссплатформенные гуи приложения.
А мы тут послушаем.
>и писать красивые нативные приложения способна даже макака
Ну так пусть эта же макака и сделает для макоебов нормальную IDE. Problems?
ну так для винды (родная платформа) тоже есть нативный гуи и не один. И тоже может макака писать.
> ну так для винды (родная платформа) тоже есть нативный гуи и не один
В том то и беда, что все нативные гуи на винде либо устарели (wpf, winforms, uwp), либо максимально кривые (winui, maui). Современного и хорошо работающего просто нет. Это я тебе как разработчик десктопных приложений говорю.
И ладно бы только устарели, wpf тормоз жуткий, uwp анально огороженная платформа (самое уебанское решение майков, если бы не эти ограничения писал бы на uwp и в хуй не дул. Да, и там есть кривости, теней нет нормальных например, но в сравнении с wpf это просто технология богов)
>wpf тормоз жуткий
и при этом быстрее того же winui лол
не знаю, пишу на WPF и мне норм. А всякие там эффектики и красивости мне не нужны.
И как раз UWP и выше считаю огороженным и УРЕЗАНЫМ говном - то нельзя, этого нет.
На а винформс есть винформс.
что на маке родное то? я хз но гугл первым выдал AppKit, похоже жуть страшнее чем винформс.
SwiftUI? так он не для макоси. Сам концепт мне нра, но из за выразительной убогости свифта и шарпа ну такое себе, а самая мощь подобного подхода раскрывается только на котлин, но это все для мобил как бы. Если тебе нужен DataGrid то ууупс.
> и при этом быстрее того же winui лол
Но гораздо медленнее UWP. На wpf даже нельзя добиться плавной анимации без микролагов, это ли не пиздец?
> И как раз UWP и выше считаю огороженным и УРЕЗАНЫМ говном - то нельзя, этого нет.
Winui то как раз не огорожен, а так да, это большой минус UWP, но этот минус компенсируется скоростью работы и наличием Composition Layer
>>25017
> так он не для макоси
И для нее в том числе.
А так вся надежда на Авалонию, для неё конечно нужно самому все контролы пилить, чтобы нативно выглядели, но это в целом не сложно. Главное что работает лучше wpf, возможностей больше, в последней версии ещё и Composition Layer из UWP добавили. Документация правда куцая, с msdn и рядом не стояла, зато чат есть, где можно напрямую с разрабами пообщаться.
>Это я тебе как разработчик десктопных приложений говорю.
Ты вымирающий вид, который скоро будет выкинут на свалку истории. Пора откатиться в сторону и лечь помирать.
Я пишу пет на asp net, скоро обязательно вкачусь в актуальную технологию
Вот к примеру пикрил, мне надо подписать класс и конструктор класса (подчеркнуто). Текст в большинстве случаев один и тот же, но вставлять копипаст как-то тупо и не практично.
О, да, это мне и нужно. Спасибо!
Ох если бы не шрифты в авалонии
Что есть на джаве, чего нет на петушарпе:
— Стабильность и вера в будущее (обратная совместимость)
— @Delegate (петушарп не поддерживает композицию, приходится ручками переписывать по 500 однотипных методов)
— @RequiredArgsConstructor, @AllArgsConstructor, @NoArgsConstructor
— @ToString (приходится генерировать средой разработки и сидеть в классе с кучей говна, красивые элегантные классы нинужны, лучше попилим его с помощью partial class и не так всё плохо будет выглядеть, при добавлении новых полей перегенерировать)
— JavaFX
— Minecraft
петросян посетил наш тред.
Открываем инет про @Delegate хотя бы и читаем
"Current status: negative - Currently we feel this feature will not move out of experimental status anytime soon, and support for this feature may be dropped if future versions of javac or ecj make it difficult to continue to maintain the feature. "
С-стабильность.
>переписывать по 500 однотипных методов
не сраным жавистам с их гетсет об этом говорить лол.
и остальное такое же смешное.
а так, пусть жависты едят говно в своем треде. Нет, спасибо что нам тред перекатили, но теперь идите жрать свое говно.
>не сраным жавистам с их гетсет об этом говорить лол.
Ты когда пишешь {get; set} на каждую переменную вспоминаешь злых хохораклов?
не знаю о чем ты вообще {get; set} это указание компилятору "я ж не жавист засирать код пустыми методами геттеров и сеттеров, сгенерь эти методы за меня". Абсолютно нормальный синтаксис. Разве что бэкингфилд не сделали, как в том же котлине. Ну шарп не идеал, но же жавистом на него бочку катить.
зато когда пишу required ... {get; init;} то думаю "эээх здорово же"
Реально полезно, хоть я и сторонник конструкторов.
ты определись плиз - жава ушла или просто кого то убогость и многословность жавы основательно зае... и был создан проект ломбок (которая суть СТОРОННЯЯ либа) для внедрения сахара?
ну а в шарпе 12 будут эти конструкторы (хотя конечно не факт что так же хорошо, как в котлине)
с другой стороны мне конструкторы такого вида никогда и не нравились если это не record. Семантика контракта и внутреннего устройства класса размазывается.
>ты определись плиз - жава ушла или просто кого то убогость и многословность жавы основательно зае... и был создан проект ломбок (которая суть СТОРОННЯЯ либа) для внедрения сахара?
А какая разница? Я-то пишу с удобным сахаром, которого нигде больше нет, ни в одном языке программирования.
разница есть
- может быть в любой момент потенциальная несовместимость
- ты можешь устроиться куда то работать, а там "никаких ломбоков ничего такого мы не знаем".
- кто вообще автор либы. за чей счет оно живо. мир жавы это такое. ждк тому пример - то платный, то бесплатный, суды всякие
>ни в одном языке программирования.
кулик, да ты хотя бы оглянись вокруг в своем болоте. даже в зоне твоей жвм есть хотя бы котлин и на его возможности посмотри (а это не только сахар).
а потом на свою жаву, которая на той же жвм и куда асинк нормальный никогда не завозили, сахар через сторонние костыли делается, ну может там чего то обещали подобие корутин сделать - не слежу.
>- может быть в любой момент потенциальная несовместимость
Так-то и джава может быть сама с собой несовместима в процессе разработки. Но есть такая возможность, как "пофиксить баг", если ты не знал.
>- ты можешь устроиться куда то работать, а там "никаких ломбоков ничего такого мы не знаем".
Добавляю в dependencies ломбок и довольно урчу. Это же джава.
>- кто вообще автор либы. за чей счет оно живо. мир жавы это такое. ждк тому пример - то платный, то бесплатный, суды всякие
На гитхабе ломбок есть. Лицензия какая-то кастомная, но, судя по всему, дженерик MIT/BSD.
>даже в зоне твоей жвм есть хотя бы котлин и на его возможности посмотри (а это не только сахар).
В петухлине всего, что есть в лобмоке нет.
> Добавляю в dependencies ломбок и довольно урчу.
Не урчишь... или урчишь. Это как дибы скажут
>Но есть такая возможность, как "пофиксить баг", если ты не знал.
а эта возможность она мгновенная по щелчку пальцев? или нужно issue писать, потом ждать фикса, потом ждать пока выкатят этот фикс?
Может для жавистов время искажается, а то я не знаю. В моем мире течение времени одинаково во все времена
>довольно урчу. Это же джава.
только недолго урчишь. ибо тебя просто попрут с работы за то что ты используешь левую хрень в общей кодовой базе.
>На гитхабе ломбок есть. Лицензия какая-то кастомная
лицензия дело такое - взяла и сменилась. обычное дело.
>В петухлине всего, что есть в лобмоке нет.
ясно. упоротый жавист. пошли аргументы "ви все вретттте"
нечего после этого с тобой обсуждать.
>только недолго урчишь. ибо тебя просто попрут с работы за то что ты используешь левую хрень в общей кодовой базе.
>лицензия дело такое - взяла и сменилась. обычное дело.
>и вообще завтра на тебя упадёт метеорит, тупой джавист. что скажешь на это? оправдывайся
>ясно. упоротый жавист. пошли аргументы "ви все вретттте"
Хочешь сказать, что в петухлине есть упомянутые мной аннотации или их аналоги?
>а эта возможность она мгновенная по щелчку пальцев? или нужно issue писать, потом ждать фикса, потом ждать пока выкатят этот фикс?
Всё ровно так же работает и с самой джавой, и с вашим петушарпом. Это вообще не аргумент, маня. Почти все проблемы фиксятся ещё до выпуска кода в паблик.
ты реально думаешь что сторонняя либа, пусть даже она удобная и поддерживается основными IDE то же самое что стандартная?
То, что она генерит, не является валидным кодом жавы и поэтому нужны плагины в IDE
Так что она может как быть так и не быть
Насчет лицензии. Oracle JDK отличный пример что даже невероятная известность и стандартность может просто измениться в один момент.
Насчет метеорита - тоже может быть, но мы говорим о реальных вещах. Можешь доказать что ломбок используется на 100% кодовой базы в мире? нет? тогда и говорить не о чем.
>>26100
>петухлине есть упомянутые мной аннотации
они там не нужны. язык все это умеет искаропки и даже больше.
>>26102
>Всё ровно так же работает и с самой джавой, и с вашим петушарпом
нет не так же. когда фича - часть компилятора, то она не зависит ни от IDE, ни от сторонних плагинов и их междусобойной совместимостью. Возможности компилятора находятся в жесткой согласованности с самим собой, а не разрабатываются и не обновляются отдельно.
Я не работаю с жавой и ломбок, но мороки с совместимостью плагинов на андроид студии мне хватило выше крыши. В жава мире многое завязано на кодоген и я наелся дерьма в связке плагин + hilt + dagger до отвала.
public class BaseClass
{
. . . public BaseClass (int a, string b)
. . . { }
}
public class MainClass : BaseClass
{
. . . public MainClass (int a) : base(a, b)
. . . {
. . . . . string b = "Hello, world!";
. . . }
}
>ты реально думаешь что сторонняя либа, пусть даже она удобная и поддерживается основными IDE то же самое что стандартная?
Пока ты кукарекаешь про потенциальные проблемы, я просто пользуюсь и ещё ни разу не испытывал никаких проблем с ломбоком, как и пресловутого скрытого поведения/подводных камней, которыми вы так любите кичиться. Может, не то же самое, но этого достаточно.
>Насчет лицензии. Oracle JDK отличный пример что даже невероятная известность и стандартность может просто измениться в один момент.
Тогда OpenJDK и получила развитие. Невалидный пример, да и не аргумент вообще, если всё так работает, что мешает петушарпу лицензию сменить? Не высасывай из пальца, серешь в штаны.
>Можешь доказать что ломбок используется на 100% кодовой базы в мире? нет? тогда и говорить не о чем.
А этого и не нужно. Пусть им пользуются 90%, 40% или один я, что с того? У меня есть эти фичи, а петушарподебилы отмакакивают {get; set} и ещё смеют этим выёбываться.
>они там не нужны. язык все это умеет искаропки и даже больше.
Покажи мне то, что заменяет @Delegate, @With и @RequiredArgsConstructor в петухлине. Да и не о нём идёт речь, я так-то в петушарпотред зашёл. Петухлин, как паразит на джаве, автоматом имеет все её фичи (кроме, конечно, всей той красоты из новый версий, так как петухлин сидит на 8 jvm).
>я просто пользуюсь
ну пользуйся кто тебе запрещает. но не говори что весь мир пользуется и устроившись куда то на работу там будет ломбок
(не говоря уже про то что ломбок это костыли)
>Тогда OpenJDK и получила развитие.Невалидный пример, да и не аргумент вообще
просто пример того как что то может измениться легко. и если даже что то очень известное, что говорить о левой библиотеке )
>что мешает петушарпу лицензию сменить?
ничего не мешает. все могут менять. и все меняли. правда вот в разные стороны )
>или один я, что с того?
а то что с того, что гет сет шарписты могут писать везде и всегда. А ты со своим ломбоком можешь писать у себя дома, ну молодец че.
>петушарподебилы отмакакивают {get; set}
абсолютно нормальный синтаксис. жавапетух просто не знает к чему придраться.
>Покажи мне то, что заменяет
не хочу читать про ломбок мне влом. и нах не нужно. поэтому по диагонали как я понимаю что это за фичи
>@Delegate,
это то что еще не является стабле в ломбок? ну такое себе. Типа автогенерация декораторов? ну в котлине она есть
class Derived(b: Base) : Base by b
>@With
это как шарповское with для records то есть позволяет заменить часть свойств и компилятор сгенерит билдер? в котлине у дата классов есть метод copy - "Use the .copy() function to copy an object, allowing you to alter some of its properties while keeping the rest unchanged."
>@RequiredArgsConstructor
не понял что это точно делает, но в котлине искаропки дефолтные кострукторы они работают как конструкторы у record в шарпе только шире ибо объявляют не только сигнатуру конструктора, а и кем станет это - свойством или полем. То есть там автосоздание и присвоение свойств и полей через конструктор (то что только частично будет в шарпе 12 как доп функционал) является прямо таки основным. И поскольку конструктор только присваивает, то есть еще блок init{} для логики
>Петухлин, как паразит на джаве
какие фичи лол. жава НЕ ИМЕЕТ этих фич. Эти фичи имеет сторонняя либа через кодоген и на выходе не валидная жава (потому и нужен плагин чтобы с этим работать)
и кто ГОВНО жаве виноват что она развивается как черепаха. Будь жава хороша, то ломбоки бы и не появились ибо не нужно было бы
а так да. тред про шарп то. хватит обсирать жаву. жависты и так знают что она говно и нужны костыли позорные типа ломбоков ибо без них жопа.
>я просто пользуюсь
ну пользуйся кто тебе запрещает. но не говори что весь мир пользуется и устроившись куда то на работу там будет ломбок
(не говоря уже про то что ломбок это костыли)
>Тогда OpenJDK и получила развитие.Невалидный пример, да и не аргумент вообще
просто пример того как что то может измениться легко. и если даже что то очень известное, что говорить о левой библиотеке )
>что мешает петушарпу лицензию сменить?
ничего не мешает. все могут менять. и все меняли. правда вот в разные стороны )
>или один я, что с того?
а то что с того, что гет сет шарписты могут писать везде и всегда. А ты со своим ломбоком можешь писать у себя дома, ну молодец че.
>петушарподебилы отмакакивают {get; set}
абсолютно нормальный синтаксис. жавапетух просто не знает к чему придраться.
>Покажи мне то, что заменяет
не хочу читать про ломбок мне влом. и нах не нужно. поэтому по диагонали как я понимаю что это за фичи
>@Delegate,
это то что еще не является стабле в ломбок? ну такое себе. Типа автогенерация декораторов? ну в котлине она есть
class Derived(b: Base) : Base by b
>@With
это как шарповское with для records то есть позволяет заменить часть свойств и компилятор сгенерит билдер? в котлине у дата классов есть метод copy - "Use the .copy() function to copy an object, allowing you to alter some of its properties while keeping the rest unchanged."
>@RequiredArgsConstructor
не понял что это точно делает, но в котлине искаропки дефолтные кострукторы они работают как конструкторы у record в шарпе только шире ибо объявляют не только сигнатуру конструктора, а и кем станет это - свойством или полем. То есть там автосоздание и присвоение свойств и полей через конструктор (то что только частично будет в шарпе 12 как доп функционал) является прямо таки основным. И поскольку конструктор только присваивает, то есть еще блок init{} для логики
>Петухлин, как паразит на джаве
какие фичи лол. жава НЕ ИМЕЕТ этих фич. Эти фичи имеет сторонняя либа через кодоген и на выходе не валидная жава (потому и нужен плагин чтобы с этим работать)
и кто ГОВНО жаве виноват что она развивается как черепаха. Будь жава хороша, то ломбоки бы и не появились ибо не нужно было бы
а так да. тред про шарп то. хватит обсирать жаву. жависты и так знают что она говно и нужны костыли позорные типа ломбоков ибо без них жопа.
>абсолютно нормальный синтаксис. жавапетух просто не знает к чему придраться.
>ну и говно тоже в принципе вкусное. да, петухам мух не понять!
Зашкварно быть дегенератом, который читать не умеет. Ломбок, а не лобок.
>просто пример того как что то может измениться легко. и если даже что то очень известное, что говорить о левой библиотеке )
>ничего не мешает. все могут менять. и все меняли. правда вот в разные стороны )
Тебе обязательно на каждый тезис что-то высрать своё, даже если высрана будет хуйня, да?
>рррррря старонняя либа!
Ну так у вас и такого нет. Сидите гетсетыиниты дрочите свои на каждую переменную, коупя тем, что это вам дали с лопатыиз коробки, когда мы просто одну аннотацию ставим на весь класс.
Ограничение исходит из порядка вызовов .ctor так что имеем что имеем
просто правда есть правда. Сколько орали о злом мелкософте и об хорошем оракле. а потом весна показала кто где срал.
>Сидите гетсетыиниты дрочите свои на каждую переменную
data классы в котлине и record в шарпе есть искаропки
это то же самое что твое тупое @Data
а вообще кодогеном можно везде упарываться, но блин восхвалять стороннюю либу которая СУТЬ КОСТЫЛИ, да еще и генерит она не жава код О_О....может только жавасранька.
/// <exception cref="ArgumentNullException"> Эта залупа нигде не видна </exception>
Все что я получу при наведении курсора на метод — это тип исключения, без каких либо комментариев и уточнений.
Потому что xml-документация используется не только для того, чтобы тебе подсказки в IDE выдавать но и для других вещей, вроде кодогенерации или спецификаций api.
Шарподебил продолжает плакаться на костыли, пока я пользуюсь ломбоком и радуюсь сахарку. А ведь он заревел только от одного @Data, который по сути антипаттерн... Вкину пожалуй @ToString. Как там с этим дела в петушарпе обстоят?
ты какой то больной. ты пришел сюда не с жавой, а левым инструментарием
у шарпа тоже такой есть - например, fody. Он за меня генерит INPC и многое другое. Но я же не называю его "это заслуга шарпа". Наоборот, это недостаток шарпа восполняемый костылями.
А ты костыль, который родился из за невероятной убогости жавы, записываешь в достоинства жавы.
Катись в свой жава тред с этим.
>ррррря ты ниможишь просто так взять и пользоваться сахаром патамушто не искаропки!!!!! всмысли ты пользуешься??!?!?!?!?!?! низзззяя яскозал!!!!!!!!!!!!
Как же он коупит, пиздец просто.
Никакой, это же петушарп.
вот так
https://github.com/Fody/ToString
>>27418
слушай дебич. Я тебе последний раз говорю (и больше отвечать не буду) - ты пришел не с возможностями языка, а "смотрите у нас можно юзать вот такие левые костыли", которые пришел ты устраиваться на работу, а тебе "какой нах ломбок иди нах отсюда"
И твое "а как же тустринг, а гетсет" ты засовываешь в свою вертлявую жопу и идешь нах
за сим все. дебил, который НЕ ОТЛИЧАЕТ язык от ИНСТРУМЕНТАРИЯ пусть идет нах
на шарпе тоже есть 100500 способов кодогенерации в компиль-тайм. Помимо рантаймовых (это то с чему жабы жопа) есть и сорс генераторы, и fody и просто шаблоны. И конечно ты можешь захерачить плагин к студии что будет генерить все что тебе лично угодно.
Другое дело что это все равно останется просто тулзой и ты можешь использовать его где то, но это не значит что ты сможешь использовать это везде
но конечно если ты кодишь один дома калькуляторы - ну поздравляю тебя
Ебать дебилоиду правда печёт. На полном серьёзе сравнивает фоди с 73 звёздами на гитхабе с ломбоком, который де-факто стандарт, с 12к звёздами. И ещё ебло умудряется перефорсить "какой нах фоди иди нах отсюда" на "какой нах ломбок иди нах отсюда". Кстати, как там с поддержкой фоди в среде разработки?
>за сим все. дебил, который НЕ ОТЛИЧАЕТ язык от ИНСТРУМЕНТАРИЯ пусть идет нах
А нахуя мне различать это? Я ж не шарпоблядь с нищим по функционалу языком и экосистемой, чтобы мне приходилось как-то коупить убогость способов разработки. Я просто пишу и всё, а шарпобляди выдумывают оправдания аля "ниискаропки!!!", "антипаттерн!!!!" и прочее, прочее.
Какой же ты косолобый
https://github.com/Fody/Fody
4к звезд, 44 миллиона скачиваний в nuget.
Только по факту и фоди и лобок это левые либы, которые не имеют отношения к функциональности языка.
Самому-то не смешно со своих верчений жопой? Мы про @ToString говорили. На нём 73 звёзды. Так как там дела с ним обстоят?
ну так это не жава же
у нормальных людей 90% генерации ToString() покрывают record (data class если котлин) где все генерится. Для остальных случаев (не дто классы) лучше доверить сгенерить самой IDE и подправить ручками.
Поэтому тустринг генератор нужен мало кому ибо незачем нахер.
не думал почему нет ломбока для котлин?
а в жава он типа "де факто стандарт" ибо без него просто никуда (жава хуле). Правда реальность немного другая - не везде он используется, но кого это волнует если в треде упоротый жавист.
А зачем тогда отдельный репозиторий? Это такой обманный манёвр по взятию за щеку?
>учше доверить сгенерить самой IDE и подправить ручками.
Ясн, шарпомух опять в своём репертуаре. А просто размазать говно по экрану не вариант? Зачем всё усложнять и размазывать говно по классам?
>ибо без него просто никуда (жава хуле)
Ну не проецируй, маня... Единственное, что в петушарпе есть из аналогов адекватных функций ломбока это убогий {get; set} на каждую переменную. Всё остальное, чем вы гордитесь, уже давно есть в самой джаве.
Обратного не скажешь про петушарп, который ни в самом языке не имеет нихуя, ни в библиотеках.
Ты абсолютно прав. Жава дебич скатился к откровенному говну.
Тустринги, гетсеты лол. Радость у жавадебича от того что часть говна в жаве правит сторонняя либа (которую кстати ценят не все ибо не все фанаты неявной генерации хер пойми чего, а предпочитают чтобы IDE генерила явно)
Отсутствие типов, структур, LINQ expressions, асинк/авайт и т.д. - все это не парит жавадебича который высирает тонны говнокода там, где в любой другом языке (не только шарп) "давно продолжается праздник, а жавадебич в вилабаджо все еще моет посуду" (с)
не путай LINQ и LINQ Expressions - абсолютно разные вещи.
Замена LINQ Expressions у них это любительские поделки, которые пытаются анализировать байткод и что то там пытаться с этим делать. И то под котлин )
"pack://application:,,,/MyApplication;component/Styles/ListViewStyle.xaml"
Можно это каким либо образом сохранить в файл?
Попытка сохранить ResourceDictionary через XamlWriter не увенчалась успехом — куча информации попросту теряется.
Ну так после компиляции это уже baml
нет. Да и даже если бы да, то причем тут вообще это. Linq Expressions для другого
>>28485
в жава 5 ради совместимости с жава 4 приняли решение внедрить фичу type erasure, то есть из байт кода стирается информация о типах дженериках.
Если у тебя тип List<? extends InputStream>, то хрен ты в рантайме узнаешь что там вместо ? и вынужден с этим жить.
>то хрен ты в рантайме узнаешь что там вместо ? и вынужден с этим жить.
А зачем это знать?
Ты знаешь, какой интерфейс реализует тип, зачем тебе знать больше?
>Отсутствие структур
Джависты говорят, что там где шарпоскот вынужден руками ковырять свои структуры в погоне за оптимизациями, джавагоспода просто пишут бизнес-логику, а JVM сама всё оптимизирует, где нужно. И в принципе и правда если смотреть различные сравнения, нету у шарпа какого-то значимого преимущества по перформансу.
>Ты знаешь, какой интерфейс реализует тип, зачем тебе знать больше?
Разработчики многочисленных DI, ORM, event аггрегаторов и вообще всего что связано с кодогенерацией, сидят такие и думают "а че так можно было?"
>>29365
>JVM сама всё оптимизирует, где нужно
ага. видели мы как она оптимизирует. путем пожирания памяти. А тюнить jvm вообще отдельное искусство
>DI, ORM
В Java всё это появилось раньше, чем в шарпе, и отлично работает всё.
>кодогенерацией
Параша уровня define-макросов в С.
Этого следует избегать.
>путем пожирания памяти
Память стоит копейки.
хотел ответить, но увидев...
>Память стоит копейки.
понял что это упоротый жава дебич и потому пусть валит в свой тред, а не мешает нормальным людям писать на нормальном языке.
Пытался так
var listView = new Uri("file:///C:/Test.zip;component/Resources/Styles/ListViewStyle.xaml");
Но Uri не хочет видеть ";component".
Если я возьму listView.Segments, то получу разбитие по косым чертам "/", в итоге один из сегментов будет выглядеть так "Test.zip;component/"
Я конечно могу вручную разбить строку, но думал может есть какие-то решения из коробки.
Или может надо как-то иначе указать Uri до файла внутри архива.
Если я укажу так
"file:///C:/Test.zip/Resources/Styles/ListViewStyle.xaml"
то боюсь я хрен достану файл.
Жабоебы много чего нелестного про фичи шарпа говорят, а сами втихоря свой пиструник на Project Valhalla наяривают, в рамках которого эти "ненужные" фичи (value-типы, полноценные дженерики и т.д.) в жабу добавить пытаются.
Как по мне, уж лучше кодогенерация, чем инструменты, которые на лету байткод генерируют, как это в жаба-мире принято. Сильно меньше магии выходит. Открыл сгенерированные сорцы и тебе все становится понятно. Да и шансов, что у тебя после обновления либ что-то в рантайме отъебнет сильно меньше, так как криво сгенерированный код тупо не скомплируется.
> В Java всё это появилось раньше, чем в шарпе, и отлично работает всё.
Не в жабе а сама жаба. Достоинство это или недостаток сам решай.
Да и в современном мире я бы вообще считал что фреймворка не существовало, а жизнь зародилась с второй корки
ну не совсем так. Это в шарпе вовсю рантайм генерация ибо типы доступны.
И только вот вот приехала кодогенераци сорцов.
Я не знаю как в жаве, но в андроид там кодогенерация вовсю используется и давно.
ломбок же этот генерит не код. ну так и в шарпе fody переписывает байт код.
поэтому переписывание может переписать исходник, а сорс генерация она только дописывает в отдельные файлы.
ну вот я попробовал этот новомодный коммюнити тулкит от мелких
и их генерацию свойств вида
[ObservableProperty] private bool _foo;
и как же он задолбал при навигации через контрол+клик отправлять в сгенеренный файл...который ПУСТОЙ
БЕСИТ.
Впервые слышу, чтобы действительно кто-то что-то в жаба мире говорил про шарп негативно. Разработчики библиотек говорят, что Шарп был спроектирован с учётом исправлений некоторых ошибок жабы.
И функционал той же вальгаллы есть в шарпе. Но в жабе это сложно реализовать из-за дроча на обратную совместимость.
И этот аргумент работает. Многие компании и сидят на жабе из-за пиара обратной совместимости. И сломали ее только один раз в девятке этими вашими модулями.
>а должен видеть зип?
Он должен видеть точку с запятой в качестве подразделителя (пикрил 1), а дальше компонент с локальным путем. У меня же все воспринимается как один длинный путь.
>файлы в зипе не то же самое что ресурсы
А разве вот это
"pack://application:,,,/Apperance.Test;component/Resources/Styles/ListViewStyle.xaml"
не ссылается на условный контейнер? По карайней мере так пишут в статьях (пикрил 2).
Глядя на подобную структуру, у меня сложилось впечатление, что Uri умеет видеть путь к объекту и отдельно путь к компоненту этого объекта.
Я хочу себе сделать внешний подключаемый ресурс. Выбрал зип-архив. Это можно считать контейнером?
Или есть другие способы?
TreeView — слишком серьезная тема для такого клоунского треда.
Поставил символ "#" вместо ";" согласно пикрилейтед и удалось извлечь фрагмент.
Теперь AbsolutePath выдает:
"C:/Test/Test.zip"
а Fragment:
"#component/Resources/Styles/ListViewStyle.xaml"
Короче, чтобы получить желаемое, мой Uri должен выглядеть так
"file:///C:/Test.zip#Resources/Styles/ListViewStyle.xaml"
Но структура не выглядит как тот же "pack://"
Мне проще самому разбивать строку по ";component/", чем извращать путь таким образом, чтобы от Uri получить тоже самое.
Непонятно, почему ";" не фурычит. Вроде тоже разделитель.
Хотя даже если бы и работала, то я бы получил это
"component/Resources/Styles/ListViewStyle.xaml"
И мне все равно пришлось бы чистить путь от "component/".
Пикрил отвалился
>Хотя даже если бы и работала, то я бы получил это
>"component/Resources/Styles/ListViewStyle.xaml"
>И мне все равно пришлось бы чистить путь от "component/".
Тут я затупил. "component" это папка внутри пакета, я ее тоже себе сделаю.
Остается проблема, чому не видится точка с запятой.
Рано или поздно каждый из нас...
Да уж придется. Развели, блять, цирк.
>Напомните, как в божественном C# автоматически сделать метод toString() без засирания класса сгенерированным кодом?
Ничего не понял. Ты хочешь избавиться от чего-то автоматически сгенерированнго чем-то автоматически сгенерированным? Зачем?
Если тебя надо собственный ту стринг, то пишешь оверрайд ту стринг и внутри любую логику.
Он хочет затраллировать шарпистов, чтобы те скатились в его любимую жабу. Видать, конкуренция слишком низкая.
Дак рекорд это есть класс, а рекорд стракт это структура (хотя можешь не думать, у вас их всё равно нет)
Так и не понял что ты сказать хотел?
Ну по опыту знаю, что нет абсолютной годноты, а гнаться за мелочными фишками — тупо.
Вот я щас горю с того, что не могу в шарпе скрыть метод в базовом классе. В бейсике я могу поставить модификатор затенения.
А теперь из-за одного класса, где не не должен существовать метод, я должен копипастить этот метод для пяти других классов.
Всякие обсолеты и вызовы эксепшенов — говно какое-то. Не по красоте.
Этот вариант не фунциклирует
[System.ComponentModel.EditorBrowsable(EditorBrowsableState.Never)]
public override void DoSomething()
{ }
что невозможно ибо существует котлин.
>>30192
просто у них в жаве в силу БЕЗМЕРНОЙ УБОГОСТИ жавы когда то начали проект ломбок. Что то типа fody в шарпе. И поскольку жава такая НЕРЕАЛЬНО УБОГАЯ не один десяток лет, то за это время НЕОБХОДИМОСТЬ ДОПОЛНИТЕЛЬНЫХ костылей таки признали даже САМЫЕ УПОРОТЫЕ ГОВНОЕДЫ жависты и убедили разрабов IDE что нужно не просто генерить байткод (или не пойми что, но не код жава), а чтобы IDE могла это учитывать и поэтому появилась поддержка в IDE.
шарп таким путем не шел, ведь авторы шарпа не стеснялись на фичи (где сразу был хотя бы гет/сет лоооооооол).
Вот как щас source generator-ы, но они генерят именно код и только новый код. А аналогия это если бы fody генерил не "потом там в черном ящике", а IDE сразу давал подсказки будто оно уже нагенерило.
Так что если брать кодогенерацию, то тут да - у говноедов преимущество в плане поддержки этого в IDE.
Ну это для тех, кому это реально важно. Например мне хз зачем генерить за меня ToString в мутабельном классе, если это не data/record класс, то есть класс сложный и засирать ToString абы чем мне как бы не нужно.
Больше нужда в переопределения кастомного Equal и GetHashCode, но IDE может их генерить.
Да и в жаве не все поклонники неявной генерации и предпочитают генерить с помощью IDE
И да, мы всего лишь говорим про реализации сахара - сам язык дает или костыли. Как бы проблема говножавы не только в отсутствии сахара (хотя это показательно, что до сих пор не сделали гет/сет, а "вот и пусть пердолятся в ломбок лол, говноеды ха ха ха, так и надо" - небось думают авторы жавы. Ибо хз почему такую ВОСТРЕБОВАННУЮ фичу не впилить наконец в сам язык на уровне компилятора.
Там годами впихивают базовые фичи. И сахарный лобмок просто позволяет меньше нажимать кнопки на клаве реализуя некоторый сахар. Но фундаментальные проблемы языка это не решает - там где на другом языке ты "написал и отмечаешь", в жаве же думаешь "как блин это тут вообще реализовать то по нормальному"
а какая должна быть поддержка в IDE для метода ToString который сам генерится?
тело метода? так тебе и IDE его легко сгенерит.
а если оно генерит само где то там, то чего ты еще ожидаешь?
ты таблетки пил сегодня?
На самом деле я вообще не понимаю зачем переопределять тустринг чем то дефолтным, во всех моих кейсах если переопределяю то там какой то кастомный набор и даже из этих случаев чаще не тустринг а вешаю дебаггердисплей атрибут
как и везде
0 генерит компилятор
1 может сгенерить идешка
2 может сгенерировать тулза в батйкоде сама
чего тебе еще надо, собака (с) царь
Мб тут есть человек которому может быть интересно написать абстракцию над вулканом, директом и наверное металлом на шарпе или он уже занимался чем-то подобным и может поделиться опытом
Ну, например, в C# можно указать, что generic параметр T имеет пустой конструктор, а значит внутри generic метода можно сделать new T(). В Java без ебли с TypeRef или Class такого не сделаешь.
- Значимые типы данных
- Материализованные дженерики
- ref и out
- Нет говна в виде checked exceptions
- LINQ и Expressions
- Нет засилья магических аннотаций с кодогенерацией напрямую в IL-код/байткод
- Кортежи из коробки
- Нормальные лямбды и делагаты вместо убогих Function
- Pattern matching, getters-setters и другой вкусный синтаксический сахар "изкаробки"
И многое другое. Продолжать можно до бесконечности.
С чего ты решил, что это рефлексия? Я не достаю мета-информацию о типе из сборки или ещё чего, я просто заранее знаю, что это тип T и у него есть new. Компилятор это развернёт напрямую в new MyType(), благодаря материализованным дженерикам.
В общем, получается какая-то бесполезная конструкция. Проще сразу возвращать через return итем.
Есть какие-то способы решения проблемы? Типа как string.Empty
>мне приходится снова проверять возвращаемый объект на null.
не веришь что трагеты вернут нул? ну значит просто сделай елсе
if(dic.Try....., out var item)
return item;
else
return null;
Как бы try методы возвращают default а что у тебя там ссылочный или вещественный тип не важно.
Ещё ты условным getordefault не сможешь определить есть ли у тебя значение null в том где ты ищешь месте или к примеру 0 в наборе интов
Это была попытка в шутку уровня fizzbuzz enterprise edition
Кидай исключение. Будь мужиком
У меня out <T> Какой Enumerable?
>Как бы try методы возвращают default
А default вернет null.
>>31654
>>31655
Какой Optional<int>? У меня out <T>
Вероятно вы не поняли мою проблему.
Короче, вызов моей функции должен выглядеть так:
if(TryGetByName(myCollection, "myItem", out MyClass resultItem))
{
. . . resultItem.Name = "new name"; //вот тут дикий ор студии, что объект nullable
}
Посмотри исходник такого метода у словаря и стыбзи оттуда атрибут и повесь на параметр своего метода
Словарь возвращает default и метод написан на старой версии не задающей вопросов.
В новой версии подобный подход вызывает предупреждения.
Нихуя не понял, но если дохуя уверен в себе то ! тебе в руки
С Optional<T> можно вот так:
static Optional<T> TryGet<T>(IEnumerable<T> myCollection, Func<T, bool> cond)
{
return myCollection.Where(cond).Select(Optional.Some).FirstOrDefault(Optional.None<T>());
}
Интересно, спасибо!
Шарпопетух не может себе представить, что можно не срать в класс телом бесполезного метода, лул.
Ну да. Шарпогной обычно этим не отличается, здесь ты своих собратьев превзошёл.
может
не использую тустринг ибо нахер не нужно
но активно использую генерацию INPC и ConfigureAwait(false) по дефолту (ибо мелкие ну никак не хотят дать возможность задать это как нибудь для сборки)
>ConfigureAwait(false)
Хрюкнул с того, как шарподегенераты придумывают себе проблемы и героически с ними борются.
сказал говноед из мира жавы, где принципиально нет async/await и нужно мудрить какие то конструкции для простых задач.
>придумывают себе проблемы и героически с ними борются.
ты о чем говноедушка. тут же то что ты так хвалишь - не я пишу код, а тулза за меня пишет. Ты или трусы надень или иди нах в свой тред.
>>31744
дебил что ле? хотя кого я спрашиваю.
да может. И для этого достаточно просто поставить пакет из нюгета и указать место где ему можно вклиниваться с переписыванием.
Разве configureawait нужен не только для случаев когда нужно игнорить поведение кастомного контекста синхронизации? То есть кроме гуёвых аппок я не знаю таких случаев
>ты о чем говноедушка. тут же то что ты так хвалишь - не я пишу код, а тулза за меня пишет. Ты или трусы надень или иди нах в свой тред.
Дегроду не хватило мозгов даже понять смысл поста.
либописатель не должен предполагать будет или не будет контекст. Он может быть везде, а не только в гуи. То, что его нет в асп.нет - ну это просто частный случай.
Было дело я даже в консольном приложении делал кастомный контекст.
Хотя как видно по INPC я больше пишу десктопные приложения и постоянные configureawait бесят, а решения от мелких нет.
>>31750
>>31751
ты дебил? да, дебил. ты спросил, тебе ответили. Не согласен - опровергни. Не можешь - иди пожри говна.
await / await!
или
await / await? раз уж дефолтный true
А сделали хрень, которая приводит к дедлокам блин.
И сколько лет тема на гитхабе по этому вопросу.
Fody конечно хорошо, но он не учитывает контекст, хотя отловить "доступ к контролу не из того потока" и пофиксить проще, чем дедлок.
-30 social credit. Впредь будьте осторожны в выражениях.
Но тут возникает вопрос с локализацией. Допустим а англоязычной версии у большинства контролов есть категория свойств "Text", в русскоязычной оно отображается как "Текст".
Так вот, если я установлю для своего свойства категорию "Text", то в русскоязычной версии студии свойство не поместится в категорию "Текст", а будет создана новая категория.
Я должен указывать категорию на языке, на котором установлена текущая локализация студии, что выглядит как какой-то ебанутый бред. Может есть какой-то способ учитывать локализацию?
Как их посмотреть?
Бля, букву проебал, вместо "Appearance" писал Apperance".
Да, распознает сперва дефолтный язык, а потом локализует.
Впрочем, это был нонсенс и нам просто попался шарящий анон, но теперь его нет и всё встало на свои места с цирком уродов и троллей-долбоебов.
Вряд ли вот эти хуеплеты чем-то толковым занимаются, раз решили поднять тему, никуда не ведущую.
>>33157
>>33158
Что за группировка? Ты о чем? Речь идет об автоматическом распределении данных по столбцам?
Есть ObservableCollection, из которой берется CollectionView и байндится ItemSource'ом к DataGrid'y. В гриде есть возможность задать группировку по какому-то параметру (по типу, например): DataGrid.GroupDescription или grid.AddGroupDescription (пишу по памяти, поэтому могу точное имя метода всрать, но суть понятна), соответственно, в гриде строки будут сгруппированы и добавлен хедер группы. Только нет, не будет, иди поебись.
Забавно, что в соседнем DataGridController'e (кастомный грид от васяна) все прекрасно группируется при одинаковых байндах. Я всё пытаюсь узнать, кто криворукий: я или Паджит, писавший стандартные библиотеки.
>Я всё пытаюсь узнать, кто криворукий: я или Паджит
Там наверно работоспособность отделяет проставка одной галочки, как это бывает обычно в WPF, и особенно у майков.
Ты дебил просто. Надо создавать в xaml collectionviewsource, в ресурсах, биндить его к IGrouped и в datagrid указать источник данных этот collectionviewsource
вообще то это магическая штука. Можно забиндить датагрид прямо на коллекцию источника, а потом сбоку подвязать
_collectionView = CollectionViewSource.GetDefaultView(Items);
и никуда биндить на этот _collectionView не нужно
и это волшебным образом заработает.
Хз как работает правда, может правит исходный список, но работает. А вот если нужно 2 вьюхам подвязываться на один список - вот тогда и нужно создавать раздельные CollectionViewSource и биндиться уже на них
Event -= Handler;
Event += Handler;
?
Потому что петушарп. И это даже не шутка. Фундаментальная проблема петушарпа, когда дегенераты пытаются запихнуть в язык то, что должно быть сделано сторонними бибиотеками. Разработчики петушарпа допускают ошибки/недоработки (что само по себе норма), но исправить их уже нельзя, потому что эта недоработка прибита гвоздями к языку.
Технически события в шарпе - не самое удачное решение. Оно очевидное!!!!, если нужно подписать метод и сахар к нему. Просто если у тебя состояние гонки, то такой подход не работает. Да и передать событие никуда нельзя ибо это сахар.
Но конкретно в твоем случае если ты не знаешь подписался или нет, то ты как то не так кодишь.
Лично я не использую события шарпа (то, что они искаропки не значит что нужно их использовать), а юзаю свои завязанные на лайфтаймы.
>>34033
нет. потому что ты долбоеб. мы это уже выяснили не раз.
>>34034
когда долбоеб жавист не знает, о чем он вообще говорит.
ок. поясню твою дурь
1 сторонними библиотеками базовые вещи = кто в лес, кто по дрова, 100500 подходов.
2 даже в убогой говножаве не сделали "на эту тему вообще ничего .мудрите что хотите, нас не колышет", а есть вполне себе стандартизированный подход работы с этим путем всяких там Listener-ов (что те же события в c# (ибо паттерн наблюдатель прост как сатиновые трусы) ...и в любом другом языке), то есть твой аргумент про "пытаются запихнуть в язык, поэтому идиоты" заведомо идиотский. И даже если ты вдруг не жавист, то в любом языке есть что то на эту тему, ну кроме синклер бейсика может.
1. Ну да. Просто говна на вентилятор кинуть захотелось, или расскажешь, чем плохо не жрать блины с лопаты?
2. И щас ты мне взял и показал ключевое слово event в божественной Java. Я уже достаю список твоих обсёров и ручку.
>про то, как они сокращают код, а когда открывают среду разработки, они видят вот это
Ну во-первых это нужно не всегда, это я решил навести красоту.
Во-вторых вся эта косметика (в буквальном смысле), накинута от души, хотя достаточно написать и так
[Category("Appearance"), Description("Жаба сосет хуи.")]
Это нужно чтобы в студии красиво отображались свойства твоего класса в окошечке настроек.
Я покопался во сорцах и там чуть ли не каждое второе свойство вызывает метод расчета. Я привык думать,что свойство безопасно и в большинстве случаев обращается к полю с готовыми результатами.
Т.е. это нормальная практика — присваивать свойство временной переменной, если в рамках одного метода она используется больше одного раза?
Только в случаях, если вызов свойства реально сильно влияет на производительность. А иначе заниматься преждевременной оптимизацией не стоит.
>Странные вопросы. Конечно да.
Ну вроде как плодить новые сущности тоже не хорошо — появляются сильные ссылки.
>Только в случаях, если вызов свойства реально сильно влияет на производительность. А иначе заниматься преждевременной оптимизацией не стоит.
А как это потом разгребать? Будет столько зависимостей, что уже не ясно кто и что творит.
Ну к примеру, возьмем графический интерфейс, там нормальная практика, что множество контролов (это могут быть итемы списка) биндится к одному и тому же свойству. Получается, что все они попусту вызывают метод, который выдает одно и то же значение.
Я не знаю, есть ли способы оптимизировать каскадные обновления, чтобы первый элемент обновил свойство, а все остальные получали готовое значение.
В структуры завезли ридонли методы и свойства.
Для классов такое сделать нормально скорее всего не возможно, потому что есть всякие кеши и внутренние счётчики, либо реаллокация буффера, что делает невозможным отличить поведенческую неизменяемость от чистой кодовой неизменяемости.
Но технически возможно сделать кастомный атрибут, что метод нечего не меняет, и добавить кастомную проверку, что такой метод вызывает только методы, которые помечены таким же атрибутом.
А можно без бойлерплейта, просто указав, что в классе нужно сгенерировать по полям toString()?
Можно.
Вот, наследуешься от специального объекта - говоришь, получаешь генерацию ToString. Даже не нужно метод переопределять в теле класса.
Метод с атрибутами, лично мне нравится больше, потому что я может быть хочу, чтобы пароль - не выводился в ToString или выводился звездочками. Атрибуты - дают такую возможность и это заебись.
Как жава это сделает - я лично представлю. Таким же "бойлерплейтом" с магическими аннотациями, которые в жаве используются повсеместно, но почему-то атрибуты в шарпе стали плохими, а в жаве аннотации - хорошие.
вот жеж вам скучно
>Как жава это сделает - я лично представлю
в жаве по аннотации это сгенерится в байткоде при компиляции
в шарпе то же самое делает fody
разница лишь в том, что лобок этот старый тулз который очень необходим в жаве в силу ее выразительной убогости и поэтому и развился и даже поддержку IDE получил, а Fody больше платформа для того же самого, куда каждый пилит что хочет
Поддержка IDE для тустринга не нужна, так что особой разницы между лобком этим и фоди нет в данном случае.
Но вообще это мало кому нужно генерить этот тустринг ибо явное лучше неявного.
>разница лишь в том, что лобок этот старый тулз который очень необходим в жаве в силу ее выразительной убогости и поэтому и развился и даже поддержку IDE получил, а Fody больше платформа для того же самого, куда каждый пилит что хочет
>ничестно ебёте!
Ничего не творится
Не тупи
Никакая кодогенерация сахара не исправит фундаментальные ограничения жавы.
Я с нее ушел на котлин и доволен как слон.
Если бы ты с котлином пришел, то у тебя была бы аргументация. Но с жавой ты вызываешь только сочувствие.
Убогий, вали уже в свой тред
На этом всё
Жавист настолько дебил что бесполезно пояснять ему что он дебил
Не буду тратить на это время
И другим не советую
>вот жеж вам скучно
Ну, мне реально скучно. Аналитика на работе нет, менеджеры - пидорасы. Вместо них - бегай за клиентом выясняй, че ж он там хочет, веди переписку, созвоны и прочее. Я уже месяца 2 ни строчки боевого кода не писал. А я, мать его, ПРОГРАММИСТОМ РАБОТАТЬ УСТРАИВАЛСЯ. Аааааа. Плак-плак.
Хочу выложить апи проект на сервер в докер
У меня будет сам проект + постгря + монга
Ессно всё на линупсе и под линупсом
Вопросы:
1) Кестрел или Нгинх?
2) Можно нормальный гайд для дебилов по выкладке в докер под линуксом для кестрела/нгинха?
По поводу кестрела - я упираюсь в то, что кестрел не видит сертификаты какие-то. Я чет по гайдам создаю на локальной машине и через енв переменные передаю в докер ран, но неткор все равно серт не видит. А остальные гайды бля под винду где проще
По нгинху чет сложнее прям выглядит, я пока не разбирал, если будет что-то хорошее скиньте плиз
У тебя кестрел будет всегда и нжинкс опционально.
Нжинкс ставят отдельным контейнером независимым от тех кто за ним стоит, в рамках кубов это ингресс
там не нугет, а целая стопка каких-то ебенячих пиздоглазых длл которые к гитхабу, конечно же, не приложены. я просто хочу временно заткнуть пикрелейтед.
Ты мне кажется вообще не разобрался в теме. Сборка асп кор контейнера это 2 операции: copy твоих бинарей в aspnet:X.0 и entrypoint на длл. Всё.
Под виндой асп кор ведёт себя идентично лини покуда ты не лезешь в богомерзкий иис
Это я понял. И в докерфайле это все прописано. Но когда я делаю тестово докер ран - контейнер запускается, останавливается, в логах пишет - сорри, но я не вижу сертов, сделай dotnet dev-certs https --trust (но это на Винду и мак, а на Линукс иди к нам в доки)
Я правильно понимаю что серт я генерю локально и должен просто передать как переменную среды в докер ран или композ?
И вообще, нужен ли этот серт мне для вебапи на впске, может я чет не так делаю?
>>36088
Понял, спасибо
Мне лень отвечать скажу только что
1. dev cert как бы удивительно не было только для разработки, кури доку по настройке кестрела
2. кури гугл, ты завуалированно просишь тебе доку пересказывать что докера что мсдн
Решают установкой Java и maven.
Чудес не бывает. Нет зависимостей - IDE не может проиндексировать то, чего нет.
Понимаю, шарпобляди сложно понять, что он сидит в луже говна, но представь себе, бывают. В Java давно уже забыли про проблемы с зависимостями благодаря божественному мавену.
ДОЛБОЕБУ сложно понять что чел НЕ ХОЧЕТ затягивать зависимости на машину ибо ему не нужно компилить, а просто код посмотреть с рабочими переходами по коду
>нет, это ни я ни магу, это мне нинужно, слышите, нинужно!!!! так как убрать красное говно из IDE?
Оподливился с коупящей шарпочмони.
зато у нас есть тулза, чтобы автоматически ставить configureAwait(false))))) джавабляди соснуле))
джавалох скажет что у них нет асинк/авайт поэтому им не нужно configureAwait, и даже не поймет какой он лошара.
— Так ты ж пишешь на петушарпе. Джаву с мавеном попробуй.
— Джаваблядь закукарекала. На джаве мне неудобно.
— Тогда ручками зависимости качай, лалка.
— Двач, а почему я код так медленно пишу? И мне очень неудобно.
— Потому что ты на петушарпе пишешь? На джаве пиши.
— Джавабляди не нужны! Бамп! Еще варианты? Бамп!
— Ну котлин попробуй.
— Ебанутые...
— Двач, почему на меня коллеги так странно поглядывают?
— Потому что ты на петушарпе ешь!
— Каждый раз одно и то же, что за дебильные анонимусы. А другого объяснения нет?
— Может и есть, но это не важно. Важно писать код на джаве.
— Кажется, я совсем не понимаю мира и не гожусь для этой жизни.
— Да все с тобой нормально, просто возьми джаву, когда надо будет написать код.
- ПРОСТО! аххахахах! ПРОСТО! Ахуительная история. Угу. ПРОСТО блять. Спасибо, идиоты, за совет, блять.
— Двач, двач! Мне так плохо, я опять не выспался! За что мне это?
— На чём код писал, дебилушка?
— На петушарпе, конечно.
— А джаву не пробовал взять?
— Почему анонимусы так безжалостны ко мне, а еще двач-помогач?! Это невыносимо!
— Джаву взять не пробовал?
— Нет!
— А что тебе помешало?
— Я не хочу об этом говорить. Всё. Тред закрыт. САЖИ ТРЕДУ САЖИ. Вайп!
— Знал бы ты, двач, как я хочу композиции!
— У каждого своя судьба.
— Как ты думаешь, анон, когда-нибудь у меня получится сделать композицию? Я ведь не хочу ничего особенного.
— Так скачай JDK, установи lombok и пиши свою композицию.
— Да? Хорошо, я подумаю.
— Двач, и как люди пишут toString() для классов и не помечают все поля бойлерплейтом?
— На джаве, блять!!
— А чего ты ругаешься сразу? Я ж нормально спросил...
— Анон, поговори со мной.
— Я конструкторы пишу.
— Так ты ж пишешь на петушарпе. Джаву с мавеном попробуй.
— Джаваблядь закукарекала. На джаве мне неудобно.
— Тогда ручками зависимости качай, лалка.
— Двач, а почему я код так медленно пишу? И мне очень неудобно.
— Потому что ты на петушарпе пишешь? На джаве пиши.
— Джавабляди не нужны! Бамп! Еще варианты? Бамп!
— Ну котлин попробуй.
— Ебанутые...
— Двач, почему на меня коллеги так странно поглядывают?
— Потому что ты на петушарпе ешь!
— Каждый раз одно и то же, что за дебильные анонимусы. А другого объяснения нет?
— Может и есть, но это не важно. Важно писать код на джаве.
— Кажется, я совсем не понимаю мира и не гожусь для этой жизни.
— Да все с тобой нормально, просто возьми джаву, когда надо будет написать код.
- ПРОСТО! аххахахах! ПРОСТО! Ахуительная история. Угу. ПРОСТО блять. Спасибо, идиоты, за совет, блять.
— Двач, двач! Мне так плохо, я опять не выспался! За что мне это?
— На чём код писал, дебилушка?
— На петушарпе, конечно.
— А джаву не пробовал взять?
— Почему анонимусы так безжалостны ко мне, а еще двач-помогач?! Это невыносимо!
— Джаву взять не пробовал?
— Нет!
— А что тебе помешало?
— Я не хочу об этом говорить. Всё. Тред закрыт. САЖИ ТРЕДУ САЖИ. Вайп!
— Знал бы ты, двач, как я хочу композиции!
— У каждого своя судьба.
— Как ты думаешь, анон, когда-нибудь у меня получится сделать композицию? Я ведь не хочу ничего особенного.
— Так скачай JDK, установи lombok и пиши свою композицию.
— Да? Хорошо, я подумаю.
— Двач, и как люди пишут toString() для классов и не помечают все поля бойлерплейтом?
— На джаве, блять!!
— А чего ты ругаешься сразу? Я ж нормально спросил...
— Анон, поговори со мной.
— Я конструкторы пишу.
ты просто брехливое чмо
в жава та же ситуация - открываешь проект и начинает затягиваться куча говна и пока все это говно не затянется все будет красным гореть. Так что иди нах, дебич
Всё затягивается автоматически. Если интернет хороший то вообще такой вопрос как "пачему краснинькае" не появляется, все сразу нормально.
Ты правда не видишь разницы? Джава то, что решает ломбок не придумывала (0), она просто нихуя не делала в этом направлении. В петушарпе же навалили кучу говна (-1), которую пришлось разгребать через configureAwait(false).
в дотнете тоже все затягивается автоматически.
Исключение - зависимости были просто кучкой длл или зависимыми проектами, которые просто не были выложены в паблик.
В жава при таком подходе эта же куча жаров ниоткуда сама не нарисуется и подпроекты тоже.
инет может быть 10000000 раз хороший, просто это дерьмо засрет диск, а нужно будет 0 раз, ведь они просто не нужны.
в дотнет будет то же самое. При открытии проекта начнется засираться кеш nuget-а лишним говном.
>>36469
>она просто нихуя не делала в этом направлении.
>В петушарпе же навалили кучу говна (-1)
ИМЕННО. Когда УЖЕ во многие языки завезли асинк авайт (даже в пхп появится лол) - в жаве кодят как еще прадеды кодили - строят монструозные конструкции и закатывают солнце вручную.
про onfigureAwait(false) ты вообще не знаешь что это - так что смешно слышать от джавалошка какую то там критику
Так если не нужны, то чего вдруг убедили разрабов жавы таки добавить их в жаву
или как в го с дженерикам "оно не нужно". А теперь "йоба, да это же киллер фича"
просто смешно слушать подобных говноедов.
я посмотрел уже и пиздоглазых вызовов там не так уж и много и по коду можно примерно понять что там они делают и почем
то что мне надо находится внутри неймспейсов проекта т.е. оно все нормально индексируется.
но каким-то хуем отвалился весь System + System.Collections.Generic.
вот что это за ШИЗА?
это глюк студии. Открываешь старый проект - все красное. Нужно удаление .vs (иногда не помогает)
в idea-шных IDE там есть рестат и инвалидация кешей, а в студии удаляю .vs
Ну не надо проецировать. Обычно такое слышится от шарпоблядей, которые лучше ручками будут макакить бойлерплейт и, чтобы легче было коупить, еще и пообещают линтером нипущить и зопретить нормальные человеческие практики, если они появятся.
я это первым делом сделал, не помогло.
>иммяяяна!!!!
Что именно-то? Ты выёбываешься кучей говна, которую фиксят неявным добавлением конфигуравейта всюду?
мало ли. может проект на дотнет 5, а у чела просто на машине такого нет, а стоит 7
Не стоит путать рантайм и сдк
А может, как оно обычно бывает, проект пытается быть кросс и там прописано 100500 вариантов вида .net461, core, standard и части этого добра просто нет на машине
вот у меня нет - я пишу под дотнет 7, зачем мне старое.
Также не стоит забывать что потерянных зависимостей может быть так много, что количество анрезолвед зашкаливает и анализатор перестает строить модель.
>>36475
>которые лучше ручками будут макакить бойлерплейт
совсем тупой???? это слышится в ПЕРВУЮ ОЧЕРЕДЬ от жавистов (и от гошников, но их понять можно) и жависты такие "нахер нам это не нужно. у нас ентерпрайз, посмотри сколько написано всякого на жаве".
только жавист будет терпеть монструозность синтаксиса. Взять те же гет сеты - их так и не сделали в самом языке лол, а заставляют жавамакаков либо иметь весь этот бойлерплейт в коде (и насрать что это IDE сгенерит - это просто синтаксический мусор) или юзать сторонние вещи которые сгенерят не в код.
В других языках фичи и сахар привествуются. Даже вон в питоне питоноебы орали на тайпхинтинг мол портит язык, но полезность победила дебилов. туда же и async/await - ну да есть еще додики, но в основном это стало повсеместным.
А в жаве за каждую фичу нужно жертвы богам приносить или я не знаю что сделать чтобы это было. Делают в итоге что то- через десяток лет лол. ДАЖЕ если это просто сахар и не портит совместимость.
>>36477
Ну пиши явный какая проблема. пишут же жава лошары гетХ/сетХ и их не парит. А те кто не пишут, те генерят.
так и тут - нет разницы
И вообще это опционально. В асп.нет кор он не нужен в принципе. Также можно детачнуть контекст на старте операции и дальше уже конфавайтить тоже не нужно. Разные способы есть.
Но это мелочи жизни по сравнению с ВООБЩЕ НЕТ АСИНК/АВАЙТ, пишем как прадеды
>мало ли. может проект на дотнет 5, а у чела просто на машине такого нет, а стоит 7
Хуя себе оправдание шарпошлюхи. А что оно оправдывает-то?
>совсем тупой???? это слышится в ПЕРВУЮ ОЧЕРЕДЬ от жавистов (и от гошников, но их понять можно) и жависты такие "нахер нам это не нужно. у нас ентерпрайз, посмотри сколько написано всякого на жаве".
>только жавист будет терпеть монструозность синтаксиса. Взять те же гет сеты - их так и не сделали в самом языке лол, а заставляют жавамакаков либо иметь весь этот бойлерплейт в коде (и насрать что это IDE сгенерит - это просто синтаксический мусор) или юзать сторонние вещи которые сгенерят не в код.
>В других языках фичи и сахар привествуются. Даже вон в питоне питоноебы орали на тайпхинтинг мол портит язык, но полезность победила дебилов. туда же и async/await - ну да есть еще додики, но в основном это стало повсеместным.
>А в жаве за каждую фичу нужно жертвы богам приносить или я не знаю что сделать чтобы это было. Делают в итоге что то- через десяток лет лол. ДАЖЕ если это просто сахар и не портит совместимость.
Самый эпичный "нет, ти!!!!" за всю историю человечества. Ладно, повоевал с джавистами, пора и писать туСтринг вручную. Генератор его же ненужен. Стоп, это же джависты так говорят только. Падажжи ёбана...
>Ну пиши явный какая проблема. пишут же жава лошары гетХ/сетХ и их не парит. А те кто не пишут, те генерят.
>так и тут - нет разницы
Не-а. @Getter в джаве такой же явный, как и метод getХуй(). Потому что когда открываешь класс, сразу видишь, что он делает. А твоя параша настраивается где-то в ебенях и делает неявно хуйню на весь проект, и пока не прочитаешь все настройки говнофоди, не поймёшь, что и как работает. И еще их держать в голове надо.
1 "нет ти" это про тебя. посмотри каждый второй свой пост жавалошок
2 про тустринг тебе выше по треду много раз поясняли
ты долбоеб какой то реально. Пытаешься косить под тролля, но косишь под долбоеба. и не перестаешь
>>36491
>Не-а. @Getter в джаве такой же явный, как и метод getХуй()
{get; } такой же явный как и метод гетМозгУжавистаЕсли найдешь()
>и делает неявно хуйню на весь проект
ну точно долбоебище эпичный.
то есть тебе в говножаве можно указать аннотацию где ты хочешь чтобы оно работало, и это типа можно только в жаве - весь остальной мир типа работает неявно
нет никакой принципиальной разницы между ломбоком и фоди если не нужна поддержка IDE. Но как пояснить это жавалошаре?
>1 "нет ти" это про тебя. посмотри каждый второй свой пост жавалошок
И снова "нет, ти!!!", лол.
>{get; } такой же явный как и метод гетМозгУжавистаЕсли найдешь()
Ебло, кто-то тебя за {kukarek;} спрашивал? Мы про конфигуравейт говорили.
>>и делает неявно хуйню на весь проект
>ну точно долбоебище эпичный.
>то есть тебе в говножаве можно указать аннотацию где ты хочешь чтобы оно работало, и это типа можно только в жаве - весь остальной мир типа работает неявно
Что ты блядь высрал?
>нет никакой принципиальной разницы между ломбоком и фоди если не нужна поддержка IDE. Но как пояснить это жавалошаре?
Ну и это тоже. Ещё один "нинужно", но не забывай, так говорят только джависты.
Вкатывался в Java Spring, понял основы MVC - но сейчас учу Unity. На .Net Core смогу работу найти?
>И снова "нет, ти!!!", лол.
это уже клиника у жаволошка. проехали
>Ебло, кто-то тебя за {kukarek;} спрашивал? Мы про конфигуравейт говорили.
цитирую жавалошка
>Не-а. @Getter в джаве такой же явный, как и метод getХуй()
>Мы про конфигуравейт говорили.
еще одна клиника. склероз. тебе бы к врачу что ли
по поводу же ConfigureAwait - он настраивается (как и все в фоди) и указываешь в каких проектах тебе это нужно. Ничего неявно не начинает работать автоматом абы где - даже это модуль работает только там, где ЯВНО укажешь.
>Ещё один "нинужно",
поясняю жаваЛОХУ
если у тебя генерятся геттеры и сеттеры, то IDE должна как то узнать об сгенереном, чтобы ты мог юзать их в коде и IDE не ругалась "нет такого". В случае с гетсетами или тустрингами или конфигуравайтами ОНО СУЩЕСТВУЕТ изначально - то есть никакого неявного НОВОГО кода, про который студия должна ждать - ПРОСТО НЕ РОЖДАЕТСЯ, а потому не нужны никакие доп средства чтобы студии рассказать "там эта, у тебя свойство появилось"
я понятно пояснил долбоебу? впрочем, у него шиза и склероз.
Не сможешь, если сейчас же не выкинешь Unity и не начнёшь учить ASP.NET.
>рррря, клиника!!!!
А может по делу что-то скажешь? Алсо, снова "ниееет, ти", ведь я до этого недвусмысленно намекнул на твои психические заболевания постом про шизофазию, лол.
>ты с клиентом попутал?
Нет, нужен именно сервер (небольшой), не хочу ASP тянуть, хочу в функционалоном стиле свои обработчики запросов написать как например в сишном Served https://github.com/meltwater/served .
Я уже заебался подставлять двоеточие вручную. Может я что-то делаю не так?
Не ленись.
Хуй знает, с решарпером всё ок
Ну на С++ вон написали даже на лямбдах. На С# сам бог велел.
Берёшь и смотришь каждый у кого больше 100-150 звёздочек
я планирую вызывать этот метод только один раз, но паранойя говорит мне обратное.
Зависит от того куда ты интегрируешься. Для ui фреймворков это распространено но в условном асп бэке я бы не хотел такое видеть (либо спихнуть на di этот вызов)
Ясно, манька обоссана в очередной раз.
Зависит. Так что никто не бьет.
Ну. Типа допустим, у тебя как-бы плагинная архитектура. Ядро - прходится по папочке ./plugs ищет dll'ки и достает из них IPlugin'ы. Ну вот как иначе ты будешь их инициализировать, чтобы было ПРОСТО.
Просто вот такие вот Init, BeforeInstall, Install, AfterInstall, OnTick, BeforeUninstall, Unistall, AfterUninstall и прочее - должны быть не в единственном экземпляре на весь проект, а частью некоего архитектурного решения, которое должно быть задокументировано и про которое должны все знать.
Могу своим поделиться.
Умеет отдавать статику. В остальном - вот контекст, че хочешь то и делай с ним.
Суть примерно следующая:
new ServerBilder()
.Listen(80)
.UseStatic("./www")
.UseServices(serviceProvider)// чтобы в стиле ASP провайдить сервисы в обработчкик
.CreateDipatcher(assembly)
.Use<POST>((ctx, "my/secret/api") =>
var dao = ctx.Request.Body.FromJSONAsync<MyDAO>();
Console.WriteLine(dao);
return ctx.CreateResult.OK(new {status = "OK"});
)
.Build()
.Run();
Да.
Не умеет в вебсокеты
Не умеет в HTTP3
Мидлвары - есть, но полезных - я не делал, так что если авторизация какая-то хитрая - сам делай.
у вас комплекс неполноценных долбаебов?
пытаетесь самим себе доказать что ваше говноязык лучше говноявы?
Как быть?
Я почему спрашиваю.
Я вот смотрю. И я как-бы понимаю, что оно делает. Потому что типа блин, я не первый день код чужой читаю.
Но пиздец. Неужели вот так надо было писать?
Чтобы что?
Ещё и спермотоксикоз.
Написал два конструктора для инициализации твоей мамаши.
Так вот.
Теперь у меня вопрос в связи с этим.
Как сюды дебагер прикрутить?
Ну блин.
Типа я чет не нашел как прикрутить дебаггер к виму.
А хочу с вимом поиграться.
Можно конечно emacs который как-бы иде. Но я слышал много нехороших слов про него в свое время.
Ух, наверняка просмотр в детстве фильмов про хакеров как-то повлиял на моё желание вкатиться.
Во-первых, вероятно тебе нужно отключить у холста реакцию на мышь на время инициализации кистей. За это отвечает вроде как свойство IsHitTestVisible=false. В WPF оно есть у каждого контрола. В этом случае холст перестает реагировать на любые клики мыши, стилуса (про клавиши не помню, но вероятно тоже).
Если у тебя не WPF, а еще какая-то залупа, в которой нельзя отключить хит мыши, то можно поверх холста бахнуть слой практически прозрачного Border или Grid или чего угодно, который бы собой блокировал холст пока идут необходимые операции. Достаточно 1% прозрачности, чтобы заблокировать собой клик мыши, при этом юзер не заметит разинцы.
Во-вторых, тебя может сбить с толку, что асинхронная функция требует await, который требует async и так далее до бесконечности. На самом деле ты можешь из обычного метода запустить асинхронную функцию и она все так же будет выполняться асинхронно. Разница в том, что await заставляет не выполняться дальнейший код, пока не завершится работа вызываемого асинхронного метода.
Грубо говоря, вот в этом коде:
public static void Test()
{
. . . _ = TestEachAsync();
. . . Debug.WriteLine("Хуякс!");
}
public static async Task<bool> TestEachAsync()
{
. . . for (int i = 0; i < 10; i++) {
. . . . . . Debug.WriteLine(i);
. . . . . . await Task.Delay(1000);
. . . }
. . . return true;
}
Ты получишь вот такой ответ:
>0
>Хуякс!
>1
>2
>3
>4
>5
>6
>7
>8
>9
Как видишь, сообщение "Хуякс!" из метода Test было выведено не дожидаясь завершения метода TestEachAsync. Оно не на первом месте, но это просто вопрос микросекунд, либо пока не закончится одна итерация async-метода.
И тут ты спросишь: а нахуя это нужно? И тут мы приходим к третьему пункту.
В-третьих, для асинхронных методов можно использовать токены. Это может быть токен отмены, либо токен завершения. Это некий элемент, который позволяет извне влиять на работу асинхронного метода, либо получать его состояние.
В этих случаях асинхронный метод запускается обычным способом НЕ в режиме авейта (как в примере выше) и забывается. А далее ты любыми способами (хоть в цикле) проверяешь тот самый токен на окончание асинхронной инициализации твоих кистей, либо активируешь отмену в токене для прекращения работы асинхронного метода.
Так же, в таких случаях устанавливают авейт по таймеру, чтобы завершить ожидание в любом случае, если в асинхронной функции что-то пошло не так. Так устроены например "именованные каналы" которые ожидают ответа сервера определенное количество времени, а потом прекращают работу в любом случае. Даже можно сделать уведомление о завершении асинхронного метода при помощи события.
Это позволяет избавиться от той самой проблемы каскада асинков и авейтов ради одного асинхронного метода. Ну или если асинхронный метод (как в случае с ожиданием ответа сервера) может длится достаточно долго, чуть ли не минуты.
Про токен завершения гугли TaskCompletionSource
Про токен отмены гугли CancellationTokenSource
Во-первых, вероятно тебе нужно отключить у холста реакцию на мышь на время инициализации кистей. За это отвечает вроде как свойство IsHitTestVisible=false. В WPF оно есть у каждого контрола. В этом случае холст перестает реагировать на любые клики мыши, стилуса (про клавиши не помню, но вероятно тоже).
Если у тебя не WPF, а еще какая-то залупа, в которой нельзя отключить хит мыши, то можно поверх холста бахнуть слой практически прозрачного Border или Grid или чего угодно, который бы собой блокировал холст пока идут необходимые операции. Достаточно 1% прозрачности, чтобы заблокировать собой клик мыши, при этом юзер не заметит разинцы.
Во-вторых, тебя может сбить с толку, что асинхронная функция требует await, который требует async и так далее до бесконечности. На самом деле ты можешь из обычного метода запустить асинхронную функцию и она все так же будет выполняться асинхронно. Разница в том, что await заставляет не выполняться дальнейший код, пока не завершится работа вызываемого асинхронного метода.
Грубо говоря, вот в этом коде:
public static void Test()
{
. . . _ = TestEachAsync();
. . . Debug.WriteLine("Хуякс!");
}
public static async Task<bool> TestEachAsync()
{
. . . for (int i = 0; i < 10; i++) {
. . . . . . Debug.WriteLine(i);
. . . . . . await Task.Delay(1000);
. . . }
. . . return true;
}
Ты получишь вот такой ответ:
>0
>Хуякс!
>1
>2
>3
>4
>5
>6
>7
>8
>9
Как видишь, сообщение "Хуякс!" из метода Test было выведено не дожидаясь завершения метода TestEachAsync. Оно не на первом месте, но это просто вопрос микросекунд, либо пока не закончится одна итерация async-метода.
И тут ты спросишь: а нахуя это нужно? И тут мы приходим к третьему пункту.
В-третьих, для асинхронных методов можно использовать токены. Это может быть токен отмены, либо токен завершения. Это некий элемент, который позволяет извне влиять на работу асинхронного метода, либо получать его состояние.
В этих случаях асинхронный метод запускается обычным способом НЕ в режиме авейта (как в примере выше) и забывается. А далее ты любыми способами (хоть в цикле) проверяешь тот самый токен на окончание асинхронной инициализации твоих кистей, либо активируешь отмену в токене для прекращения работы асинхронного метода.
Так же, в таких случаях устанавливают авейт по таймеру, чтобы завершить ожидание в любом случае, если в асинхронной функции что-то пошло не так. Так устроены например "именованные каналы" которые ожидают ответа сервера определенное количество времени, а потом прекращают работу в любом случае. Даже можно сделать уведомление о завершении асинхронного метода при помощи события.
Это позволяет избавиться от той самой проблемы каскада асинков и авейтов ради одного асинхронного метода. Ну или если асинхронный метод (как в случае с ожиданием ответа сервера) может длится достаточно долго, чуть ли не минуты.
Про токен завершения гугли TaskCompletionSource
Про токен отмены гугли CancellationTokenSource
Соси хуй. Дрызготня из строк нравится только сумасшедшим.
Локальные блоки выглядят более цельными как раз в варианте
something {
}
и нет
вот
этой
ненужной
хуеты
внутри
метода
Интересно на что стриггернулся вайп-фильтр? На пробелы? Разве это не доказательство пососной идеи — ставить везде
something
{
}
Двачую. А еще бесят пидоры, которые вместо doSomething(arg1, arg2, arg3, arg4); пишут
doSomething(arg1,
arg2,
arg3,
arg4);
Это отдельные конченные уебки
Если аргументы большие или там целое выражение на каждый аргумент — то можно. Только вот конечно arg1 тоже переносить надо, и скобку последнюю, а то так правда уёбищно.
doSomething(
—— arg1,
—— arg2,
—— arg3,
—— arg4
);
Ну ок. Только ты в оффис мне 21:9 будешь покупать монитор, чтобы это помещалось в.
await userBasketAdder.AddGoodsToUserBasket<DefaultUser, MarketGoods>(user, goodsList, discountCalculator, priceProvider, geopositionProvider, weatherProvider, deliveryProvider, zodiacProvider, astroTimeClockProvider, loggerFactory, cancellationToken);
Какой-то анальный CommandExecutor. Дал бы хотя-бы какую-нибудь тестовую задачку, чтобы легче было понять, понятный код или нет.
Это код который разбивает буффер на "фреймы".
Собственно. Потому я и задаюсь вопросом. А надо ли было его вот настолько обскурным делать? Типа все что оно должно сделать - проверить - встречается ли в буффере какая-то последовательность символов, либо что буффер заполнен на нужное количество байт.
На примере Student и Course, допустим.
Я пишу типа:
modelBuilder.Entity<Student>().HasMany<Course>(s=> s.Courses).WithMany<Course>(c=>c.Students).UsingEntity<StudentCourse>()
Так?
Вопрос 1. Где это писать? В StudentConfiguration?
Вопрос 2. В CourseConfiguration надо то же самое повторять на эту тему? Если да, то как избежать повтора? Если нет, то как выбрать между StudentConfiguration и CourseConfiguration для описания связей?
Вопрос 3. Можно ли это как-то написать внутри StudentCourseConfiguration?
То есть немного не так, да, modelBuilder он внутри глобального OnModelCreating, но его не хочется захламлять, сущностей много, связей тоже. Надо вынести в конфигурацию, в какую?
Я вижу ты шаришь. Тред про шарп, но спрашу, раз тут гуру джавы сидит.
Смотри. У меня есть проект на ant, java 5, в котором используется mina и какие-то jre отсутствуют, как я понял, судя по названию класса MainSplashScree, AcitvationWindow и т.д. эти jre какие-то связанные с визуалкой.
Собсвтенно. Я сколько не пробовал - все горит красненьким. Ставил идею, ставил нетбинс, ниче само не качается, ругается и не работает.
Че мне делать? Надо собрать и кое-какие изменения внести. А нихуя не собирается.
А вообще обычно я не пишу эти связи т.к. они автоматически по навигационным пропам строятся и только миграцию проверяю.
Нужно руками задавать только если какой то криворукий мудила всё сломал до тебя и еф не может сам понять ту хуйню которую ебанул этот призрачный гений
Чтобы изнутри класса изменять переменную в обход логики в свойстве.
Jre это джава, еблан. Не может отсутствовать "несколько jre".
Но вообще, понятия не имею, в чем у тебя дело, ant это легаси хуйня и не потому что какие-то зумеры решили отменить его и заставить всех перейти на своё говнецо, а потому что сами разработчики анта решили сделать вместо него мавен. Может быть (не шарю за ант) ант вообще не умеет автоматически качать зависимости.
Большая. Я долго не мог понять, что ты/он имеет в виду под "отсутствует несколько jre".
var options = new RestClientOptions("localhost:8999") {
Authenticator = new HttpBasicAuthenticator("username", "password")
};
var client = new RestClient(options);
var request = new RestRequest("testapi");
var response = await client.GetAsync(request, cancellationToken);
Ты дурак или да? Написал же что он всегда возвращает ОК даже если никакого сервера нет.
В папке проекта - подпапка packages, там лежит куча jar'ов
сторонних компонентов: для составления excel'евских отчетов, для работы с БД, много чего еще, но каких-то jre с визульной частью - нет. А в самом проекте - они прописаны. И проект - не собирается. Вот совсем.
Публичным ты делаешь свойство а не переменную.
Зачем? На твоем скрине - буквально показано зачем. Чтобы можно было логику какую-то добавить как в get так и в set.
Вот допустим ты решил возраст хранить в int потому что удобно часто именно в int хранить.
Но ты не хочешь, чтобы снаружи какой-нибудь еблан сделал отрицательный возраст.
Если ты наружу поле вытащишь, кто угодно в коде сможет это делать, и придется по всему коду делать проверки, которые бы могли быть внутри класса.
Ну. Типа давай на примере с возрастом.
public class Age
{
private int _totalYears = 0;
public Age(int totalYears) => TotalYears = totalYears;
public TotalYears { get => _totalYears; set {Validate(value); _totalYears = value} }
pruvate Validate(int val) => Throw<ValidationException>.If(val<0);
}
Нахуй ты лезешь абы вякнуть если нихуя не петришь? Другие свойства все пустые, ничто не выдаёт ошибку.
Ну, тебе виднее, мистер неспособный провалиться дебаггером в длл
1. проставь кодировку в файле (студия заебала, но после добавления эдиторконфига с ютф8 вроде успокоилась)
2. заверни чистую строку в хтмл и проставь кодировку в хедере
> ientitytypeconfiguration
Но какой? Студента? Курса? Обоих? В StudentCourse запихнуть не получается, или я не умею.
> описываю связи в сторону один ко многим
Но мне надо промежуточную таблицу описать. И FK в ней и к ней. У меня готовая бд.
> Вопрос 1. Где это писать? В StudentConfiguration?
В OnModelCreating. Плодить эти файлы с конфигурациями - долбоебизм, если у вас не 10+ человек в команде.
> Вопрос 2. В CourseConfiguration надо то же самое повторять на эту тему?
Не надо.
> Вопрос 3. Можно ли это как-то написать внутри StudentCourseConfiguration?
Можно. Но не нужно.
Вообще. Нахуя тебе эта промежуточная сущность? В 99% случаев оно нахуй не нужно. Если там какая-то логика нужна, типа - оплочено-неоплочено, когда оплочено и все такое, то тогда тебе нужна нормальная СУЩНОСТЬ, а не этот выпердышь.
Вообще. Сделай нормально. Если у тебя этот StudentCourse - таки сущность, а не просто отражение таблички, то назови нормально.
Допустим мне нужно достать файлы из архива. Для этого я должен распаковать архив и дальше прочесть файлы. Должен ли я распаковывать во временную директорию, которая может вообще находиться на другом диске?
Архиватор так и делает для некоторых операций. Но разве это не сказывается на скорости работы? Или угроза задеть юзером данные важнее скорости?
Зачем ты их вообще прописываешь? Навигационные поля сделай и еф всё сам свяжет.
Не понимаю этой дрочи на прописывание всего ручками что и так очевидно для еф. Тем более что ты всё равно увидишь в миграции если что то не так пошло.
А связи у тебя 2 шт один ко многим и логично что если подход как выше писал то обе должны быть через StudentCourse заданы
- Не видел консольных архиваторов которые бы писали куда то а потом перемещали
- Видел что так делает 7зип гуёвый но почему хз, может что бы конфликты отдавать на откуп проводнику
Как так делает?
Архиваторы, обычно, берут и в памяти ворочают этим делом. Нахера им чет там распаковывать на диск? Чтобы что? Чтобы где?
кроме того что пытаюсь переписать на LINQ то что и так нормально работает
Тру вэй для xml это стримы т.к. к примеру всякие госы делают выгрузки по паре гигов на файл
И вообще есть такая проблема. Допустим есть несколько классов, у каждого из которых должны быть методы:
Open(string filePath);
Save(string filePath);
Import(string filePath);
Export(string filePath);
Куда пихать эти методы?
- В тело самих классов? У меня нет опыта с реальными проектами, но выглядит мусорно. Я же не буду пердеж на каждый случай жизни пихать в класс? Неизвестно какой зоопарк образуется с экспортами, например.
- В команду типа ICommand? Неудобно. Хотя уже существуют по команде для каждого из четырех методов и мне достаточно для условного OpenMyClassCommand добавить метод Open. Это самый легкий путь.
- Сделать отдельный файл-менеджер для каждого класса? Вероятно этот вариант подходит. Вот я решил сделать класс, с расширениями, но проблема в том, что такие методы как Open и Import не могут быть расширениями т.к. должны привязаться к экземпляру класса, которого на момент их вызова еще нет — они его должны создать сами.
Вообще интересует практика организации подобного. Насколько зашкварно пихать логику в ICommand? Или они должны существовать всего лишь мостом между View и внутренней логикой? Я считаю что второе.
К объекту
Который в DataContext в текущем месте если ты не пытаешься указать другое место (например ElementName= укажет его как начало для бинда (а не его DataContext)
Нет
Имена и MVVM перпендикулярны. Вид внутри себя может делать что угодно и как угодно.
Ты биндишься к свойству. Это свойство при обновлении вызывает событие, на которое триггерится привязка.
По твоему тексту ничего не понял. Ты бы описал конкретный пример к чему ты хочешь биндиться: к свойству вьюмодели или к свойству соседнего\родительского контрола в xaml.
Обычно не одобряют биндиг по имени к мейн-контролу, чье имя могут изменить извне. На остальные контролы пофиг.
Но меня пугает, что ты собрался биндиться из кода ко вью-контролу по имени. Это что-то странное.
да
да
ответы давал в том же порядке в каком вопросы с некоторым смещением, а значит ответ "нет" к вопросу "Или я из кода объект к вьюшной залупе биндить должен?"
xaml это вид. имена в xaml - все равно вид. это никак не вылазит за буковку V в MVVM, а значит никак эту самую MVVM не нарушает. Можно разве сказать что "не нужно биндится прямо на элемент, а пусть будет связующим звеном вьюмодель", но это только когда есть за что зацепиться во вьюмодели. Технически же вид может творить внутри себя любую дичь, хоть писать в стиле винформса без биндингов и хамла (или быть консольным выводом) и это никак не нарушит MVVM
Не знаю. всякое бывает. может кому и нужно.
>Навигационные поля сделай и еф всё сам свяжет
Хммм, окей. А если у меня ключ сложный? Ну типа у студента это (id, class)? Там же правильно назвать надо, как я понял.
>Но меня пугает, что ты собрался биндиться из кода ко вью-контролу по имени.
Не пугайся, я просто изучаю WPF параллельно делая на нем пет-прожект, а в туторах про биндинг есть в том числе примеры биндинга из кода, вот и пытаюсь выяснить как "принято" делать.
Моя позиция что если тебе нужен составной ключ то ты что то делаешь не так.
Если тебе нужна уникальность через набор полей то для этого делается индекс с ограничением на уникальность
биндинги из кода нужны редко
когда пишешь что то этакое динамическое
Например динамическую таблицу где нужно больше чем тупо автосгенерить имена колонок.
Биндятся в основном из View к свойствам ViewModel, которая расположена в DataContext. Большая часть данных должна браться оттуда, поэтому имена контролов в основном не нужны в MVVM. Не то, чтобы это запрещено, просто в этом нет смысла.
За редким исключением, когда речь идет о визуальной компоновке контролов, когда свойство одного контрола зависит от свойства другого.
Да и то, я сейчас замечаю, что таких случаев все меньше и меньше, потому что это решается либо ValueConverters, либо нормальной разметкой. Случаи типа "заблокировать кнопку, если в комбобоксе выбран такой-то итем" решаются собсно информацией из вьюмодели о выбранном итеме и конвертером. Нет смысла обращаться к состоянию самого комбобокса.
А вот в стилях очень часто дают имена контролам, чтобы различные триггеры могли обращаться к ним.
Так что, основная твоя работа заключается в том, чтобы передать вьюмодель в датаконтекст. А уже вью сама ищет то, что нужно по именам свойств вьюмодели. Делает она это вслепую в рантайме.
Т.е. когда ты пишешь
<TextBlock Text="{Binding Name}" />
Вьюшка лезет в объект датаконтекста и ищет у него свойство Name. Это свойство должно быть либо DependencyProperty либо INotifyPropertyChanged, иначе выскочит исключение или (что еще хуже) утечка памяти. Потому что такие свойства уведомляют о своем изменении — это важно при биндинге.
Так как все это вслепую, то для себя, на этапе дизайна, ты можешь указать тип датаконтекста, и это нужно чисто для подсказок IntelliSence:
d:DataContext="{d:DesignInstance Type=local:MyViewModel}"
Чтобы эту залупу каждый раз не запоминать, есть сниппет "ddc", что сокращенно от d:DataContext. Будет вставлена строка выше (ток свою вьюмодель вставляй).
Если биндиться из кода ко вью, то нужно ОЧЕНЬ хорошо понимать для чего это нужно. Потому что это не нужно практически никогда.
Кури как работают настройки в ms di
Первый раз когда туда залез было очень даже интересно особенно как создаётся host и app конфигурации (спойлер вторая создаётся на основе того что удалось вытащить из первой).
Так же обрати внимание на провайдеры
https://learn.microsoft.com/en-us/dotnet/core/extensions/options
https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options
>есть сниппет "ddc"
Я себе сделал еще "gcd" и "grd" - Grid.ColumnDefinitions и Grid.RowDefinitions,
Потому что писать это вручную каждый раз - это надо быть ебанутым мазохистом. Вроде есть дефолтный сниппет, но он не такой гибкий.
Вообще для MVVM советую максимально обмазаться сниппетами, если хотите сохранить самообладание и любовь к жизни. У меня есть:
nprp - создает расширенное свойство INotifyPropertyChanged
dprp - блок DependencyProperty
prp - просто расширенной свойство
onprp - блок OnPropertyChanged
dsp - блок Dispose
Бамп вопросом.
Хочу обратиться к статическому классу ResourceDictionary и видеть там свой метод Open().
Переменные экономишь? Это невозможно дебажить, но ты похоже и сам это понял раз не запустил и то и то пошагово
Ты рофлишь?
Ты же знаешь что такое CRC?
Короче. Не тупи. Прочитай про то что такое CRC и как оно вычиляется.
Таблица кстати тебе нахуй не уперлась. Вычислять можно без нее. Она нужна, когда тебе хочется БЫСТРО, но тогда ты ручками значения таблицы прописываешь.
CRC и не нужно дебажить. Просто берешь и используешь. Один раз написал и пользуешься всю жизнь.
Потому что таски и потоки перпендикулярны
Ну а что делать, если вью не всегда адекватно производит анбиндинг? Особенно это заметно с итемами каких нибудь списков.
У тебя объект продолжает биндиться, даже если он удален из списка.
Дык это не про Dispose вьюмоделей.
Dispose вьюмоделей это про мессенджер и подписки на модель.
Проблема вызова Dispose приводит к weak мессенджеру с его "вьюмодели уже не нужно, а она сообщения принимает и реагирует", а с подписками к модели еще хуже
А биндинг обычно не проблема. У меня никогда это не было проблемой.
>Дык это не про Dispose вьюмоделей.
>Dispose вьюмоделей это про мессенджер и подписки на модель.
Нихуя не понял. Диспоз это метод который очищает говно, мешающее экземпляру помереть. Не важно подписки или что-то еще.
>А биндинг обычно не проблема.
У другого анона та же беда была. Может это из-за попыток забиндиться итемом ко родительскому датаконтексту.
Есть такая проблема, что итему списка недоступен дата контекст родительского контрола. Итему доступен дата контекст ItemSource. В этом случае приходится биндиться по имени к элементу выше по иерархии и брать из него тот самый дата контекст.
Может быть из-за этого. Но факт в том, что удаляя итем из списка, я все равно получал события изменения свойств от ID удаленного итема. Из-за этого была утечка памяти.
Я решил это тем, что в событии Unloaded итема, обнулял все забинденные свойства. Просто я оформил это в метод Dispose.
Еще был случай, когда DataContext чудил, особенно когда объект там постоянно менялся, тоже приходилось выдумывать костыли, но подробностей сейчас не вспомню. Надо уже какой-то блокнотик себе завести, я на выяснение проблем не один день тратил.
>Диспоз это метод который очищает говно
верно. но его кто-то должен вызывать. а с этим проблемы. Паттерн вызова очистки прост и понятен. Но вот кто все это вызывать будет? должна ли вьюмодель очищать все Disposable внутри себя? а вдруг не все можно?
в прошлых тредах обсуждали и выход из этого лайфтаймы, даже если сбоку (то есть не интеграция в фреймворк, а тупо сам решил использовать - берешь либу и вперед)
Если вьюмодель на что то подписывается или что то запускает, то она обязана получить ( через конструктор) токен своей жизни и использовать его для подписок и запусков.
А также для запусков того, что нельзя отменять. А код снаружи просто обязан озаботиться выдачей токена лайфтайма, а значит будет вынужден этот вопрос решить иначе просто не скомпилится. При таком подходе все не живет дольше нужного и все автоматически и правильно диспозится. Причем без лишнего.
>Но вот кто все это вызывать будет?
Ну анон мне ИТТ говорил, что диспоз вызывается даже если ты проебал его вызов, просто это делается не сразу и по велению GC. Каковы критерии оценки, что файл нужно удалить — в данном случае непонятно.
Но я все равно на это не полагаюсь, и в моем случае диспоз вызывался при событии Unloaded(), который тоже не всегда может быть вызван, но не в моем случае.
>выход из этого лайфтаймы,
До лайфтаймов я еще не дорос (я так каждый раз пишу на протяжении 10 тредов, кек).
GC ничего не знает про твой диспоз. И даже если знает, то придет он когда неизвестно.
>До лайфтаймов я еще не дорос
там ничего сложного. Это очень простая тема.
>До лайфтаймов я еще не дорос
делаешь App начальный лайфтайм, его выдаешь главной вьюмодели, а далее каскадно раздаешь либо свой лайфтайм либо рождаешь дочерние
Все дочерние вьюмодели по дефолту без лайфтайма, то есть привычные тебе. Но если вьюмодель на что то подписывается или запускает, то ей нужен лайфтайм - добавляешь его в конструктор и у тебя перестает компилироваться. Идешь уровнем выше и у тебя 2 варианта
1 в текущем месте никто не управляет временем жизни дочерней модели. Значит просто добавляешь лайфтайм в конструктор текущей и идешь выше
2 в текущем месте управляется время жизни? что значит управляется? ну значит в обычном виде ты бы тут вызвал Dispose, а значит тут рождается дочерний лайфтайм, который ты и должен будешь дропнуть вместо диспоз.
Разница в том что в случае диспоза ты даже не в курсе что он нужен, а тут ты сразу видишь что нужно передать лайфтайм в конструктор и потому сразу на месте решаешь откуда его взять. И если ты не имбецил, то сразу подумаешь и про рождение и про терминацию.
потом добавляешь родительский лайфтайм в конструктор и идешь выше пока не дойдешь "а тут лайфтайм уже есть идти выше некуда"
Технически можно вообще всем раздавать лайфтаймы, но есть же и простые вьюмодели которые чисто для отображения.
лайфтайм он же и токен отмены. Представь ты запустил авайтное чтото из вьюмодели,а вьюмодели пришел Dispose
тебе нужно добавлять этот момент в Dispose (а Dispose может и вообще не быть по ошибке)
А так терминация лайфтайма каскадно отменяет все подписки и все канселлит.
Если у тебя все подписки принимают лайфтайм, то физически нельзя забыть диспознуть ибо тебя комплиятор заставляет решить этот вопрос (ну если ты не дурачок конечно)
Добавил кнопку хелло ворд. Запустил и в релизе и в дебаге, всё работает.
Без вижуал студио сам экзешник не запускается, ни в дебаге, ни в релизе, в Просмотре событий пишет:
>Процесс был завершен из-за необработанного исключения.
>Имя сбойного приложения: TestApp1.exe, версия: 1.0.0.0, метка времени: 0x650600fc
>Имя сбойного модуля: KERNELBASE.dll, версия: 10.0.22621.2070, метка времени: 0xdf72c80b
Помогите.
Решил попробовать. Вообще захотел сделать модное молодежное приложение под виндовс 11.
А что тогда использовать? Снова виндовс формс? Они прям живы что ли? Разве они не устарели?
WPF, вероятно
UWP это же универсальность шиндовс + шиндовс мобайл. Зачем тебе такое? Хочешь универсальности — юзай сырой MAUI.
>Вообще захотел сделать модное молодежное приложение под виндовс 11.
Кстати, виндоу формс визуально адаптируется к новому стилю интерфейса одиннадцатой оси, в силу свой специфики. А вот в впф стили контролов независимые, и тут плюс превратился в минус, ибо надо обновлять все дефолтные стили, а майкрософт не делала этого еще с восьмерки.
С впф ты не получишь молодежный стиль, придется либо самому поебстись, либо скачать где-то еще. Но у тебя есть возможность сделать свой собственный стиль, в отличии от вин формсов.
Я прост попробовал UWP, мне оче понравилась дефолтная копка и такая подстава. Ща пробую WPF, всё работает, но кнопка не оч. Я имел ввиду, что не хочу древний дизай виндовс хп, который в виндовс формс. Хм, не вижу winui, её надо как-то отдельно докачивать выбирать. Я понимаю, что можно сделать что угодно из чего угодно, но я хочу писать свои стили, я хочу кидать какие-нибудь элементы и чтобы всё готово в современном стиле было с ползунками настроек туда сюда.
не хочу писать свои стили*
Из твоего пика следует, что выбирать winui для винды и maui для мака, а остальное устарело.
Смотрю на ютубе ролик, чел тоже не может найти этот винюи лол. Привязал ко времени.
https://youtu.be/bjR2dyEF7Y4?t=167
>>44792
Блять, хули winui по дефолту нет?
wpf*
>Блять, хули winui по дефолту нет?
ВПФ - надежно, гибко, из коробки (кажется). winui не смотрел — посмотри, расскажешь нам.
>Блять, хули winui по дефолту нет?
Чтобы всякая петшня не равлась от того, что студия весит 15Гб.
Все разбито на модули, даже библиотеки могут быть разбиты на десяток частей.
А ты сам подгружаешь то, что тебе нужно.
Блять, но оно как и UWP не работает, если запускать экзешник. А еще почему-то пока только WPF рабочий вариант... А еще почему-то не грузит дизайн, пишет что-то про докачку из нугета...
Я просто реально не понимаю. Работаю на шарпе с 2014 года. Ни одного НЕ ЛЕГАСИ проекта под десктоп не видел ИРЛ. А то что легаси - это WinForms/WPF.
Типа если студенты, вот зачем вам сразу в легаси метить?
Если самоделкины, почему не делать на чем-то нормальном типа Qt?
>WinUI 3.0 no XAML designer view
Понял, нахуй. Технологии будущего еще не скоро. Короче пойду ка я в виндовс формс, там всё работает из коробки по дефолту и как надо. Ясно всё...
>А еще почему-то не грузит дизайн, пишет что-то про докачку из нугет
Зависимостей много. Докачай.
В WPF это можно сделать так: В обозревателе решений в проекте -> Зависимости -> Пакеты -> Обновить
Мир начал вращаться вокруг веба из-за простоты (хоть и с другими дебаффами, но это уже конкретные случаи) и рано или поздно ты встанешь в жс своей ногой.
Плохо? Хорошо? Да хуй его знает, обычный инструмент который решает задачи
>вокруг веба из-за простоты
А помните был такой флеш? Люди там на изичах писали игры, видосики, программки. Очень мало весило. Очень высокое качество. И где теперь флеш?
Сдох из-за того что был анально огорожен и был полон дыр которые решили не чинить
>Мир начал вращаться вокруг веба из-за простоты
Ты чет начал пердеть про студентоту и самоделкиных, а сам нарушил базовый принцип вменяемости: задача -> инструмент под задачу.
Мне поебать на весь мир, если моя задача написать плагин для приложения с максимально схожим UI. Я не хочу ебстись с браузерной залупой, когда меня куча операций с файлами или требующие определенные права, которыми браузер не обладает даже во сне.
Веб-пораша не универсальна. Я не вкатун, я самодельщик — мне нужно добиться своих целей минимально возможными путями, потому что помимо этого всего у меня есть еще задачи.
>>44805
>WinUI 3.0 no XAML designer view
Я думал что это я ебусь в глаза. Что, реально? Тогда сидим на ВПФ и не дергаемся.
Ты кина пересмотрел. Как вступишь туда, так увязнешь, еще и кайфовать начнешь, пока тебя будут поглощать эти зыбучие пески.
у меня сейчас:
List<int[]> copy = original.Select(x => x.ToArray()).ToList();
подводные камни?
Хз, я бы не парился и просто бы создал новый пустой лист и заполнил бы его по циклу этими интами.
>ожидаю
Лист - это объект со ссылками на инты. Инты же, пусть и массивы, простые объекты, а не ссылки. Логично, что в новом листе тебе просто нужна ссылка не на тот же инт, а на его копию и всё. Копия инта делается просто. Инт - неизменяемая вещь. Меняя его ты создаешь новый объект, а не меняешь старый. Надеюсь не ошибся и не несу хуйню.
List<int[]> copy = new List<int[]>();
for (int i = 0; i < original.Count; i++)
{
int[] arr = original;
copy.Add(arr);
}
>длина
И не понял какая разница какая там длина. В конце концов ты можешь использовать листы с разными типами данных просто с объектами, а не с конкретным одним определенной длины.
> WPF, вероятно
Так и Wpf мертво, только при это почти во всем уступает uwp, так что смысла его использовать мало.
Если ты не видел, это не значит, что их нет. Мы вот пилим различные приложения на xaml фреймворках для windows store. Но занятие довольно бесперспективное, и я хочу перекатиться в asp net.
>>44813
> Мир начал вращаться вокруг веба из-за простоты (хоть и с другими дебаффами, но это уже конкретные случаи) и рано или поздно ты встанешь в жс своей ногой.
Жиза к слову. По веб фреймворкам в миллион раз больше документации, ответов на любые вопросы и тд. Сделать на каком-нибудь реакте красивый интерфейс во много раз проще, чем на xaml, с его кучей костылей и нюансов.
>>44804
> Если самоделкины, почему не делать на чем-то нормальном типа Qt?
Ну толсто же. Гуи на шарпе писать куда приятнее, чем на qt срани, не говоря уже о том, что xaml выбирают те, кто знает шарп, зачем им ради гуи учить плюсы?
1. Uwp в разы быстрее wpf, в нем отсутствуют микролаги, которые в wpf являются неотъемлемой частью любой анимации.
2. Есть поддержка directx 11 и direct2d, можно спокойно хостить в окнах результат рендеринга. Wpf же застрял на directx 9, и чтобы работать с видеокартой напрямую придется использовать windowsformhost. А там нас ждет airspace problem.
3. Есть дополнительный визуальный слой, на котором можно рендерить графику в отдельном, не UI потоке, что дает дополнительный буст к производительности.
4. Uwp приложения из коробки выглядят нативно. В wpf тоже есть либы с контролами в стиле win 11, но это сторонние либы, с кучей багов.
5. Более совершенный xaml, есть x:bind компилированные биндинги лютая годнота, конвертация bool в visibility из коробки. хотя нет триггеров, что весьма печально
Минусов конечно тоже дохуя, кто спорит. авалония наше всё, хотя нативных стилей нет
>Более совершенный xaml
не знаю в чем он совершенный. UWP xaml это продолжение Silverlight xaml (который по своей природе был "кастрированный WPF")
Да и ты следующим же предложением подтверждаешь его кастрированность.
UWP это доп ограничения. Прибито к MS Store (а без него это бубен)
Да он настолько лучше... что скорее мертв, чем еще жив.
Но мне норм. Пока мс занимается херней, я пишу на WPF и норм. Анимации мне не нужны, в остальном палки в колеса не ставит как другие.
Пересел бы на авалонию, но там еще менее нативно выглядит и шрифты шрифты жеж
От предметной области/компании зависит. В инженерии WPF десктоп живее всех живых, новых проектов хватает.
Ты бы ещё через javac собрать проект попытался и начал ныть, что тебе все само не положилось, имбецил.
Выше чел же говорил, что джава все сама...
Ну ок. Как мне проект 2006 года на анте перетащить на этот твой мавен?
Типа во просто в шарпе, допустим, я открываю древний проект, мне студия: О, это старый проект, давай я попробую его обновить до актуалочки. И в 70% случаев дальше ничего и делать не нужно. А тут - я чет начал пытаться разбираться, и нихуя не понял. То каких-то либ нет, то какие-то методы-классы-модули отсутствуют в современной джаве. Половина кода - красная. Нихрена не работает. Че делать - я не понимаю.
>70% случаев
Ну вот и завали ебало.
Алсо, если ты не можешь прямо щас это собрать, значит проблема в проекте, а не в самом по себе факте легаси. Нормальные проекты на анте до сих пор собираются и будут собираться до конца времён.
Ну должен быть.
Я же про то что это ант вообще знаю потому что идеей открыл проект, она сказала, о, это ант, давай скачаем все для запуска. Я сказал - качай.
Хотя коллеги говорили, что вроде все это дело писали в нетбинсе. Но я и нетбинсом пробовал открыть. Он ниче качать не предлагал, но тоже не собирал и не запускал.
Идея анально вгрызается в работу систем сборок и делает так, чтобы без нее собрать было нельзя больше. Возможно это анальное вгрызание работает и в обратную сторону. Установи ант ручками и попробуй из консоли собрать.
> Lifetimes
Тема очень интересная, давно хотел пощупать, но руки не доходили никак.
Есть примеры кода? Или может можешь показать что-то из своего?
мимо
Давай. Мне хватит обычного http
Два чая. Вроде как понимаю, но ничего не понимаю.
Нужен простенький демо-проект, но я боюсь набраться наглости попросить.
Может косые черты не в ту сторону?
В голове возникло два способа:
1. Проверять на уровне свойства. Сделать свойство типа int, а дальше проверять в сеттере. Если value выходит за перделы диапазона от 0 до 255, то не присваивать значение.
2. Через конвертер значений.
Еще в других программах заметил, что помимо "красной рамки" текстбокса выскакивает месседжбокс с объяснением допустимого диапазона или формата ввода данных. Так вот, если это делать первым способом, то чет как-то опасненько получается. Особенно если это будет какой нибудь список на сотню итемов, условно говря, то я потенциально получу сотню месседжбоксов.
Склоняюсь ко второму способу, но может есть более элегантный, о котором я не знаю?
Не могу, ты что?
Вот тебе банальная ситуация. Допустим я меняю канал RGB-цвета, который в диапазоне от 0 до 255. Так или иначе мне это придется сделать огарничение. Вопрос в том, где это лучше сделать.
Проверять это в джаве.
В бейсике можно, как если бы это был if.
>>46247
развлекайтесь.
там есть ридми и демка на костылях
но в общем то даст базу от чего отталкиваться в создании своих костылей.
https://dropmefiles.com/wOvUf
К примеру я хочу проверить цвет aRGB\RGB в формате hex. И в зависимости от условий он может быть разным.
Вот четыре варианта:
- без альфаканала и без решетки: FFFFFF (пример пикрил1: фотошоп)
- без альфаканала и с решеткой: #FFFFFF (пример пикрил2: корел дро)
- с альфаканалом и решеткой: #FFFFFFFF (пример пикрил1: вижуал студия)
- с альфаканалом и без решетки: FFFFFFFF (примера нет, но логика понятна)
FF это любое hex значение от 00 до FF
В целом, из критериев валидности интересует наличие или отсутствие решетки в начале, и совпадение по количеству символов. Я могу это проверить сам if-ами и проверкой длины, но может быть есть варианты проверки реджексом или string.format, или еще чем-то?
Нашел реджекс
>^#[0-9a-fA-F]{6}
Как бы эту подсказку теперь высветить? В xaml не отображается xam-докуменатция к методам.
>В xaml не отображается xam-докуменатция к методам.
Если что, я ValueConverter делаю. И паттерн првоерки хочу пихать через ConverterParameter.
Вот я сделал приложение на asp net core mvc
И вот я хочу сменить дизайн сайта. Мне ведь нужно будет в исходникака менять код представлений.
А вот что бы сделать сайт с возможностью сменой дизайна это мне не надо использовать представления, а например html хранить в бд, делать запрос в бд, генерить страницу и потом в контролере ее возвращать?
> html хранить в бд
это слишком пиздец чтобы такое делать, я не фронтендер но лично бы я просто получил какое то значение bool из модельки во view и потом на стороне странички через if или switch отразил нужный мне дизайн но я не знаю этот способ наверно тоже пиздец но хранить html в бд не лучше
Но при таком подходе добавление нового дизайна будет возможно только в исходниках.
А нужно типо как в вордпресе, залил дизайн и сменил его.
тогда просто создавай разные view под каждый дизайн и потом через контроллер возвращай нужную
Да бля ну я же не могу знать какой дизайн у меня будет.
Вот на сей момент я имею генератор сайтов на 1 дизайне.
Вторую версию планирую сделать что бы можно было на лету добавлять новые дизайны, и вот думаю как это сделать.
Весь смысл задачи в том что бы не компилировать проект каждый раз когда нужно добавить новый дизайн а выставлять его в админке.
Например добавляю сайт site.com, заливаю для него дизайн и выбираю и он сразу подгружается.
Сейчас все добавленные сайты на одном дизайне работают.
тогда да только через бд
В WPF я вынес все ресурсы в файл. Правда максимум что я могу — это поменять в рантайме стиль контролов или цветовую схему. Но вот сама разметка с расположением контролов всегда будет одной.
там еще есть тонкий момент в подписке (торопился, дышали в спину)
vm.Closed.Subscribe(_lifetime, OnTabClose);
Так то vm умрет и плевать на кого она ссылается, но с другой стороны она может навешать Action на лайфтайм (или добавил просто IDisposable) и все оно на нем повиснет до терминации (а у рутовой вюмодели это никогда и не будет)
Так что было бы правильнее
vm.Closed.Subscribe(lifetimeDef.Lifetime, OnTabClose);
с терминацией lifetimeDef при закрытии таба умрет и эта подписка
Такая же проблема (можно навесить Action, а это жесткая связь и мемори лик) есть и с CancellationToken и на этой бомбе подрывались (статья на хабре была) - решается также доп слоем с CancellationTokenSource
Так что, анон, передавая свой лайфтайм не забывай про эту тонкость "а что если кто навесит Action"
> В xaml не отображается xam-докуменатция к методам.
Но может отображаться в окне свойств.
[Bindable(true), Category("Новая Категория"), Description("Текст с описанием свойства", DisplayName("Отображаемое имя"))]
>сколько времени нужно чтоб с нуля до джуна добраться?
>куда лучше подаваться чтобы быстрее
>начать зарабатывать
Я смотрю ты шаращий. Сначала купи 5 курсов от скиллбокса, 2 курса от гибрейнса, 1 курс от яндекс практикума. Выбор на свое усмотрение. Там на все вышеуказанные тобой вопросы ответят, а как только тебя заебет эта миллиард раз обсасываемая тема — возвращайся.
кто вообще пользуется редактором свойств при написании хамла
только психи. Предпросмотр понятно, но задавать параметры через редактор свойств неудобно.
а э, понятное дело что обучение займет год и больше при интенсивном темпе, вопрос лишь в том с чего начинать и куда стремиться.
Спасибо, на выходных гляну.
Ты с призмой не работал? К ней не пытался всё это прикрутить с её регионами и новой системой диалоговых окон?
Что думаешь за современные MVVM фреймворки?
В редких случаях я получаю "SourceLink"
В основном в случаях, когда обращаешься к неизвестному контролу и ты не знаешь какие свойства доступны и какие типы даннх они принимают.
+ менять цвет там легче, чем пытаться вписать hex-параметр.
В остальных случаях я тоже использую xaml напрямую.
Вопрос по диалоговым окнам.
Вот тут возникла ситуация. Я делаю условный колорпикер, ну и подглядываю как это сделано в других редакторах, в том числе в фотошопе. А там, если ты в текстбокс ввел данные в неверном формате, то выскакивает месседжбокс с пояснением в каком диапазоне число является валидным.
У меня мессджбокс запускается в ValueConverter, чтобы не мусорить модель и вьюмодель. Но тут возникла проблема, что мой мессджбокс не запускается в модальном режиме или хотя бы TopMost. А чтобы это сделать, я должен передать мессджбоксу окно-owner, но это же сделать невозможно. Где ж я его достану и как передам?
Как вообще передается этот owner, особенно в случаях, когда нет прямого контакта между вьюшками? Одна вьюшка может быть в одном проекте, а другая в другом.
Начинай с того, к чему лежит больше всего душа. Интерес — двигатель в обучении.
Надо начинать с фана, а потом задумываться о прибыли.
Что происходит, когда я в текстбоксе, привязанном к свойству DoubleValue ввожу значение? В сеттер поступает это значение, КОТОРОЕ вызывает метод OnPropertyChanged() -> что вызывает событие изменения свойства -> которое провоцирует биндинг(ну или что там?) обратиться к геттеру и получить значение.
Собсно нахуя, если я только что ввел значение и оно УЖЕ есть в текстбоксе? Градус абсурда повышается, если я добавлю конвертер и вот тогда возникает сущий пиздец, потому что я трачу ресурсы ДВАЖДЫ на конвертацию:
1. Сначала string парсится в double
2. Затем double конвертируется в стринг
Чтобы в итоге получить то, что было введено. Пиздец.
И не надо мне говорить, что для double конвертер не нужен. Под капотом происходит та же хтонь. Речь в принципе про ситуацию в целом. Возьмите Color, где нужен конвертер и где конвертация между типами уже посложнее.
Не работал. Смотрел, но не работал. Слишком все замудрили там. Может для каких то особых приложений это нужно. Я смотрел на разные фреймворки начиная от MVVMFoundation, всякие там MVVMCross, лайты, калибурн, призм и другие.
Везде свои плюсы и минусы, а хотелось бы только плюсы (перфекционизм же). При этом недостатки MVVM же еще -окна, мессенджер, weak, жирность вьюмоделей. Может кто-то пишет однооконки с анимациями, а мне нужно много окон, да еще и если в каждом свой мессаджбокс, не блокирующий все, так это хорошо. Ну еще и чтобы совместим был с авалонией
Потому я в свободное время писал для фана и успокоения мук перфекциониста разные самостоятельные фреймворки где собирал все отовсюду и пробовал разные альтернативные подходы И писал с этим прототипы для дела и для пробы "а если так" оценивая выгоду и плату за этот хак. Разные идеи типа
- мультиокна, где у каждого окна свой стек и вообще нет проблемы как у >>48475 (У меня специфические требования - мультиокна. Основное требование.)
Как итог - вьюмодель существует в каком то контексте, которое связывает ее с окном (не прямо конечно, все таки я сторонник MVVM и у меня вьюмодели ничего ни про вид, ни про диалоги, они работают с абстракциями)
- восстановление в нужное окно которое и так запущено, мы запускаем новую копию приложения, мьютексы то понятно, но нам нужно прыгнуть в нужное немодальное базовое окно
- А пусть не каждая вьюмодель держит свой стейт, а будет централизованный стейт (но все же не модель). У нас все равно контекст, можем себе позволить зашарить такое в графе вьюмоделей без последствий. А то не пойми какая вьюмодель работает с моделью, потом шлет сообщения не пойми куда. Что если у вьюмоделей будет общая структура, на которую они и будут подписаны и там и будет стейт. (самая спорная вещь)
- а что если все методы дергающие модель туда переедут (решение проблемы год обжект) и пусть вьюмодели и занимаются только своим прямом делом - держанием стейта для вида.
- проблема Dispose, проблема weak и вот там вошли лайфтаймы.
...
и тема лайфтаймов мне очень зашла. Даже не в рамках MVVM проектов, а вообще где есть проблема Dispose. Но началась она с MVVM где я заменил все и просто нельзя не передать лайфтайм, а значит нельзя забыть. И никаких вам weak
Это тестовый фреймворк для обкатки идей, написания прототипов и петов. И лайфтаймы себя там хорошо зарекомендовали.
Ну да, впихнуть в старый код сложновато. Проще переписать, что я потихоньку и делаю.
>Что думаешь за современные MVVM фреймворки?
Ну я видел что майки что то там родили с кодогенерацией. Решил попробовать
взял коммюнити тулкит от майков.
В общем то лайфтаймы сбоку там вполне зашли, но вот гадская кодогенерация (ctrl+click на свойство из хамл ведет в пустой сгенеренный файл, а не во вьюмодель) и конечно же диалоги
как у >>48475
я взял MVVM.Dialogs, но там нет контроля "забыл или не забыл ты зарегать в нужном месте", и потом у нас в async void вместо мессаджбокса с сообщением происходит ошибка, которая ломает все нахер, и делает это в редких ситуациях потом потом уже в продакшене - ну или я не умею его готовить. А окна мне нужны, а там опять вручную все это кодить.
так что Fody наше все, а без кодогена этот тулкит - кастрированный мввмлайт. ну и зачем?
Не работал. Смотрел, но не работал. Слишком все замудрили там. Может для каких то особых приложений это нужно. Я смотрел на разные фреймворки начиная от MVVMFoundation, всякие там MVVMCross, лайты, калибурн, призм и другие.
Везде свои плюсы и минусы, а хотелось бы только плюсы (перфекционизм же). При этом недостатки MVVM же еще -окна, мессенджер, weak, жирность вьюмоделей. Может кто-то пишет однооконки с анимациями, а мне нужно много окон, да еще и если в каждом свой мессаджбокс, не блокирующий все, так это хорошо. Ну еще и чтобы совместим был с авалонией
Потому я в свободное время писал для фана и успокоения мук перфекциониста разные самостоятельные фреймворки где собирал все отовсюду и пробовал разные альтернативные подходы И писал с этим прототипы для дела и для пробы "а если так" оценивая выгоду и плату за этот хак. Разные идеи типа
- мультиокна, где у каждого окна свой стек и вообще нет проблемы как у >>48475 (У меня специфические требования - мультиокна. Основное требование.)
Как итог - вьюмодель существует в каком то контексте, которое связывает ее с окном (не прямо конечно, все таки я сторонник MVVM и у меня вьюмодели ничего ни про вид, ни про диалоги, они работают с абстракциями)
- восстановление в нужное окно которое и так запущено, мы запускаем новую копию приложения, мьютексы то понятно, но нам нужно прыгнуть в нужное немодальное базовое окно
- А пусть не каждая вьюмодель держит свой стейт, а будет централизованный стейт (но все же не модель). У нас все равно контекст, можем себе позволить зашарить такое в графе вьюмоделей без последствий. А то не пойми какая вьюмодель работает с моделью, потом шлет сообщения не пойми куда. Что если у вьюмоделей будет общая структура, на которую они и будут подписаны и там и будет стейт. (самая спорная вещь)
- а что если все методы дергающие модель туда переедут (решение проблемы год обжект) и пусть вьюмодели и занимаются только своим прямом делом - держанием стейта для вида.
- проблема Dispose, проблема weak и вот там вошли лайфтаймы.
...
и тема лайфтаймов мне очень зашла. Даже не в рамках MVVM проектов, а вообще где есть проблема Dispose. Но началась она с MVVM где я заменил все и просто нельзя не передать лайфтайм, а значит нельзя забыть. И никаких вам weak
Это тестовый фреймворк для обкатки идей, написания прототипов и петов. И лайфтаймы себя там хорошо зарекомендовали.
Ну да, впихнуть в старый код сложновато. Проще переписать, что я потихоньку и делаю.
>Что думаешь за современные MVVM фреймворки?
Ну я видел что майки что то там родили с кодогенерацией. Решил попробовать
взял коммюнити тулкит от майков.
В общем то лайфтаймы сбоку там вполне зашли, но вот гадская кодогенерация (ctrl+click на свойство из хамл ведет в пустой сгенеренный файл, а не во вьюмодель) и конечно же диалоги
как у >>48475
я взял MVVM.Dialogs, но там нет контроля "забыл или не забыл ты зарегать в нужном месте", и потом у нас в async void вместо мессаджбокса с сообщением происходит ошибка, которая ломает все нахер, и делает это в редких ситуациях потом потом уже в продакшене - ну или я не умею его готовить. А окна мне нужны, а там опять вручную все это кодить.
так что Fody наше все, а без кодогена этот тулкит - кастрированный мввмлайт. ну и зачем?
Самое просто решение "без ничего" твоем случае создай во вьюмодели свойство Func<> и пусть вьюха ближайшая в лоадед или датаконтексчанжед заполнит это свойство (не забудь про очистку этого свойства если вьюха нестабильна
А далее вьюмодель дергает этот метод
А уже в нем вид и выводит окно и имеет оунера.
До окна можно добраться через GetWindow(this)
Суть в том, что я не могу каким либо образом передать в ValueConverter ссылку на окно, либо на вьюмодель датаконтекста.
Конвертер определяется в ресурсах (пикрил 1)
Никакая привязка к энцестору оттуда не работает. Дата контекст недоступен.
Даже если мой конвертер наследует FrameworkElement (пикрил 2), никакой биндинг ни по имени, ни по типу не дает положительных результатов.
Ошибка:
System.Windows.Data Error: 4 :
Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Window', AncestorLevel='1''.
BindingExpression:(no path);
DataItem=null;
target element is 'ByteOverflowProtector' (Name='');
target property is 'Owner' (type 'Window')
не хочу расчехлять студию поэтому если не ошибаюсь
пикрил 1 у тебя
DataContext как раз доступен, но именно DataContext
замени на ElementName=
ну потом доберись до окна
но начинать нужно с того что мессаджбоксы в конвертере вообще дичь
Не работает. Я проверял.
Parent и DataContext пусты. Ошибка привязки выскакивает.
При этом вот тут https://stackoverflow.com/questions/16399010/proper-way-to-assign-and-work-with-wpf-datacontext-in-resources
чел делает ровно тоже самое, что и я (пикрил). Такое ощущение, что дело в том, что это конвертер и он как-то иначе запускается.
>но начинать нужно с того что мессаджбоксы в конвертере вообще дичь
А где еще? Я не хочу это добавлять в модель, потому что месседжбокс должен возникать только на ввод данных от пользователя и нигде больше. Именно конвертер отслеживает валидность данных и способен "подсвечивать красным" окно ввода, он не ограничсивает данные во вьюмодель.
Нет никакой прослойки между конвертером и вьюмоделью, которая бы взяла на себя эту работу.
нет интереса ни к чему, просто работаю и живу, но мозг устал от рутины требует нагрузки да и работа получше нужна, решил совместить приятное с полезным
не знаю что там у тебя.
вот https://pastebin.com/v4xNs4gM
но сам путь твой неправильный.
вьюмодель это держатель стейта. Вид обновляет стейт и если стейт нарушен то вьюмодель может просигнализировать об этом. Всякие там IError* или же просто тупо кинуть событие, которое вид отловит и покажет мессаджбокс
Дело конвертера лишь конверт данных.
Вот объясни мне.
1. Вот есть ситуация когда какой нибудь метод дергает свойство модели сотни раз.
2. И есть ситуация, когда юзер при помощи текстбокса и биндинга дергает то же свойство.
Как это свойство не спутает второе с первым? Что будет, если я недостаточно хорошо отловлю баги, и ошибка неверных данных пойдет не в лог, а в ебало пользователю парадом месседжбкосов, которые он будет разгребать до второго пришествия Христа?
>или же просто тупо кинуть событие, которое вид отловит и покажет мессаджбокс
Событие чего? Что в сеттер пришло неверное значение? А откуда оно пришло?
>Как это свойство не спутает второе с первым?
оно и не путает. это одно и то же. кто то изменил свойство и вызвал INPC
>Событие чего?
что текущее состояние стейта (то есть то что в себе щас держит вьюмодель) является невалидным и нужно окном по морде пользователю дать с сообщением что не так. Каждое изменение чего либо должно вызывать валидатор, который отвалидирует и если че не так - событие, мессаджбокс
>А откуда оно пришло?
На самом деле это не имеет значение, ведь неверное свойство установленное из кода попадет на GUI через INPC.
конечно ты можешь менять бэкингфилд и вызывать INPC как тебе удобно, но лучше все таки держать стейт целостным.
Ну вот как ты пишешь ICollectionView из кода. Там же нужно рефреш делать. А для этого нужно подписаться на вьюмодель чтобы она сообщила когда рефреш делать.И вот она на каждое ее изменение сообщает "нужно делать рефреш". Все просто и сердито. Главное не забыть отписаться от события.
кстати да, фризабле
и лично я не знаю когда в
CreateInstanceCore возвращать новый инстанс, а когда this
так что сам загугли этот момент
>На самом деле это не имеет значение
Имеет значение. Я пытаюсь акцентировать на этом внимание. Допустим у меня свойство Byte в него пришло число 300, и допустим нам не важно откуда — все равно выскочит месседжбокс.
Расмотрим первую ситуацию. Вот если число вводит челвоек, то его скорость ввода настолько мала, что при вводе неправильного значения — тут же выскочит месседжбокс. Пользователь может его прочесть, поразмыслить и попробовать снова.
А вот ситуация номер два. Представим, что пользователь взял "пипетку" и ведет по цветовому градиенту, из-за чего за секунду идет обновление свойства десятки раз. И все это еще и в асинхронном режиме.
Вопрос касается безопасности, и если вдруг где-то случится баг расчетов и такой метод начнет спамить числом 300 сотни раз в свойство Byte, то в таком случае выскочит куча месседжбоксов подряд, которые я никак не смогу контролировать.
Начнется цирк с конями в виде ограничений по таймеру или еще какой хрени.
При этом ошибка неверного ввода со стороны кода — это ошибка, которая должна писаться в лог. А ошибка ввода пользователем не должна писаться в лог, а выводиться сообщением. Тут два принципиально разных действия в зависимости ОТКУДА пришли неверные данные.
Кроме того, этот груз мессджбокса будет вечно таскаться со вью моделью даже в те проекты, где эта возможность уже не нужна. Даже если я установлю какой нибудь регулирующий флаг - это просто мусор.
А вот конвертер эта та прослойка, которую можно всегда заменить. Где-то достаточно подсветки рамки, где-то нужен месседжбокс — все эти изменения никак не повлияют на внутринюю экосистему вьюмодели. Да, может слово "Конвертер" звучит не так, как применяется, но с точки зрения функционала я его воспринимаю как фильтр-прослойку между вью и вьюмоделью.
Я пока не увидел достаточных аргументов в пользу другого подхода.
>нет интереса ни к чему
>решил совместить приятное с полезным
Стало быть приятное это работа, а полезное это кодинг? Придумай себе пет-проект.
Чужой опыт не даст тебе ничего.
жуть какая то
ты не только мазохист, а и садист еще
какие еще мессаджбоксы.
если чел вводит значение, то при неверном оно должно обвестить красным или фон красным или значение красным, а поверх поля маленький попап похожий на тултип который подскажет что не так.
А второй ситуации "данные от пипетки говно" вообще быть не должно. Вилидируй их при чтении данных с пипетки и если че не так то уж ладно мессаджбокс "я бедный разрабо, мне скучно и я сделал ошибку напиши мне" и на выход.
>какие еще мессаджбоксы.
В фотошопе так сделано (видеорил).
>а поверх поля маленький попап похожий на тултип который подскажет что не так.
Попап, гениальная мысль! Возможно я даже смогу его запихнуть прям в стиль текстбокса. Остается вопрос как туда передать внятное сообщение, но возможно я просто ретранслирую тултип.
Загугли валидацию
Примеры с обводкой или фон и валидация на уровне вьюмодели
Там через триггеры как помню
И тот же триггер может сделать попап видимым пока ошибка активна
Да смотрю. Оказывается есть ValidationRules, а я все это время проверял валидацию через конвертеры.
ну там много чего есть разного. Наплодили уж. И народ даже либы поделал на эту тему. А я у себя бэкендом FluentValidation юзаю
а так для старта зырь сюда
https://metanit.com/sharp/wpf/14.php
Хм.
Прикрутить дебагер так и не смог к виму.
НО. Внезапно обнаружил, что дебажить можно с помощью тестов.
Теперь в общем так вот дебажу.
Лол. Кек.
Спасибо, разобрался. Я уже себе либу запилил под эти правила.
Чертовы триггеры. Попапы висят пока текст не будет валидным.
А еще можно делать не INotifyDataErrorInfo, а через наследование ValidationRule — тогда можно эти валидаторы переиспользовать независимо от конкретной вьюмодели.
Немного не так компактно, как конвертеры, из-за того что ValidationRules принимает коллекцию. Но с другой стороны этих валидаторов можно напичкать сколько угодно.
Щас надо подумать, как бы показывать попап временно.
Ну для начала загугли реализацию nontopmostpopup нормальную (их не одна)
А потом загугли
wpf popup move with window
Ну и никто не запрещает создать юзерконтрол где что угодно можно соорудить и всё это скомбинировать
Ок, спасибо. Щас посмотрю.
Лучше в джаву. Шарп это легаси.
в итоге у меня теперь The call is ambiguous between the following methods or properties
и я не могу их вытащить, мне нужны обе либы и экстеншонов этих просто дохуя и в одной из них они устарели.
как заставить студию игнорировать одну из либ в этих конкретных методах?
Да. В 23 году компилятор уж мог бы нормально использовать libastral.dll
Короче, я щас взглянул и везде нужно наследовать либо папап, либо адорнер, что подразумевает новый класс.
Это накладывает ограничения на мои внешние стили. Потому что надо таскать с собой дополнительные какие-то контролы и прочее. Пока остановился на пикрилейтед. Будет появляться предупреждающий значок, у которого свой собственный тултип с текстом ошибки.
Это, конечно тоже не дает размаха в разнообразии стилей. Надо что-то придумать. У меня стили находятся в отдельных xaml файлах и если они будут использовать какой-то кастомный класс, то его тоже надо как-то хранить в отдельной библиотеке, что ли.
>А еще ты находишься в адорнер слое то есть попап не нужно
Не совсем понял о чем ты. Почему я в нем нахожусь?
>Не совсем понял о чем ты. Почему я в нем нахожусь?
адорнер слой располагается поверх элементов. Собственно как и попап.
Находишься ты в нем ибо Validation.ErrorTemplate располагает этот шаблон в адорнер слое. То есть там можно убрать попап и выводить нужно и оно будет и поверх и таскаться с окном будет
Другое дело что попап разместить просто, а вот разобраться с компоновкой адорнер слоя вызывает реакцию "штаааааа"
был Contract - похерили. Сделали тупо, ниасилили порт и сказали нинужно
Да так нинужно, что сделали
Microsoft.VisualStudio.Validation для студии
и
вот в communitytoolkit тоже свой Guard api
психи какие то.
608x488, 0:11
Ради спортивного интереса таки сделал. По сути в стилях оформляется эррор-темплейт обычными средствами
<Setter Property="Validation.ErrorTemplate"> ... </Setter>
ничего мудреного там нет.
Но уже вижу, что такая подсказка будет блокировать вышерасположенный контрол. Так что вернусь к идее пикрила >>49998 , мне кажется это самый оптимальный вариант.
ну и пусть блокирует. нечего вводить абы что.
Можно и автоисправить на граничное значение мигнув ошибкой ненадолго.
https://overclockers.ru/blog/Fantoci/show/108939/unity-nachnet-vzimat-platu-s-razrabotchikov-za-kazhduju-ustanovku-igry
Не верь слухам, все там нормально.
Это наилучший сейчас способ вкатиться в шапр не проебав кучу времени зря. Очень много вакансий, а курсов еще больше.
))))))))
смотрите, упоротый жавист.
жависту то после финта оракла помалкивать в 2 дырочки
а если серьезно - то путать язык и конкретный коммерческий продукт...
Ты не поверишь, но буквы бесплатные, а вот книги почему то платные. Да что ж такое то.
ВНИМАНИЕ! ДЖАВА ОТДЕЛИЛА КОММЕРЧЕСКИЙ ORACLE JDK ОТ OPEN JDK => ПЕТУШАРП ОПРАВДАН. ДЖАВИСТЫ ОПЯТЬ СОСНУЛЕ!
696x488, 0:05
>ну и пусть блокирует. нечего вводить абы что.
Да не. Сам иногда копирую валидное значение из соседнего контрола.
>Можно и автоисправить на граничное значение мигнув ошибкой ненадолго.
Типа через анимации? Надо еще посмотреть, они не со всеми свойствами работают. Не, идея хорошая, только ей надо найти применение, например для всяких длинных строк, где предупреждающего значка приходится тянуться.
Но ведь петушарп это швабодка... Что-то не сходится.
сказал жавадебич написав это в проприетарном браузере, который написан на опенсорсном с++
дебич, что с него взять.
В очередной раз убеждаюсь что у петушарпомакак всё на самом деле очень, очень плохо с логикой. Причём нахуй тут мой браузер? Причём нахуй язык, на котором он написан?
поясню сразу после того как ты пояснишь причем тут на каком языке написан коммерческий продукт Unity
При том, что без хуюнити петушарп ещё менее нужен, чем нужен был. Раньше хотя бы можно было вилять жопой, что геймдев только на петушарпе, а щас жопой вилять можно только на хуе хитрых жидов из юнити по 20 центов за виляние.
то есть ты хочешь сказать что шарп обеспечил БЕШЕНУЮ популярность юнити, что теперь вот такая катастрофа? а да шарп, ай да молодец.
ну если поднялся такой шум из за юнити
значит юнити популярен
а юнити на шарпе
вот так вот.
то есть шарп сделал юнити популярным, а непопулярным юнити делает жадность, а не шарп.
правду что пора тебе перекатывать тред
мы тут для чего тебя держим?
ты местный клоун дурачок и перекатыватель треда.
Нет, правда в том, что шарпоскот опять выебали, а в треде неизменно стоит извечна перемога.
На прикриплейде буквально весь мой код. И если я хреначу 10к подключений - потоки плодятся как не в себя, а мне - не надо.
И что я хочу в плане асинхронности.
А хочу чтобы у меня было примерно так:
Когда я пишу await - вся моя фигня не непонятную магию творит, а просто условно говорит рантайму - вот есть переменные, схорони их куда-то и передай другому управление, когда я тут пока потуплю. Рантайм говорит: "Понял, принял", сохраняет переменные, оборачивает этот вызов в какой-то Promise устанавливает ему статус Pending, и потом перебирает другие такие вот "промисы", пока какой-то не скажет - все, я потупил достаточно, го дальше, ну или не пукнет, что у него что-то там сломалось, тогда рантайм берет и разворачивает тот промис что готов для обработки и начинает с ним чет делать.
Вот этого я хочу. Почему? Потому что такое поведение - не содержит для меня магии. Но вот как добиться такого в шарпе - я ХЗ.
Желаемое тобой поведение и является дефолтным в шарпе (и других языках где есть await)
Чтобы рождались сотни потоков - еще нужно постараться
А а чем проблема
Пишут игры или не пишут - никак не влияет на обычных шарпистов
Это совсем другой мир
100к+ подключенных устройств - потоки плодятся как не в себя.
Ну и про дефолтность поведения. Я под капот особо не лез, но судя по дебагеру и проффилировщику. Пока нагрузка невысокая - да, используется условно 4 потока из тредпула и все ок. Но вот резкий скачок(допустим разом подключилось 50к устройств разом) - все, началась содомия. Память куда-то в небо улетела, потоки начали плодиться, процессор все ядра на 100%, гроб-кладбище, буковки по экрану бегают, логгер сходим с ума. Короче да.
Я вот изучил основы шарпа, зачем-то написал программку на wpf(получилось намного больше и сложнее чем я изначально предполагал). И мне самостоятельно изучать как-то сложно, много возникает вопросов, да и оценку сделанного тоже неплохо было бы получать. Вот поэтому подумал, мб на курс какой записаться.
Не путай коннекты с потоками
100к коннектов само собой занимают память. Одних буферов вон сколько.
Но перемалываться все это будет в пулеь где пул занят - все ждут.
Также следует отличать потоки из пула и i/o потоки из того же пула.
Ну и таски от потоков отличать. Триллион тасков можно и в 1 потоке иметь
Я вижу, что System.Math это public partial класс (пикрил 1)
Так почему же если я создаю в том же неймспейсе public partial calss Math, то мне пишет:
Ошибка CS0101 Пространство имен "System" уже содержит определение для "Math".
В целом ITVDN были норм по шарпу.
Но я, как любой уважающий себя человек - воровал их. Сейчас бы купил думаю, хоть они и заменятся чтением книжек.
Кто хочет - ищет как научиться
Кто не хочет - кто бы научил
Первая категория всегда довольна ибо поиск знаний
А вторая... Для них курсы и существуют. Толку для них ноль, но у них "курс плохой"
Хотя и для первых "курс плохой" ибо либо и так знаешь, а другое "недостаточно раскрыто"
Потому самоуч самый продуктивный.
Ну и наставник конечно. Которого можно спросить и он подскажет куда копать.
Ну. Блин.
Все же не стоит во такую вот фигню говорить.
Вот я помню, первый курс. Спиздил из магазина книгу по Qt. Я же себя уважаю, платить 1800р за книгу - пошли нахуй. Ну. Спиздил. Сижу. Читаю. Нихуя не понимаю.
Потом - спиздил книгу по шарпу. Как раз CLR via С#. Читаю. Какие-то блядь, модули, хуедули. Какие-то заголовки. Какая-то общая языковая среда. Пиздец короче.
А потом - я нашел метанит. И почитал, весело поделал что там написано. Постепенно - какие-то там понимания, хуе-мое, сверху в вузе - на ассемблере-плюсах.
Потом - спиздил курс ITVDN.
И вот теперь я снова открыл книжку по QT - и все еще нихуя, блядь, непонятно. Какие-то сука, контейнеры, сигналы, блядь, этот еще долбоебский плюсовый синтсксис, который сверху тем что в нокле напридумывали помазан. Фу, блядь. Фу, нахуй.
Почему нет способа слияния неймспейсов? Как же заебало.
Почему я не могу обращаться к Math и получить методы из System.Math и собственные методы Extended.Math из одной кубышки, так сказать?
Нет у меня внутри конфликтных методов, так чего же ты трясешься, студия?
То есть ты искал инфу для обучения - и ты её нашел.
А не "кто бы научил, вот этого учителя хвалят"
Так что всё верно
>>2851279 (OP)
>>2851279 (OP)
Криво перекатил из-за куклы
Можно как-то модератора попросить поменять тему?
Ну или пусть удолит кривой тред?
Где остальной список литературы? Раньше после ОП-поста шел но я бака не схоронил.
Какую бесплатную либу сейчас принято юзать для работы с вордом/экселем. Ворд для генерации таблиц, эксель тоже + простые формулы между колонками.
Это копия, сохраненная 10 ноября 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.