Существует множество различных платформ и языков программирования, однако среди них нет более элитного, чем C#. Это поистине язык богов, сочетающий в себе простоту использования с поистине неограниченными возможностями. Знание C# — прекрасный детектор современного, умного и успешного человека. Изучение платформы .NET безошибочно указывает на успешного в будущем человека. ITT элита продолжает обсуждает будущее этого прекрасного и современного продукта компании Microsoft. Только в этом треде элитные разработчики ответят на самые острые вопросы индустрии.
3. WinForms или WPF? Зависит от задачи. Для небольших проектов, скорее всего, будет достаточно винформочек. В случае, если разрабатываемое приложение достаточно серьёзное, то возможно его стоит писать с использованием WPF. WPF очень хорошо работает с паттерном MVVM ( https://ru.wikipedia.org/wiki/Model-View-ViewModel ), и позволяет пилить очень кастомизированные интерфейсы с помощью XAML, что в случае WinForms, делать намного сложнее.
4. Мне тут знакомый_нейм сказал, что C# умирает, это правда? Может не стоит его учить? Неправда. C# довольно активно развивается, недавно вышел новый компилятор, шестая версия шарпа, и уже активно разработывается седьмая. Весь дотнет понемногу становится опенсорсным, а ASP.NET становится независимым от платформы. В некотором смысле понемногу вымирают десктопные приложения с развитием веб-технологий, но в том же энтерпрайзе он еще очень даже востребован.
5. Какую ИДЕ выбрать? Для Windows самым очевидным вариантом будет Visual Studio (https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx). Студия распространяется в двух редакциях: бесплатная коммьюнити-версия и платный энтерпрейс эдишн. В большинстве случае будет достаточно Community-версии: она поддерживает и C#, C++, VB.NET и F#, а так же имеет возможность установки дополнений Для мака и никсов самый юзабельный вариант - MonoDevelop ( http://www.monodevelop.com/download/ ). Для vim можно использовать OmniSharp ( https://github.com/OmniSharp/omnisharp-vim ). Кросплатформенный полуредактор/полуIDE VS Code ( https://www.visualstudio.com/en-us/products/code-vs.aspx ) Также существуют плагины для Atom'а и Sublime Text, но функциональность там достаточно сильно урезана. Кроме того, в данный момент JetBrains активно пилит свою IDE для шарпа (Project Rider), вероятно в ближайшее время станут доступны первые EAP. IDE заявлена как кросплатформенная, со всем решарпер-функционалом, поддержкой отладки, моно и .net core. SharpDevelop - еще одна IDE для C#, отличается малым размером (около 20мб) и опциональной портабельностью, при этом имея дизайнер WinForms и WPF, а также интеграцию с FxCop, StyleCop и прочими ништяками. Если хочется что-то по быстрому набросать, а выкачивать гигабйты нет желания, то возможно SharpDevelop будет лучшим вариантом.
6. С# для мобильной разработки Если нужны инструменты для разработке под мобилы, ставь сразу VS2015 и при установке выбирай все нужные компоненты. Больше информации тут - https://msdn.microsoft.com/ru-ru/library/dn771552.aspx Из актуальной литературы - Xamarin Mobile Application Development - Xamarin Essentials
7. Дополнительные инструменты для разработки на C# LINQPad - сорт оф REPL, с возможностью быстрого подключения к БД и удобной визуализацией данных dnSpy - декомпилятор, малоизвестный форк ILSpy, где реализована возможность модификации IL-кода прямо в EXE и DLL файлах, отладка IL-кода и много других фич для reverse engineering'а. Плюс няшные темы как в студии dotPeek - бесплатный декомпилятор от JetBrains scriptcs - для запуска C# кода как скриптов, возможность использовать как REPL
8. Расширения для студии ReSharper - одно из известнейших. Рефакторинги, умный автокомплит, настраиваемый стиль кода. Платный, но можно стянуть с торрентов Supercharger - показывает "карту" с классами, методами и всем остальным сбоку от кода с возможностью прыгать по ним Indent Guides - показывает вертикальные линии на каждом уровне отступов. Format document on Save - форматирует код каждый раз при сохранении документа Code alignment - Выравнивает код по указанным символам. Удобно, например, при инициализации словарей или в перечислениях
9. Что почитать? - The C# Player's Guide, второе издание (RB Whitaker) - отличная книга для ньюфагов в шарпе, все расписывается довольно подробно, очень много примеров кода. - C# 6.0 in a Nutshell (Joseph Albahari и Ben Albahari) - огромнейший справочник, over 1000 страниц, покрывает почти все области, начиная с синтаксиса и базовых типов и заканчивая интеропом и рослином - C# 6.0 Pocket Reference (Joseph Albahari и Ben Albahari) - просто выжимка из справочника, можно всегда держать рукой - C# 6.0 and the .NET 4.6 Framework (Andrew Troelsen) - 1600-страничный учебник по шарпу, покрывает BCL, WPF и ASP.NET, небо и даже аллаха. - C# 6.0 Cookbook (Jay Hilyard и Stephen Teilhet) - книга в формате "проблема-решение", можно пройтись по оглавлению, найти интересные проблемы и попыпаться самому решить, а уже потом посмотреть представленное решение. Книга скорее не для ньюфагов, а для тех, кто уже знаком с шарпом.
10. Более хардкорный материал - C# in Depth (Jon Skeet) - написана в виде истории версий C#, начиная с C#1.0. Описываются возможности, которые были добавлены в определенной версии и далее достаточно хардкорно и подробно эти возможности расписываются. - Writing High Performance .NET Code (Ben Watson) - охуенная книга. В основном фокуируется на оптимизации дотнет-говна. Методы оптимизации проложений, профилирование, вот это все. Крутейшая и достаточно детальная глава по GC. Рассматриваются достаточно известные проблемы вроде "for vs foreach", "класс vs структрура", кастинг, боксинг, перфоманс регулярок, коллекций, исключений. Короче все что нужно, чтобы вам перезвонили. - CLR via C# (Jeffrey Richter) - это классика, это знать надо.
11. Хочу еще хардкорней - C# Deconstructed (Mohammad Rahman) - введение в CLR, модели памяти и выполнения в CLR, байтоебство, JIT. Книга достаточно коротенькая, менее 200 страниц, можно осилить за пару дней. Желателен опыт работы WinDbg и понимание устройства PE-формата. - Expert C# 5.0 with .NET 4.5 Framework - еще одна книга этого автора, в этот раз намного длиннее. Очень много IL, анализа и разбора стандартной либы (те же коллекции), разбор ивентов, дегегатов, асинхронности etc. на уровне байткода. - .NET IL Assembler (Serge Lidin) - ILёбство, во многих местах повторяет документацию MSDN, но при этом имеет много интересных дополнений и заметок. Кроме того все неплохо структуировано и разложено по красивым табличкам
12. Литература по WPF Из более-менее актуального можно выделить пару книг: - Pro WPF 4.5 in C# (Matthew MacDonald) - Windows Presentation Foundation 4.5 Cookbook (Pavel Yosifovich)
13. Литература по ASP.NET - Professional ASP.NET MVC 5 (Jon Galloway, Brad Wilson, K. Scott Allen, David Matson) - Pro ASP.NET MVC 5 Platform (Adam Freeman) - Beginning ASP.NET for Visual Studio 2015 (William Penberthy)
14. Литература по асинхронности, параллелизму и всему такому - Concurrency in C# Cookbook (Stephen Cleary) - книга, написанная в формате "проблема - решение". Кроме базовых вещей, вроде асинков и параллелизма рассматриваются TPL Dataflows, Rx (реактивные расширения), тестирование всего этого асинхронного добра, ну и работа этого всего на более низких уровнях абстракции - Multithreading in C# 5.0 Cookbook - в основном ничего интересного, но есть довольна неплохая глава про синхронизацию, пусть и не слишком детальная - Pro Async_hronous Programming with .NET (Richard Blewett, Andrew Clymer) - опять же, интересного немного, но неплохие главы про асинхронность + UI и анализ дампов памяти в windbg
15. Литература не по шарпу, но так или иначе связанная с языком C# Game Programming Cookbook for Unity 3D (Jeff W. Murray) - разработка на шарпе под Unity Introduction to Neural Networks with C# (Jeff Heaton) - изучение нейронных сетей с примерами кода на шарпе. Под конец пишем программу для распознавания символов и нейроботов. Machine Learning Using C# Succinctly (James D. McCaffrey) - довольная коротенькая книга на тему машинного обучения с примерами кода на C#. Ничего особого: k-средние, классификация, наивный байес, но с кодом, который всегда можно поразбирать, если что неясно.
16. Но я не знаю английский, как я буду это все читать? На некоторые из перечисленных книг есть переводы, которые можно найти на том же рутрекере, однако, зачастую эти переводы неактальны, содержат неточности, и не самые понятные варианты перевода. Кроме того, переводы обычно пилятся только для нескольких самых популярных книг, более-менее серьёзный материал не переводят. Всегда можно сесть со словарем и понемногу читать, переводя непонятные фрагменты. Это очень полезно, так как в любом случае в разработке без знания ангельского делать нечего. Если очень хочется, то гуглить по запросам: "C# 5.0, Справочник. Полное описание языка", "C# для профессионалов. Тонкости программирования", "Программирование на платформе Microsoft .NET Framework 4.5 на языке C#"
17. Что еще нужно знать, чтобы взяли работать за еду? - SQL - подойдет люая книг по MSSQL/MySQL, базовые запросы, SELECT, INSERT, DELETE, UPDATE. Джойны, индексы, нормализация. В контексте шарпа еще ORM: Entity Framework, Dapper - Системы контроля версий - обычно гита достаточно: add/commit/push, merge, rebase, checkout, remote's, разрешение конфликтов, трехпанельные дифф-менеджеры, cherry-pick - Гитхабы-гитхабчики - issues, организация пулл-реквестов, интеграция с appveyor, теги, релизы, маркдаун - Алгоритмы - сложность алгоритмов, сортировки (пузырек, быстрая, вставками), поиск, рекурсия, алгоритмы на строках - Структуры данных - связанные списки, деревья (бинарные, красно-черные, b-деревья), хеш-таблицы, графы - Если идти в веб - HTML, CSS, JavaScript, веб-сокеты, REST - Паттерны проектирования, стиль кода, внедрение зависимостей, MVVM (если хочется в WPF), SOLID
14. Литература по WCF - Learning WCF: A Hands-on Guide (Michele Bustamante) - Хорошая книга для новичков с пошаговыми уроками по WCF. - Programming WCF Services (Juval Lowy) - Тоже неплохая книга, но уже для более опытных веб-разработчиков - MSDN - Всегда ваш, КЭП.
15. Литература по LINQ - LINQ in Action (Fabrice Marguerie) - единственная, если не ошибаюсь, книга по LINQ.
16. Литература по Workflow Foundation - Essential Windows Workflow Foundation (Dharma Shukla) - Programming Windows Workflow Foundation (K. Scott Allen) - две лучшие книги по WF по мнению Stackoverflow
17. Литература по Windows Forms - Программирование с использованием Microsoft Windows Forms ( Чарльз Петцольд) - старая, неактуальная книга, как и сама WinForms. - Windows Forms Programming in C# (Chris Sells)
При lazy loading с помощью EF каждая связанная запись по одной загружается? Например, есть отдел с коллекций работников(5 человек) помеченный как virtual Я перебираю этих работников, к бд идет по одному селекту к каждому работнику(5 селектов) или один селект который берет всех работников в этом отделе, но это уже ж eager loading.
>>719326 если включен LazyLoading для контекста и нет фильтров для коллекции работников, происходит получение всех связанных Employee для каждого отдела
Почоны, йоба запутался полностью. Как регуляркой распарсить что-то типо "ID:56;DATE:25.10.2017;NUMBER:00000094" чтобы на выходе были 1)значения 2)поля?
Понадобилось следить за папками чтобы автоматически обновлять бд если папку переименуют или удалять. Проблема в том папок может быть довольно много (сейчас 300), а FileSystemWatcher не может вызывать события для следящей папки, только от родительской. Т.е. от каждой директории нужно еще следить родительскую (и получать в лицо все ненужные события о том что там происходит). В общем мой вопрос, как там с производительностью будет и нет ли метода получше.
>>719879 Ну это и подразумевалось в том числе. Я имею ввиду без чего-то по типу "if (xuy == 'c')". Если, например, в классе объявлена переменная, отвечающая за хоткей, то каким образом реализовать конструкцию вида "if (xuy == class.hotkey)"
>>719938 в новом стандарте будет возврат нескольких значений. сейчас можно запилить через out параметры типа int calc(int p1, int p2, out int errorcode);
Шарпач, помоги на асп завести телеграм бота, я нихуя не могу понять как webhook настроить и asp API. Шарп немного знаю, думал блять будет не сложнее чем БД на мускуле библу цепануть, ан нет, соснул и въехал в пня.
>>717891 (OP) Никак не пойму, когда исполняется блок finally ? Из-за него нужно закрывать ресурсы в двух местах ?
MemoryStream M; try { M = GetStreamFromCosmos(); // что-то делаем с ним M.Close(); } catch { // нужен для пересоздания исключений } finally { if (M != null) M.Close(); }
>>719955 он выполняется всегда. суть в том что, у тебя в трай/катч может быть ретурн и если освобождение ресусров не обернуто в финали, то её придется писать 2 раза - и в катч и в трай. что-то типо try { m = trysomesing(); return true; } catch { return false; } finally { m.Close(); } m.Close() выполнится при вызове ретурн в любом случае
>>719996 Лел, я потому и написал, что ее нет, потому что ее нет. Фреймворк написан с эксепшонами, и конструкции языка на них опираются. Конечно можно на тасках вызывать continue, и там чекать результат, но это же ебаные колбэки, я не для этого на решеточке пишу.
>>720051 Вообще к файлу resx уже прилагается статический ResourceManager с такимже именем как у файла, и у него сразу есть куча автогенереных свойств с именами всех загруженых в него ресурсов.
использование пиздец как сложно: (Image)MyResFile.MyImage;
Я конечно понимаю, что это наверное платина, но все же. Почему окно авторизации не закрывается при переходе на следующую форму? Hide, Close пробовал, и с this. и без - не выходит.
Пытаюсь парсить сайт погоды с помощью HtmlAgilityPack. И нихуя не понятно. Точнее, раньше никогда ничего не парсил и не работал с веб вообще. А тут такая херня. Как можно нормально это сделать?
>>720276 The HtmlAgilityPack (HAP) is a good comparison target, since it is most used and established since a long time. Obviously AngleSharp is a great replacement for HAP due to the following reasons:
Standardized HTML5 parsing model Much better error correction / handling Also parses SVG / MathML elements correctly Can handle CSS (selectors, rules, ...) Better performance
В общем у меня есть формочка и мне нужно в отдельном потоке чтобы не блокировать формочку выполнять некий код и посылать сообщения на формочку Форма Класс в другом потоке, который посылает время от времени сообщения на форму
Т.е. чтобы он висел в памяти как формочка. А все примеры с потоками отсылают к выполнению просто некоего кода в потоке и блокировки. А мне не нужно мой класс блокировать (так как ему шлет сообщения другой класс), мне нужно чтобы он висел в памяти.
Кажется, что-то нащупал (статью (которая в трех частях, блеат) читал, понятное дело, по диагонали). Что скажете, гуру (пикрелейтед)? Можно ли так делать? Классы действительно не могут "жить" в отдельном потоке, но что нам мешает создать класс в потоке и стопануть его...
Суп антуаны, насколько нормально использовать вызов обработчика событий в таком ключе public void EventName(Object sender, EventArgs e) { if (this.InvokeRequired) { Invoke(new Action<Object, EventArgs>(EventName), sender, e); return; } ... основной код метода }
Как я понимаю, данный финт ушами проверяет потокобезопасен ли вызов обработчика и в случае необходимости вызывает его в основном потоке?
>>720758 >BackgroundWorker весь твой Что? >может у тебя форма то и не будет блокироваться У меня не стоит будет ли блокироваться форма или нет, мне надо чтобы это "жило" в другом потоке.
>>720818 >нужно не блокировать формочку >не нужно получать асинхронно А ты сегодня умный. Ты просил в другом потоке, вот оно будет в другом потоке. Хотя бы с тредами не пердолься, возьми таски. Про background worker так и не смог загуглить? Отсюда кажется что решаешь проблему, которой нет.
>>720966 Лол, я уже сделал первый вариант, префикс специализации хрен наберешь если забудешь, а суфикс иде подскажет. Вообще в проекте все как попало, в половине мест так, в половине по другому.
Алсо, тут посаны на стеке пишут, что в генрериках проверять тип Т зашквар, но что делать если без этого никак не обойтись? Для разных типов нужен разный код, если для каждого плодить по методу, как советуют, то у них обидно совпадают сигнатуры.
В пятницу будет собеседование на стажера с#. Что сейчас спрашивают? Ооп, многопоточность? Что по многопоточности обычно спрашивают? Синхронизацию контекстов и синхр. потоков?
>>721049 Неделю читаю про многопоточность, кучу примеров просмотрел - нихуя не понимаю, треды, таски, синк авэйт, домены, что блять, нахуя такой зоопарк наплодили хуй пойми. Документация в основе старая, каждый хвалит свою хуету. Пиздец блять.
>>721049 Забей. Ты никогда не сможешь предсказать что у тебя спросят. Все эти подготовки с собеседованиям это как по мне хуета полная. Надо уметь делать своё дело, и если собеседующий эффективен, то он сможет это задетектить. Если нет - значит нет. Слив на собесе не всегда вина соискателя.
>>721061 >да, многопоточность сложная штука. Тоже плохо в этом разбираюсь, вот думаю че нить к собеседованию повторить/выу Многопоточность надо на реальных задачах делать, а не просто дрочить теорию. В большинстве случаев для веб-макак достаточно знать что такое lock и всё. Для клиентсайд и этого не надо.
>>721075 нихуя у тебя все резво а типы данных в дотнет? а коллекции? а сравнение? а сборка мусора? многопоточность - это не та штука, которую надо знать (на стажера тем более) от зубов. хотя бы понимать, что такое гонка потоков, как это (для тебя - в теории) можно избежать, зачем это вообще избегать
>>721083 ну, все реализации подходят для своей ниши задач
Может невнимательно читал книжку и всё объяснялось, но: http://pastebin.com/frCivZ8P 1) Почему вся запихнута в один большой класс? 2) Нахуя нужен класс MyButtonClass? Нельзя те 4 строчки внутри мэйна написать? Что за аргумент в методе run?
>>721336 Всё кроме using. Класс называется "MyButtonClass". Кстати, что значит там : Form? > не тулят все в один метод) Ну блядь. Там 4 строчки. При том, что в мейне одна.
>>721347 >ммм...ты, очевидно, дошел до UI-ных элементов и не знаешь, что такое Form? или ты не в курсе про синтаксис наследования? да ето так >... Ой, это же класс конструктор, не заметил. Но вообще понятненько, типа просто так удобнее. А можно было бы и в мэйн захуярить, просто это нелогично.
>>721534 если MVC, то 5-6-7. если WebAPI, то, по-моему, выше 2й версии не придцмали если есть знания дотнета, то посмотреть понятия сессий там всяких, фильтров, бандлов, маршрутизация, DI. ну кароч
>>721125 >все реализации подходят для своей ниши задач Можешь по хардкору в двух словах описать "тип -> ниша" чтобы знать куда плыть по первой и выбрать правильную реализацию?
>>721639 - асинхронные делегаты - делаем операцию с возвратом результата и важно этот результат не проебать и использовать после завершения процесса (не всегда это 100% вписывается вписывалось
- ThreadPool.QueueWorkItem, Thread.Start - выполнение операции в фоне и хуй на неё, пускай себе крутится
- Parallel, PLINQ - обработка коллекций вписывалосьбез обязательного сохранения порядка
- таймеры - цикличное выполнение кода, пока не скажут отбой
- ResetEvent - как по мне отличным примером служит управляемая постановка задач в очередь, выполнение которых происходит где-то сбоку
- BackgroundWorker - попросту говоря - операция с прогресс-баром. либо же операция, ход которой важно отслеживать в родительском объекте
async/await вбирают в себя первые три пункта в подавляющем большинстве случаев
не всегда это 100% вписывалось в задачу до появления async/await. однако возможности, которые предоставляют делегаты, нацелены на реализацию некого колбэка опосля завершения работы фоновой задачи
>>721655 Parallel это TPL? Те таски и иже с ними. Просто пишу сейчас простенькое приложение, которое реализует http реквесты с сетевым устройствам, думаю что выбрать для реализации многопоточности.
>>721665 Спасибо за ответы, если смогу родить свою идею в виде приложения обязательно выставлю ее на всеобщее порицание. Осталось только понять, почему не работает сохранение в гитхаб.
Есть UWP приложение с SQLite базой данных. С БД взаимодействую с помощью Portable Class Library for SQLite(https://sqlitepcl.codeplex.com). Не понимаю как использовать pragma statements. Нагуглил вопрос на SO(http://stackoverflow.com/questions/19369006) и попробовал в конструктор SQLiteConnection передать "Data Source=Sqlitedb.db;PRAGMA journal_mode=MEMORY" вместо просто "Sqlitedb.db". Получилась БД с дефолтными прагмами и стрёмным именем. Что я делаю не так? :(
>>717891 (OP) Подскажите еще, как сделать, чтобы скомпилированная для Windows (xp, 7, 8) программа работала везде без требования установить какие-нибудь библиотеки ?
>>722169 Т.е. в C# Visual Studio нельзя сделать windows-программу, которая бы работала на любых компах с Windows >XP, т.е. ей обязательно NET нужен ?
Мне нужно было сделать простенькую программу с формочками на несколько операций, C# посоветовали как самое простое.. Выход только передалать под что-нибудь другое ? В C++ есть аналогичные возможности работы с формами ? Особенно перетаскивание файлов на панель интересует.
У меня c++ не установлено, создать проект и посмотреть не могу. В микрософте написано, что C++ предложат установить, когда я создам новый проект с++, но у меня выдаётся ошибка что компонентов нет и окно создание проекта открывается еще раз. Если в нём нажать далее, снова выдастся эта ошибка.
Аноны, нужна срочная помощь. В общем на c# с GDI написаны примитивы. Пусть будет, допустим, обычный квадрат. Нужно сделать так, чтобы на линии появлялся круг, который движется по линиям квадрата и постепенно уменьшался. Как это сделать?
Ну вот, прочел я Троелсена, и что теперь дальше делать? Я знаю как программировать на C#, но не могу написать полезную программу. Подскажите что делать?
>>722662 Пошел нахуй >делал примеры Что значит делал примеры? Ты имеешь ввиду задачи? Там нет задач. Примеры я просто переписывал и прекрасно понимал как все работает. пошел нахуй
позвали на собеседование, но ребяткам нужен професеонал в SignalR. опираясь на нихуевый старт инвестигейта http://www.asp.net/signalr/overview - могу сказать, что все вроде бы нисложна знающий товарищ, опиши, какие в этой срани есть подводные камни? что из описанного в туториалах покрывает 95% задач?
Шарпач, помогай. Есть софтина на WPF, в окне контрол Image, в нем стоит биндинг с конвертером. Так вот, в этом конвертере я гружу пикчу из интернета и выкидываю контролу. Естественно мне всё это фризит гуй. Надо как-то сделать это асинхронно, но нихуя не получается. То пикча где-то теряется, хотя код выполнился, и не отображается, то еще всякая параша. Прописать у контрола UriSource не вариант. Как быть?
>>722664 У Троелсена примеры даются "исскуственые", придуманные для решения одной надуманной задачи или чтобы показать как работает та или иная функция. Эти примеры редко бывают бывают больше ста строк.
Сложности у меня возникают с написанием больших(относительно примеров Троелсена) программ. Я вообще не имею понятия как писать большую программу. Не знаю как начать писать такую программу. Мне кажется у меня просто не хватает знаний. Что мне еще прочесть или посмотреть, чтобы у меня решать хотя-бы бытовые проблемы(типа программа, заливающая картинки на какой-то ресурс или программа, которая создает раздачу на рутрекере и т.д.)?
>>722673 >>722674 static void Main() { new GovnoApp().Start(); } начни с этого. а там все как-то само загрутится, знаешь ли. боишься наговнокодить? ну, тогда хуй ты что напишешь
>>722685 Ну я нажал на ссылку, она грузится вплоть до 15 секунд, там пикчи по 5 метров бывают, за это время я успею еще 10 раз по другим прожать и все грузятся в один контрол. Сам контрол при загрузке через UriSource при смене Uri сразу начинает что надо грузить, а тут говно какое-то получится.
>>722696 я вообще нихуя не понял, как должно происходить в идеале? ты клацнул на картинку, она многометровая и долго грузится, в единственный контрол (!) да, ты перешел к другой картинке, клацаешь на нее. и шо блять тут должно произойти?
>>722694 С чего ты решил, что я не понимаю зачем я выучил инструмент? Откуда вообще взялась эта немотивированная агрессия? Часто тебя в школе одноклассники дразнили? Девушки возбуждаются, когда узнают, что ты всегда знаешь зачем учишь инструменты?
>>722701 >я не понимаю зачем я выучил инструмент >не могу написать полезную программу >отсутствие технической фантазии check >немотивированная агрессия >путать агрессию с пренебрежением в 2016 check >попытка психоанализа по посту в интернете check
Сборка мусора, Finalize() и Dispose()Аноним21/04/16 Чтв 19:08:29#171№722895
Аноны, поясните за тему рилейтед. 1. Почему непредсказуемая работа сборщика мусора является проблемой, и что вообще делает мусорщик? Как я понял, после выхода из конкретного блока, из стека удаляются переменные по значению, а из кучи удаляются ссылки на объекты/ссылочные типы, но сами объекты остаются в куче? Но разве память при этом считается занятой? Какой алгоритм использования памяти в куче у дотнетовских языков? Разве нельзя просто хуярить в область памяти объекты по новой, если на них не ссылается ни одна ссылочная переменная? Или слишком заёбно проверять каждую область памяти, ссылается ли на неё что нибудь или нет, поэтому, шобы не ебать мозги, пишется в чистую область? 2 В чём разница между Finalize() от Object'a и Dispose() из IDisposable()? Они оба очищают только неуправляемые ресурсы? То есть, нет особого смысла реализовывать IDisposable для класса, в котором не используются неуправляемые ресурсы типа указателей? Или кто нибудь из них всё таки очищает данные об объекте в куче?
позязя не шлите в гугол, сам ищу ответы на свои вопросы параллельно, но хотелось бы из первых уст ответы прочесть.
>>722895 1. разве работа сборщика непредсказуема? шо правда? > из кучи удаляются ссылки на объекты/ссылочные типы, но сами объекты остаются в куче определись, удаляется у тебя че-то из кучи, или не удаляется ничего там не удаляется > Разве нельзя просто хуярить в область памяти объекты по новой, если на них не ссылается ни одна ссылочная переменная? ну эээ можно. только ты при создании каждого нового объекта будешь проверять, на что там что ссылается, а на что нет? память забивается до того момента, пока можно. дальше вызывается сборщик и, либо выкидываем мусор и впихиваем новый, либо расширяем память > Какой алгоритм использования памяти в куче у дотнетовских языков? я, наверное, вопрос не понял. каков алгоритм чего, поиска для очистки сборщика?
>>722895 >что вообще делает мусорщик Обходит граф объектов, отмечает те на которые программа ещё где-то ссылается и удаляет неиспользуемые. Так же раскидывает объекты по поколениям и тд. >из стека удаляются переменные по значению Из стёка вообще нихуя не удаляется. Тебе, как дотнет макаке это знать не обязательно, но из стёка обычно вообще нихуя не удаляется - при выходе из скопа просто возвращается указатель на прошлый участок стёка. Поэтому стёк считается небезопасным, страдает переполнениями и есть вероятность получить мусор. >а из кучи удаляются ссылки на объекты/ссылочные типы, но сами объекты остаются в куче Сука, что у тебя вообще в голове? Объекты в куче как раз таки чистятся полноценно (хотя это уже зависит от конкретного системного рантайма - в целях оптимизации не все зануляют память и так же попадается мусор). >шобы не ебать мозги, пишется в чистую область? Ебааааать ты шизик. Ты сам того не понял, но боишься фрагментации памяти не зная о ней, лел. Расслабь булки - в дотнете присутствуют дефрагментирующий алгоритм работы с памятью, который легко и просто настраивается.
>>722914 >разве работа сборщика непредсказуема? Наверно он имел ввиду что порядок вызовов Dispose/Finalize неопределен и как в крестах надеться на правильную последовательность освобождени ресурсов нельзя.
>>722914 >1. разве работа сборщика непредсказуема? Да. Непредсказуемо когда он будет вызван, сколько времени отработает (и насколько всё подвиснет) и как отработает (сколько памяти освободит).
>>723402 Блять, твоего объяснения я ждал столетие. А как через async/await заставить поток сообщать в основной поток свое состояние с возможностью доступа к элементам управления (граф. интерфейс)?
>>723286 Лол, всегда проигрываю с таких питухов. Как добавили два сахарка в язык так им резко всем понадобилась ассинхроность и все затопило сатьями "как мы все перtписали заново? но с модной фишечкой". Тащемта в 3.5 нете для ассинхроности уже все есть, тем кто надо просто брал и пользовался.
Эта строка объявления выполняет три функции. Во-первых, объявляется переменная myinfo, относящаяся к типу класса InfoUser. Сама эта переменная не является объектом, а лишь переменной, которая может ссылаться на объект. Во-вторых, создается конкретная, физическая, копия объекта. Это делается с помощью оператора new. И наконец, переменной myinfo присваивается ссылка на данный объект. Таким образом, после выполнения анализируемой строки объявленная переменная myinfo ссылается на объект типа InfoUser.
Оператор new динамически (т.е. во время выполнения) распределяет память для объекта и возвращает ссылку на него, которая затем сохраняется в переменной. Следовательно, в C# для объектов всех классов должна быть динамически распределена память.
Есть два стула приложения на C# - служба (windows service, для службы был указан Account LocalSystem) и клиентское приложение(обычное windows приложение, в данном случае консольное), которые обмениваются информацией по именованным каналам (Named Pipes). Проблема в том, что клиентское приложение может подключиться к службе по именованному каналу только с правами администратора.
Нашёл в сети решение, в котором предлагается назначить серверному именованному каналу PipeSecurity, содержащий один или более PipeAccessRule. После применения этого подхода серверное приложение падает с исключением System.UnauthorizedAccessException. Подскажите, как по именованному каналу осуществить подключение к службе клиентского приложения, которое запущено без прав админа? Делаю так:
Пробовал также в коде службы WindowsIdentity.GetCurrent().Name менять на "Everyone", но в этом случае исключение System.Security.Principal.IdentityNotMappedException.
Пробовал передать в PipeAccessRule вместо первого параметра выражение new SecurityIdentifier(WellKnownSidType.WorldSid, null)
Да и остальные способы из гугла пробовал, поэтому сращиваю вашего совета.
>>723792 Потому что когда у тебя появится баг связанный с контролом тебе прийдеться лазить по всему проекту выискивая места где ты этот контрол дергаешь, вместо того чтобы открыть один класс и посмотреть.
>>723792 welcome to SOLID. UI должен оставаться UIем, любой другой пиздокласс не должен знать подробности реализации (структуру) формы, даже если взаимодействует с ней как-то напрямую
>>723801 что тебе конкретно надо? можно использовать принцип, заложенный в связывании (binding). один объект (UI) сигнализирует какому-то другому (ViewModel) об изменении состояния чего-то. либо через наблюдателя.
Кто-нибудь на GTK или ETO пистал UI? Как оно, аналога WPF для линупса нету, а писать что-то не консольное надо. Поглядываю на XWT, но он в глубокой разработке.
Я конечно понимаю, что я слоупок, но для тех кто не видел https://channel9.msdn.com/Events/Build/2016/B806 рекомендую посмотреть как дебажить в VS и не заебаться, может что нибудь новое для себя узнаете
>>724352 >We support debugging of C# apps cross-platform via Mono >VS Code Mono debugging integration comes from the 'Mono Debug' extension on the Visual Studio Marketplace. >If you want the best possible experience for those projects and development on Windows in general, we recommend you use Visual Studio Community
Устроился на свою первую работу, посадили фиксить баги. Понял что я не умею пользоваться дебагером, потому что никогда не работал с большими проектами. Поясните, пожалуйста Вот, например, выскакивает меседжбокс или выгружаются записи в гридвью где-то Как определить где это? Когда просто брейк нажимаешь оно стопает уже после того как все появилось/загрузилось, в коллстэкэ отображаются только вызовы методов в гуи тредах Есть еще в интелтрейсе опция, чтобы отображать все методы, которые были вызваны, но тогда оно минут 10 доходит до нужного места и дамп вызовов занимает 600 метров. Я только в лоб вариант нашел, писать поиск по всему солюшену сообщение в меседжбоксе, находится где это храниться в хмл ресурсах, определение айдишника этого ресурса и потом находишь где он в коде используется и ставишь там брейкпойнт. Тогда в коллстеке еще не пропадают вызовы которые мне нужны.
Парни, вот у меня странный вопрос. На шарпе пишу свой быдлокод, и вот у меня интерес появился к школо крекерству. Вообще это кому-нибудь нужно? Разбираться в байт-коде. И если я с этим разберусь смогу ли я крякать майкрософтовские продукты под .NET?
Как в шарпе создавать переменные с именами, определяемыми извне? То есть я хочу создать переменную с именем, которое вводится с клавиатуры, например, это вообще возможно? Как-то можно распарсить имена объектов WFP? Если имя кнопочки такое-то, то делать-то и так далее.
пацаны, я хер знает куда идти, т.к пишу на шарпе, припёрся сюда. Нужен в ргб палитре цвет ржавчины(пиздецки старой). Всё гугление и юзание пипетки в браузере привело лишь к появлению в моей проге нахуй не нужонного апельсинового цвета. Выручайте, аноны
Нэтаны, тут кто нибудь на F# что-то пишет? Есть будущее у языка? Я вот захотел попердолиться с функциональщиной, теперь собираюсь кусок бизнес логики переписать на нём, будет красивее. Имеет ли смысл дрочить это язык кроме как для своих васяноподелок?
>>727117 хуй его.. но функционалки набирают обороты это однозначно (у нас, к примеру, в конторе банке типочки целую систему нахуярили на эрланге, все пользуются и продают даже). Я решил все-таки подрочить книженцию одну по F#.. посмотрим что выйдет
Так как я нуб, то и вопрос задал не правильный, меня на самом деле интересовало КАК такое возможно. Я спросил как это гуглить и вообще как это работает. Искал довольно долго, но оказалось что все очень просто - polygon переменная ссылочного типа, она содержит ссылку на объект. Я вначале это пропустил.
Теперь, когда я понял этот прикол досканально, изучение пойдет гораздо бодрее!
Спасибо всем тогда мне ответившим, вы мне реально помогли! Спасибо анон!
>>728195 Ну плис. Я даже соглашусь что шарп лучший язык эвер. Только повесьте шапку или банер - шарп лучшее для быстрого заработка денег програмингом или еще что
>>728200 Я не топлю. Я работаю энтерпрайз макакой. И меня заебало что половина любого треда состоят из. Посоны почитал. Шилдта как рубить теперь бабки. Посоны какой учебник взять. Посоны я нихуя не понял. Посоны как стать успешной жабамакакой. И так далее.
Платиновый вопрос, наверное, но не совсем стандартный: Хочу запилить простецкую игрульку на шарпах (для обучения, не для коммерции). Использование для этого WinForms(был опыт по школе) - мазохизм и нахуй надо? Или сразу катиться в Юнити с его скриптами на шарпе и окунаться с головой в неизвестное?
>>728300 > рпг/экономического симулятора я хз, если это лайт-версия космических рейнджеров без наземных битв и полетов, то можно прикольнуться на WPF. ну а если у тебя стоит на юнити и хочется чисто-конкретно написать что-то этакое, то копай туда
>>728246 Зависит от уровня экшона. Если нужно перерисовывать игру 30-60 раз в секунду, то таки да, катись в юните или на любую обертку над дх/огл, иначе хватит обычных винформ с их перерисовкой по требованию ирока, но с максимальным ограничением 1-2 кадра в секунду. Короч, последнее подходит для простых пошаговых игрулек.
Шарпач, чтобы усвоить базовые возможности языка требуется много писать кода, я это прекрасно понимаю. Но моя фантазия хочет чего-то большого, при построении которого я упираюсь в непонимание, как лучше всего это реализовать. Существует ли какой сборник задач по С#? Порылся на twirpx, ничего толкового не нашел. На гитхабе в 90% проекты уже сделаны, их или допиливать до снижения кол-ва багов -> 0 или рефакторить, а как, новичек не знает, а ментора нету чтобы подсказал. Есть у питона сервис, где нету теории но множество задач с подсказками, что лучше использовать. Есть аналог для С# или попробовать адаптировать задачи из него для себя?
Что юзать - Repository для каждой сущности или дженерик репозиторий? Нужен ли unit-of-work? Или в мвс 5 все это нахуй выкинуть и юзать model binding, который я пока не пойму никак
>>728602 Ой блин забыл, сейчас он называется EF Core 1.0
Пока RC1 вышел, там точно есть поддержка: 1) Memory 2) MS SQL Server (тестировал на винде) 3) Posterger (тестировал на убунте) 4) Sqlite (тестировал на убунте)
>>728606 Это, конечно, здорово, но в контексте EF5-6 и MVC5 таки оборачивать DbContext в репозитории и UoW или можно как-то проще? Просто, DbContext - это уже сам по себе ЮоВ, и в нем есть репозитории, и оборачивать подобное в подобное мне не кажется хорошей идеей, но уровень абстракции, чувствую, какой-то нужен, хотя бы для юнит-тестов или чтобы поменять потом EF можно было на что-то другое Хотя я ей-богу, не могу представить сценария, в котором будет необходимость последнего
Короче, я запутался немного, разъясните за щеку, пожалуйста
Шарпач, поясни за String.Format Нужно запилить таймер в формате (Х дней Х часов Х минут) Можно так сделать через формат? Мануалы читал, но так и не понял как это реализовать.
Посоны, есть io bound метод, их много и нужно выполнить их параллельно. Если я просто их заверну в таски, это ведь не очень выйдет? Планировщик поставит их в очередь и возможно выполнятся они последовательно, а мне нужно чтоб прям здесь и сейчас. Есть async аналоги этих методов и события их выполнения, они то ведь сразу начнут выполнятся? Если уже эти пары завернуть в таски получу ли я что нибудь полезное?
Ананасы, помогите с EventAggregator в Prism. Как выполнить событие в текущем потоке? Он на выбор даёт фоновый/отправителя/UI, а если я пытаюсь получить событие в другом потоке, то начинается какая-то необъяснимая хуйня, код начинает жить своей жизнью. У UI есть Invoke, а как у себя в классе такое сделать?
Какой-то убогий стал шарпотред. Уровень дискуссии на нуле. Вы не ахуели тут? Даже ньюфагам через раз отвечаете. Захожу раз в месяц вас проверить и с каждым разом все унылее.
А мне нравится шарп, антуанетты. Я писал на спектрумовском бейсике, асме Z80, Delphi, и потом перешел на шарп. Это охуенный язык, хотя есть и спорные вещи, но с моими задачами они не проявляются. Охуенные дженерики, охуенные атрибуты, охуенный LINQ, охуенные ламбада-выражения, охуенное отсутствие заголовочных файлов, охуенное отсутствие секции предварительных объявлений, охуенная возможность писать функции в произвольном порядке, охуенная студия с охуенной подсветкой и охуенной автоиндентацией, охуенная коммьюнити, охуенная библиотека в охуенном стиле охуенного ООП. Я пишу на шарпе уже 7 лет почти (пиздец как быстро время пролетело, даже на ебаном Delphi я писал всего 6 лет, а кажется будто чуть ли не вечность) и до сих пор тащусь от этого языка. Я его сам выбирал, сравнивал разные языки и шарп как был охуенным, так им и остается.
>>729954 значца, сделал у нас лид девелопер "решение", позволяющее отвязаться от ссылки на EF в запускаемом веб-проекте путем добавления несложного уровня абстракции и, главное, полным отделением проекта DAL.EF от чего бы то ни было. при этом, дабы естественно, оно все работало, post-build ивентом библиотеки данного проекта вкупе с либами еф копируются в bin веба
на вопрос зачем так, ответ был, как я указал, отсутствие ссылки на еф в главном проекте
на вложенный вопрос нахуя (ссылка есть не просит, дополнительного функционала и неудобств особо не приносит, просто будучи включенной), ответил вотшто: это во-первых круто, мол, отвязываться от конкретных источников данных. также во-вторых сильно уменьшает количество проблем если проект внезапно соскочит на другую орм или (!) на другую субд (не реляционную). ну а -третьих, мол, микрософт так советуют делать, все пошли и я пошел
возникает у меня вдогонку три вопроса к вам человекам: 1 адекватный ли это подход (в целом, включая механизм внедрения библиотек) 2 наличие целого слоя абстракции источника данных - это недостаточный способ отвязать приложения от всего начиная от механизма получения данных, заканчивая субд? 3 разве это не пиздец, если ты вдруг начинаешь переориентировать проект на другой по механизму источник данных? во-первых переход хотя бы от ms к mysql уже создает проблем, не считая замену рсубд<->графы<->досубд 4
Господа, как лучше всего обновить ComboBox при выборе пункта из него? Использую WPF, склоняюсь к DropDown, но как из обработчика события изменить Items?
>>730494 view model влияет на view, model влияет на view model. не знаю насколько статический метод в твоем случае - разумный выбор, но раз уж так, то пускай будет так
Шарпач, раньше создавал кастомную команду и биндил её таким образом: http://pastebin.com/EhBZK61T Сколько не пытался, не получается прибиндить (MVVM). Подскажите, как прибиндить её, используя MVVM?
Может я сейчас платину задам, может меня отправят на хуй читать шапку, но имею один вопрос. Хочу вкатиться в ASP.NET, в 2016 вообще имеет смысл? Джуниоров вообще берут легко? С чего начинать если опыта в программировании практически нет?
>>731269 > В смысле? Сочетание клавиш или что? в какой момент развития вселенной необходимо выполнение команды?
> Не понял. Можно ли поподробнее? ты говоришь такой своему приложению: вот у меня есть команда, на, короче, забайнди её и запускай когда надо, а по завершению на тебе колбэк. но проблема в том, что приложению непонятно, когда тебе там надо. ты обьявил её в Window.CommandBindings, а остальное тебя не ебёт. связывание происходит со вполне себе конкретной пропертей объекта, либо с триггером какого-либо объекта
>>731292 >связывание происходит со вполне себе конкретной пропертей объекта В моём случае это свойсво TestCommand, нет? Вот только я не могу его привязать к Executed. С простым кликом не было бы проблем.
Сап, дотнетеры. Если так писать > foreach (var result in results.Results.Where(r => ...)) Он ведь не будет при каждой итерации запускать выражение? Или нужно отдельную переменную?
> In other words, once a Task has a Status of “Running”, calling Cancel() on the CancellationTokenSource no longer has an effect on the actual Task, it is up to the Action within the Task to respond to the token’s message. Additionally, even though the Task has been “canceled”, it reports a status of “RanToCompletion” as if nothing unusual happened! Сколько нам открытий чудных он готовит!
>>730096 У нас тоже самое говорят про "а что если перескачат", ни разу не перескакивали, манагер не разрешит переписывать доменную модель с нуля, это пустая трата человекочасов. В целом подход норм, но в большинстве случаев достаточно просто ninject сделать и все.
Почему даже для написания простого приложения на WPF требуется использовать MVVM? Мне нужно лишь простенькую форму использовать, зачем приваривать монструозные фреймворки типа Катель или Призм? Почему ипользование заоконного кода это признак дурного тона? У меня от все этой хероты острый приступ СЛОЖНААА.
>>731784 Во-первых, для твоего хелловорлда от тебя никто ничего не требует. Во-вторых, пейсание без этих паттернов признак говнища только в проектах которые будут расти, ибо иначе получится лапша со вкусом земельки после тёплого летнего дождика. Опять же – не хочешь – пиши как хочешь, всем грубо говоря насрать.
Гуру тасков. > if(cancellationToken.IsCancellationRequested) cancellationToken.ThrowIfCancellationRequested(); Это единственный легальный способ убивать таск? Везде внутри таска ифы пихать?
>>731806 А ты как хотел? Тред кикнуть что-ли? Нормальная практика, в Reactive Extensions тоже самое, только там токен встроен по умолчанию.
А вообще, с жесткой отменой таски слишком много проблем, нужно правильно откатить изменения на каждой стадии. Проще дать ей закончить и проигнорировать результат.
>>731784 На самом деле можно спокойно мешать MVVM и заоконный код. За окно смело толкай то, что никогда больше не тронешь. Городить костыли в ViewModel вместо одной строчки за окном - вполне себе говнокод.
- The C# Player's Guide, второе издание (RB Whitaker) - отличная книга для ньюфагов в шарпе, все расписывается довольно подробно, очень много примеров кода. - C# 6.0 in a Nutshell (Joseph Albahari и Ben Albahari) - огромнейший справочник, over 1000 страниц, покрывает почти все области, начиная с синтаксиса и базовых типов и заканчивая интеропом и рослином - C# 6.0 Pocket Reference (Joseph Albahari и Ben Albahari) - просто выжимка из справочника, можно всегда держать рукой - C# 6.0 and the .NET 4.6 Framework (Andrew Troelsen) - 1600-страничный учебник по шарпу, покрывает BCL, WPF и ASP.NET, небо и даже аллаха. - C# 6.0 Cookbook (Jay Hilyard и Stephen Teilhet) - книга в формате "проблема-решение", можно пройтись по оглавлению, найти интересные проблемы и попыпаться самому решить, а уже потом посмотреть представленное решение. Книга скорее не для ньюфагов, а для тех, кто уже знаком с шарпом.
анон памаги. Нужен сетевой обработчик ака сниффер ака фильтр лайк впе про. нашел вот эту тему https://habrahabr.ru/post/259459/ в конце темы есть пример кода немогу понять как у инжектора выбрать процесс целевой. И как настроить длл под фильтр пакетов вида 00 00 00 заменить на 00 00 01 к примеру. анон памаги.
>>731837 Троелсен мне не понравился. Из него узнал по сути только ADO.NET. Всё остальное какая-то хуйня, очень хуевое изложение. Больше всего понравился John Skeet C# in depth.
Как заполнять листбокс, чтобы по клику получать много свойств этого элемента? Скажем у меня есть список словарей с ид, названием, датой и еще чем-то, как эти все значения передать в листбокс, чтобы в нем были только названия, но по клику я мог получить все эти остальные значения?
>>731991 Все равно нихера не выходит с заполнением. Листбокс в хамл <ListBox x:Name="listBox" Margin="0" FontSize="64" ItemsSource="{Binding Computers, Mode=OneWay}" DisplayMemberPath="Name" MouseDoubleClick="listBox_MouseDoubleClick"/> http://pastebin.com/virZEfhR код класса. Что я не так сделал?
>>731945 >Я так понял у тебя там хоткеи? Да, хоткеи. >InputBindings С его помощью приходится биндить команду минимум в двух местах. И в случае если источников команды много это будет не очень удобно.
А по поводу этого: >Как тогда мне скормить ICommand в Executed? решения нету?
>>732255 Ты имеешь в виду что у тебя будет одна очередь фоновая очередь на выполнения тасок? Если сможешь это сделать с помощью синх.контекста, отпиши потом как сделал.
Я в свое время смог сделать что-то похожее только с SemaphoreSlim. У него есть метод "Task WaitAsync()", который удобно использовать в async/await. В итоге потоки там конечно разные, но не более чем один одновременно-работающий.
Есть вот такой джсон. Цель - получить значение, там где стрелочка. (picrl#1)
Использую Ньютоновский Json.Net Для проверки (пытаюсь достать значение success) использую такой код и получаю такой результат (picrl #2)
Но когда пытаюсь использовать value[0] вместо value["success"], шлет нахуй, пишет ожидается имя элемента. Как мне получить доступ по индексу? Или узнать какое имя у N-го элемента, чтобы уже использовать имя?
>>732318 Что за хуйню я прочитал? Сформулируй задачу так, чтоб я понял. Ты берешь весь json и обзываешь его value. Потом ты берешь у этого jason корневой элемент success. И разумеется он берется. Но потом ты пишешь какую то хуйню. Что бы получить то, что sn любовно нарисовал стрелочкой, тебе нужно пройти по всем веткам. Вот как получить ее: value["rgDescription"]["цыферки"]["descriptions"][6]["value"] = ""
>>732338 > 2. Не [6], а ["6"] Все что в кавычках считается именем. Если ты впихнешь индекс в кавычки, то будет искать ветку с именем "6", которой там нет. Но .т.к. там просто массив, то нужно ставить именно [6] как индекс.
>>732339 Так? Это не работает, если что, но я не могу понять почему. Тип элементов точно JToken, потому что если пытаюсь вывести в textBox без .ToString(), то пишет что нельзя JToken в string неявно
>>732346 > Так? Нет, не так. foreach работает только для однотипных коллекций. У тебя в rgDescription условно разные именованные элементы. Сперва получи их набор через Vhildren. Потом уже можешь по ним ходить. > если пытаюсь вывести в textBox без .ToString(), то пишет что нельзя JToken в string неявно Самый охуенный способ ухнать тип переменной.
>>732271 То есть по умолчанию в не UI нет синхронизатион контекста. От чего весь async код отправляется в threadpool. А я хочу сделать синхконтекст как в UI потоке, чтобы все говно исполнялось через очередь.
>>732409 Кстати читал "Нет никакого потока" https://habrahabr.ru/post/216659/ async/await в C# такие прикольные, это просто коррутины которые вызываются последовательно. Будет ли это делаться через потоки или IO/прерывания это внутренняя реализация.
Для своих тасок ты можешь написать кастомный TaskScheduler (если это не PCL). Но если будешь использовать внутри этих тасок вложенные async/await, то там уже меньше контроля.
В все время наебался с PCL (общий код) для Xamarin (Android/iOS/WP) в итоге остановился на SemaphoreSlim Это самое простое и нет зависимости IO это или какие-то рамдомные методы чужих библиотек.
P.S. Если кто смог сделать по другому, буду рад услышать.
У меня были задачи: 1) сделать загрузку картинок с кэшированием 1.1) загрузки (во временные файлы) были в 3 потока 1.2) модификация дискового кэша (добавление удаление записей) в 1 поток 2) Работа с SQLite базой в 1 потоке, в независимости от того с какого потока она вызывается.
При этом было нужно не держать явно потоки, а пользоваться всеми плюшками стейт-машины async/await
Ананасы, посоветуйте что-нибудь по архитектуре. Даже с MVVM код рано или поздно превращается в нечитаемое говно. Вот опять сижу и пытаюсь отрефакторить эту срань. Что посоветуете почитать такому аутисту?
Вот есть у меня обычный метод string MakeGovno() Есть async метод нажатия кнопки. Как мне в этом методе вызывать MakeGovno, чтобы не блокировало вызывающий поток? В данном примере это ui.
>>732632 Какими еще словарями? >десериализвать это в нормальные объекты Но тогда ведь придётся еще и сам класс-объект этот делать, а это нахуй надо ебаться с таким жсоном большим.
Я знаю c++, могу в ангельский, но плохо. Смогу ли я понять что написано в The C# Player's Guide, второе издание (RB Whitaker) и CLR via C# (Jeffrey Richter)?
>>732727 1) В чем прикол использования Equals (вместо ==)? 2) Чем твои InvalidCastException лучше FormatException метода DateTime.Parse? 3) Наверное (надо уточнить) через Select/SelectMany можно сделать это в функциольном/чейнинг стиле.
>>732739 1) В string без разницы, там он переопределён. В других ссылочных типах производится проверка на то, указывают ли ссылки на один объект в куче 2)Что-то DateTime.Parse мне ничего не бросило, а я просто получил хуйню в результате. Пикрил. 3)Да, я тоже об этом подумал, но по моему помешает var item = new Item(); внутри цикла.
Помогите ньюфажине. Упорядочил массив пузырьком, теперь хочу записать все элементы и повторяющиеся выделить цветом. for (int i = 0; i < array.Length; i++) if (array == array[i + 1]) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(array); } else { Console.WriteLine(array); Console.ResetColor(); } И естественно при такой проверке [i+1] выходит за пределы массива. Как по другому проверить? Или пердолить условие на "проверку проверки"?
>>732758 Основные 2 мысли которые я хотел донести: не надо if (fieldName == 'yoba') делать, класс у тебя уже есть, имена полей можно взять из него; (int|DateTime|yoba).Parse это конечно здорово и типизированно, но есть Convert.ChangeType
>>733182 Три столпа ООП платина, reference-types vs value-types, GC, как реализовано множественное наследование, если веб-макакой - типы джоинов, путь запроса от клиента до базы и обратно. Возможно, настройка ииса, уметь зайти по рдп.
>>733251 Что-то изи какое-то. Хотя у меня на последнюю работу тоже как-то собеседовали так себе. Какие паттерны работы с базой знаешь, чем гет от поста отличается, что такое индекс бд и какие побочки от него могут быть.
А есть тут такие кто помимо шарпача знают еще один язык? Только не на уровне поиграться, естественно. Подумывю вкатиться в мобильную разработку на ведре. Хотелось бы на айось, но там анальный мак нужен или вмвар с кастылями.
ребзят, какие, если есть, есть механизмы поддержания целостности данных при наличии двух (и более) источников данных, скажем, рсубд для аутентификации, граф для контента? пыщьпыщь
>>733280 мне сделали предложение на основании собеседования (лол) из шести вопросов
тоже фриманов читал для начала. по ходу прочтения мне все больше казалось, что я читаю литературу для аутистов, ибо обьясняют задачи на уточках и пиццах. однако для понимания бОльшей части сложных паттернов это было неплохо
Репозиторий представляет сущность как коллекцию в идеале IQueryable ЮоВ дает возможность в определенный момент времени использовать один источник данных из нескольких местов на самом деле, UoW чутка сложнее
> В андроиде яву не так уж и сложно осилить. Java НЕ нужна, из C# гораздо проще вкатится в Kotlin - меньше удивление будет. В Kotlin есть экстеншен-методами, норм. лямбдами и тд, а скоро и с async/await.
>>733482 Я всегда был за более распространенные технологии. Сейчас хайп вокруг котлин пройдет и все про него забудут. А если придется где-то подработать, то там по-любому будет Ява. Пока котлин не толкает гугол, он не нужен. Да и уж лучше бы гугол Свифт выбрал вместо Явы и был бы единый язык для мобильных платформ, но это мечты.
>>733278 >Я такое на мидла проходил >Три столпа ООП платина, reference-types vs value-types, GC, как реализовано множественное наследование Лол, серьезно? Это же вопросы для джуниора, мне кажется. Может у меня даже есть шанс устроиться в офис... >>733182-кун
Вкатился в С# Есть курсы от ITVDN - Нет никаких идей абсолютно, чего покодить? Могу в объектно ориентированное. Идей нет никаких. Где можно почитать про функционал и не ограничиваться говном всяким, типа калькулятооов. Хочу кодить сильно. ЧТО БЫ НАПИСАТЬ, АНОНЫ? - И что нужно знать для трудоустройства на должность С# прогера?
>>733877 Я уже как пару недель пытаюсь написать плоттер/логгер на C#+WPF, чтобы он получал по сериалпорту, сохранял ее и отображал. Оче удобно для самоделок на AVR/STM32. Есть дохуя идей как его потом улучшить, начиная от прикручивания модбаса до создания на его основе центрального сервера с отдельным клиентом. И на каждом участке приходится осваивать что-то новое, постоянно искать инфу что и как лучше сделать. Так же поскроль тред, такой вопрос уже задавался минимум 2 раза. >>728399 >>732688
>>733877 > Есть курсы от ITVDN Говно. Не понимаю, как это может помочь ньюфагам. Слишком много информации, ньюфагам и половины не надо. Еще хуже, если запомнят не ту половину, которая нужна для вкатывания. > ЧТО БЫ НАПИСАТЬ, АНОНЫ? Хоть что для себя, чего тебе не хватает. Сложность не важна. Я начинал при вкате писать десктоп-клиент для одного сайта и спустя столько лет до сих пор допиливаю по вечерам под пивас. Всё что я изучал, осваивалось на практике путём добавления фич в мою софтину.
>>734278 > > Есть курсы от ITVDN > Говно. Не понимаю, как это может помочь ньюфагам. Слишком много информации, ньюфагам и половины не надо. Еще хуже, если запомнят не ту половину, которая нужна для вкатывания. Схуяли говно? Смотрел их в дополнение к троэлсону. Как один источник не очень, конечно, но в дополнение норм.
Вопрос знающему программисту. Я не могу понять, каким образом генерирует псевдослучайные числа. Залез в stdlib.h, нашел описание функции srand и ничего не понял. программирую на vusual studio 2015 на C++, если это необходимо знать тебе
>>732423 >>724808 Ну вот в том то и дело что найти это место в солюшене в 50 проектов не так уже просто, когда в стек трейсе никакой инфы нету. В предыдущем месте тоже будет одна хуйня с одним потоком, в котором один вызов мэинформ и все. Это совсем неинформативно. Еще вариант есть на скорость нажать брейк, чтобы словить именно тот момент что нужно, если например в грид некоторое время выводятся данные из бд. Это тоже хуйня какая-то, если повезет.
>>734349 обычно да, таки только заголовки. но ничего не запрещает тебе запихать туда реализацию чего угодно. в случае с шаблонами так ее туда запихивать приходится, ну или дописывать #include "your.cpp"
>>734369 Если ты работаешь в IDE (а не блокноте), то я не советую.
Недавно смотрел трейнинг от JetBrains, они там раскалывали про CLion (C++ IDE).
Из их доклада я понял что все IDE заточены под конкретное построение проектов. Типа что в h нет рабочего кода и по нему не надо каждый раз делать AST, а можно кэшировать.
Если ты начнешь извращаться, то там все кэши поедут и при каждом изменение будет анализироваться весь проект. В итоге твоя IDE будет сильно тормозить на больших проектах.
>>734482 Такие аутисты хуже червей-пидоров, вместо того чтобы быстро найти бажик и поправить они сидят и медленно их ищут, очень медленно. Ты работать устроился или аутировать?
>>734515 >where T: a, b Предполагая что какой то класс может быть наследником и a и b, ох вейт, у нас же сишарп и компилятор за такую хуйню убивает нахуй.
>>734512 >знач ты устроился на какое-то дно. Куда взяли, лол. Первая работа, без опыта >>734502 Я просто думал может есть какая-то специальная штука в таких случаях, о которой я не знаю. Например как, посмотреть последние 50 действий, если в стектрейсе не видно... Я то в итоге нахожу баги, но с помощью обходных способов(поиск сообщение меседжбокса по всему солюшену или если повезет когда быстро брейк нажму в стектрейсе останется что-то полезное) которые не для всех случаев годятся
>>734557 Когда человек приходит на проект, ожидаемо что он будет задавать вопросы, по хорошему, ему должны еще и рассказать что они за хуйню тут используют/понаписали, чтобы это человек не писал другую хуйню. >>734558 >но нахуя? >тобы его можно было передать в твой метод kolobok.jpg
Есть вопрос к тем, кто угорает по asp mvc, в частности - кто шарит в бандлах. Кароч, есть у меня SPA сайт на ангуларе.
Выделил такие бандлы: main - тут у меня солянка из всяких jquery, angular и прочей сторонней еболе directives - тут ангуляровые директивы modules - ангуляровые модули services - ангуляровые сервисы app - собсно контроллеры.
В чем жопа. Есть у меня скрипт app.js (главный модуль приложения), который валит все приложение, если его закинуть в мандл app. Работает, только, если его расположить в main. Причем, в таком случае, перестает работать на лисобраузере. И я не понимаю почему. К слову: все внешние скрипты лежат парами: обычный и .min.js вариант. В бандле прописываю обычный. Поясните, что я делаю не так?
Помогите совладать с фоновой задачей в Windows Store приложении. Я вроде сделал всё правильно, а таск нихуя не работает и пишет в события винды ошибки "Activation of app <appname> failed with error: This app does not support the contract specified or is not installed. See the Microsoft-Windows-TWinUI/Operational log for additional information.".
В Operational log написано: "The app <appname> is not registered for the Windows.BackgroundTasks contract or is not installed."
Референс на проект с таском я добавил, declaration в манифесте есть(даже две штуки т.к. два разных таска регаю), метод для регистрации таска я писал глядя в MSDN т.е. всё должно быть ок.
>1 int new_tail = Interlocked.Increment (ref _tail);
>2 _array[new_tail] = item;
>3 Interlocked.Increment (ref _size);
>}
Функция вызывается одновременно из различных потоков.
Внимание вопрос! Может ли случится так, что, один поток вначале исполнит код 1_1,1_2, и процессор переключится на другой поток, после чего, второй поток, исполнит сразу 2_1, 2_2, 2_3, процессор переключится на первый поток, и тот исполнит 1_3.
Ононасы, поясните как этот код работает, в шарпе же нельзя наследоваться от самого себя?
public abstract class AggregateRoot<TAggregate, TIdentity> : IAggregateRoot<TIdentity> where TAggregate : AggregateRoot<TAggregate, TIdentity> where TIdentity : IIdentity {...}
>>735972 Так надо lock делать на этот участок кода. Ну это если тебе самому надо это навелосипедить, а если нет - нужно взять потокобезопасную коллекцию и не пердолиться с низкоуровневыми конструкциями.
>>736060 >Так надо lock делать на этот участок кода. Ну это если тебе самому надо это навелосипедить, а если нет - нужно взять потокобезопасную коллекцию и не пердолиться с низкоуровневыми конструкциями.
Лок не подходит. Уж оче кретичен перфоманс.
>нужно взять потокобезопасную коллекцию и не пердолиться с низкоуровневыми конструкциями. Говно собачье в шарпе эта коллекция. И она ниразу не низкоуровневая, лол. Она постоянно создает новые сегменты, то есть выделяет память, и при большом потоке сообщений просто пиздец в системе произойдет от нее. В принципе, лечится запихиванием использованных сегментов в потокобезопастный стек. Он кстати то-же то еще говно. И в целом получается оче громоздкое решение. Что тот же лок уже лучше будет работать.
А так, я сделаю на коленки оче маленькую оптимизированную очередь.
В принципе, разобрался что к чему и получилось. С тем ограничением, что макс размер очереди фиксирован размером внутреннего массива.
ITT элита продолжает обсуждает будущее этого прекрасного и современного продукта компании Microsoft. Только в этом треде элитные разработчики ответят на самые острые вопросы индустрии.
Вся литература вторым постом
1. Ресурсы:
- http://stackoverflow.com/questions/tagged/c%23
- http://www.tutorialspoint.com/csharp/
- http://professorweb.ru
- http://net-informations.com
- http://habrahabr.ru/hub/csharp/
2. Онлайн-компиляторы:
- https://dotnetfiddle.net/ - возможно лучший вариант. Встроено немного убогое, но все-таки автодополнение и проверка синтаксиса.
- http://ideone.com/
- http://csharppad.com/
- http://www.tutorialspoint.com/compile_csharp_online.php
- http://rextester.com/l/csharp_online_compiler
3. WinForms или WPF?
Зависит от задачи. Для небольших проектов, скорее всего, будет достаточно винформочек. В случае, если разрабатываемое приложение достаточно серьёзное, то возможно его стоит писать с использованием WPF. WPF очень хорошо работает с паттерном MVVM ( https://ru.wikipedia.org/wiki/Model-View-ViewModel ), и позволяет пилить очень кастомизированные интерфейсы с помощью XAML, что в случае WinForms, делать намного сложнее.
4. Мне тут знакомый_нейм сказал, что C# умирает, это правда? Может не стоит его учить?
Неправда. C# довольно активно развивается, недавно вышел новый компилятор, шестая версия шарпа, и уже активно разработывается седьмая. Весь дотнет понемногу становится опенсорсным, а ASP.NET становится независимым от платформы. В некотором смысле понемногу вымирают десктопные приложения с развитием веб-технологий, но в том же энтерпрайзе он еще очень даже востребован.
5. Какую ИДЕ выбрать?
Для Windows самым очевидным вариантом будет Visual Studio (https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx). Студия распространяется в двух редакциях: бесплатная коммьюнити-версия и платный энтерпрейс эдишн. В большинстве случае будет достаточно Community-версии: она поддерживает и C#, C++, VB.NET и F#, а так же имеет возможность установки дополнений
Для мака и никсов самый юзабельный вариант - MonoDevelop ( http://www.monodevelop.com/download/ ).
Для vim можно использовать OmniSharp ( https://github.com/OmniSharp/omnisharp-vim ).
Кросплатформенный полуредактор/полуIDE VS Code ( https://www.visualstudio.com/en-us/products/code-vs.aspx )
Также существуют плагины для Atom'а и Sublime Text, но функциональность там достаточно сильно урезана.
Кроме того, в данный момент JetBrains активно пилит свою IDE для шарпа (Project Rider), вероятно в ближайшее время станут доступны первые EAP. IDE заявлена как кросплатформенная, со всем решарпер-функционалом, поддержкой отладки, моно и .net core.
SharpDevelop - еще одна IDE для C#, отличается малым размером (около 20мб) и опциональной портабельностью, при этом имея дизайнер WinForms и WPF, а также интеграцию с FxCop, StyleCop и прочими ништяками. Если хочется что-то по быстрому набросать, а выкачивать гигабйты нет желания, то возможно SharpDevelop будет лучшим вариантом.
6. С# для мобильной разработки
Если нужны инструменты для разработке под мобилы, ставь сразу VS2015 и при установке выбирай все нужные компоненты.
Больше информации тут - https://msdn.microsoft.com/ru-ru/library/dn771552.aspx
Из актуальной литературы
- Xamarin Mobile Application Development
- Xamarin Essentials
7. Дополнительные инструменты для разработки на C#
LINQPad - сорт оф REPL, с возможностью быстрого подключения к БД и удобной визуализацией данных
dnSpy - декомпилятор, малоизвестный форк ILSpy, где реализована возможность модификации IL-кода прямо в EXE и DLL файлах, отладка IL-кода и много других фич для reverse engineering'а. Плюс няшные темы как в студии
dotPeek - бесплатный декомпилятор от JetBrains
scriptcs - для запуска C# кода как скриптов, возможность использовать как REPL
8. Расширения для студии
ReSharper - одно из известнейших. Рефакторинги, умный автокомплит, настраиваемый стиль кода. Платный, но можно стянуть с торрентов
Supercharger - показывает "карту" с классами, методами и всем остальным сбоку от кода с возможностью прыгать по ним
Indent Guides - показывает вертикальные линии на каждом уровне отступов.
Format document on Save - форматирует код каждый раз при сохранении документа
Code alignment - Выравнивает код по указанным символам. Удобно, например, при инициализации словарей или в перечислениях
Обзор Roslyn: https://github.com/dotnet/roslyn/wiki/Roslyn%20Overview
Новые возможности C# 6.0: https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23-6
ПРИНИМАЮТСЯ ПРЕДЛОЖЕНИЯ ПО ШАПКЕ
Код этой шапки: http://pastebin.com/cKKXYArs
Прошлый тред тонет здесь: https://2ch.hk/pr/res/707882.html