Как стать автором
Обновить
102.73

C# *

Объектно-ориентированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Ошибки и подозрительные места в исходниках .NET 8

Время на прочтение9 мин
Количество просмотров8.1K

Каждый год выходит новая версия .NET. Это событие не только предоставляет нам возможность познакомиться с последними улучшениями в самом .NET и нововведениями в языке, но и даёт повод исследовать исходный код .NET. Нужно воспользоваться этим шансом!

Читать далее
Всего голосов 17: ↑15 и ↓2+18
Комментарии5

Топ-10 ошибок, найденных в C#-проектах за 2023 год

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров11K

За 2023 год разработчиками PVS-Studio было написано немало статей о проверке Open Source C#-проектов. По традиции мы делимся с вами 10-ю самыми интересными ошибками, найденными за этот год. Приятного чтения!

Читать далее
Всего голосов 17: ↑17 и ↓0+17
Комментарии6

.NET CLI — Зачем загружать все родительские сборки при загрузке сборки

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров2.4K

В CLR есть особенность, что при загрузки сборки через Assembly.Load или через Assembly.ReflectionOnlyLoad, загружаются все сборки по мере запроса. В отличии от констант и их типов, они заранее копируются в дочернюю сборку и больше не зависят от родительской сборки. Но в определённых случаях типы констант не копируются в дочернюю сборку и их изменение может сломать работу приложения, несмотря на то, что тип константы не должен этого делать. Эта статья Вам поможет разобраться в каких случаях это может произойти и почему так происходит.

Читать далее
Всего голосов 5: ↑5 и ↓0+5
Комментарии35

Атомарный подход в Unity

Уровень сложностиСредний
Время на прочтение29 мин
Количество просмотров6.5K

Привет, Хабр! 👋

Меня зовут Игорь, и я Unity Developer. Последние несколько месяцев я реализовывал зомби шутер на атомарном подходе. Несмотря на то, что подход оказался очень удобным и гибким, я столкнулся я рядом архитектурных проблем в процессе разработки. Поэтому в этой статье я хотел бы раскрыть текущую концепцию атомарного подхода: объяснить что это такое, какие есть преимущества и недостатки, и самое главное, показать как правильно использовать атомарный подход у себя в проекте.

Читать далее
Всего голосов 5: ↑3 и ↓2+1
Комментарии23

Как на самом деле Async/Await работают в C#. Часть 1. Проблемы модели асинхронного программирования (APM)

Уровень сложностиСложный
Время на прочтение13 мин
Количество просмотров18K

Это перевод первой главы из поста How Async/Await Really Works in C#

Этот пост .Net блога является продолжением исходного поста, глубоко погружающим в историю, приведшую к созданию конструкций async/await и стоящие за этим дизайнерские решения и детали реализации async/await в C# и .NET.

Исходный пост What is .NET, and why should you choose it? предоставляет обзор платформы на высоком-уровне, перечисляя различные компоненты и решения на уровне дизайна, и предваряя последующие посты в глубину обозначенных тем.

Ссылки в развитие темы:

1. Часть 2 Артефакты от EAP шаблона, SynchronizationContext

2. Уроки по асинхронному программированию из первой половины работы

3. Параллельные вычисления — Все дело в контексте-синхронизации (SynchronizationContext)

4. Async/Await из C#. Головоломка для разработчиков компилятора и для нас

Читать далее
Всего голосов 10: ↑7 и ↓3+4
Комментарии12

MIDI → Метр → MIDI

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров2.3K

Статья поведёт нас через границу, где сходятся MIDI и метрическое время. В этом путешествии мы откроем брошюру по Международной системе единиц СИ, повстречаем файлы с более чем 6000 изменений темпа, столкнёмся с ошибками округления и напишем немного кода. Звучит заманчиво? Тогда добро пожаловать!

Читать далее
Всего голосов 18: ↑18 и ↓0+18
Комментарии1

Zenject: приемы и хитрости

Уровень сложностиСложный
Время на прочтение12 мин
Количество просмотров8.8K

В мой джентельменский набор разработчика входят Zenject, Addressables и DOTween, значительно облегчающие разработку любого проекта на длинной дистанции.

У Zenject-а есть очевидно лишние (привет, Signals) и запутанные модули и возможности. Зачастую, чтобы сделать все красиво, приходится хорошенько покопаться в устройстве DI-контейнера.

Рассказываю о способах приготовления тех фич и тонкостей Zenject, которые за несколько лет разработки нашел полезными и постоянно применял.

копнуть поглубже
Всего голосов 8: ↑8 и ↓0+8
Комментарии3

Разворачиваем и заворачиваем в docker проект ASP.NET core на Ubuntu в связке с PostgreSQL

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров11K

На просторах интернета заметил, что довольно мало статьей про ASP.NET под Linux. К сожалению, новички вроде меня копаются часами в поисках нужной информации, поэтому в этой статье мы вместе развернём минимальное приложение ASP.NET core под Linux в среде Ubuntu и в связке с PostgreSQL и с котиками на сервере nginx, а также упакуем всё в docker контейнеры. В ходе этой статьи мы разберём некоторые консольные команды для ежедневного пользования.

Приступить к чтению
Всего голосов 8: ↑5 и ↓3+4
Комментарии20

Пример для иллюстрации принципов SOLID который я (кажется) понял

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров38K

Это перевод вступления из электронной книги - документа.

Авторы утверждают что:

В этой главе вы увидите, как можно удовлетворить некоторые из распространенных требований корпоративных приложений (приложений для бизнеса), таких как низкая стоимость (простота) сопровождения и тестируемость, применяя слабосвязанный дизайн для вашего приложения. Вы увидите очень простую иллюстрацию этого подхода в примерах кода, которые показывают два разных способа реализации зависимости между классами ManagementController и TenantStore. Вы также увидите, как принципы объектно-ориентированного программирования SOLID связаны с теми же проблемами (имеются ввиду проблемы стоимости сопровождения = исправления ошибок + возможности расширения функциональности и тестируемости).

Читать далее
Всего голосов 4: ↑3 и ↓1+3
Комментарии32

Road Run, или как я свою первую игру делал. Часть 6

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров3.3K

Модели, сделанные в блендере, о которых я рассказывал в предыдущих частях, готовы и могут быть загружены в игровой движок. В этой части пойдёт речь о том, как собрать и заставить двигаться дорогу в Unity 3d.

Читать далее
Всего голосов 6: ↑5 и ↓1+5
Комментарии6

1000 и 1 способ инициализации типов в C# 12.0

Время на прочтение5 мин
Количество просмотров13K

Среди нововведений C# 12 было достаточно больше количество по-настоящему качественных и крутых фич (например дефолтные параметры лямбд).

Но речь сегодня пойдет о ложке дёгтя в бочке мёда - Primary Constructors.

Вот казалось бы, как здесь можно было напортачить? Идея взята прямиком из Kotlin, все что надо было сделать это перенести известную, успешно работающую функциональность из одного языка в другой. Всё.

Как говорится, воруй как художник? Думаю, что это не про Primary Constructors, потому что насколько плохо своровать фичу это надо было постараться.

Почему же в Kotlin эта фича имеет смысл, а в C# нет? Давайте разбираться.

Продолжение нытья без регистрации и смс
Всего голосов 25: ↑22 и ↓3+22
Комментарии60

Почему x^0 = 1 наглядно

Время на прочтение3 мин
Количество просмотров51K

Традиционное определение для операции возведения в натуральную степень (или целую положительную) вводится примерно следующим образом:

Возведе́ние в сте́пень — арифметическая операция, первоначально определяемая как результат многократного умножения числа на себя.

Но более точная формулировка всё же другая:

Возведение числа X в целочисленную степень N — арифметическая операция, определяемая как результат многократного [N по модулю раз] умножения либо деления единицы на число X.

Разбираемся под катом! >>
Всего голосов 57: ↑48 и ↓9+56
Комментарии123

Алгоритм MiniMax. Использование минимакса в Unity на примере игры Поймай Овечку

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров5.1K

Минимакс - популярный алгоритм для принятия решений в играх с нулевой суммой (один выиграл - другой проиграл). Казалось бы, раз он так популярен, то всё что можно было про него сказать уже сказано? Не совсем. Информация сильно раздроблена, иногда ошибочна, а найти какие-либо примеры в играх довольно сложно. Поэтому в этой статье я постараюсь прояснить процесс разработки ИИ на основе минимакса для игры "Поймай Овечку".

Читать далее
Всего голосов 11: ↑11 и ↓0+11
Комментарии4

Ближайшие события

Недооцененный паттерн «Спецификация» в связке с паттерном «Репозиторий»

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров14K

Использование спецификации открыло для меня новый мир в создании приложений.

Репозитории предоставляют удобное решение для доступа к данным.

Однако за многолетний опыт разработки, побывав в нескольких компаниях, сменив кучу проектов я НЕ ВСТРЕЧАЛ паттерн "Спецификация" совместно с паттерном "Репозиторий".

Читать далее
Всего голосов 8: ↑4 и ↓4+2
Комментарии31

Передача данных между слоями приложения

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров7.5K

Тестирование производительности различных способов передачи данных между моделями разных уровней слоёного прилолжения.

Читать далее
Всего голосов 9: ↑7 и ↓2+6
Комментарии28

Парсер бинарных данных с WPF визуализацией в виде дерева структур и их полей. Структура, управляемая данными

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров4.5K

Как известно нет ничего более постоянного чем временное. Нам нужно было сделать по возможности простую программу для визуализации сложных структур бинарных данных, считанных из разных типов-версий устройств.

Адаптированный проект для публичного использования, рабочий на Гите, компилируется в простой exe-файл. Можно скачать как exe-файл, если доверяете своему антивирусу.  Надеюсь, кому-то пригодится. Но чтобы начать пользоваться надо научиться писать XАML определения вложенных структур, по которым работает парсер. Ссылка в конце статьи.

Не будет никаких модных слов, только то, что нужно для работы.

Читать далее
Всего голосов 11: ↑11 и ↓0+11
Комментарии6

Релизный цикл без компромиссов: надежно для клиентов, удобно для разработки

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров3.2K

При построении релизного цикла приходится балансировать между двумя крайностями. С одной стороны, хочется по максимуму отлавливать баги и дотошно проверять каждый релиз. С другой — быстрее выпускать обновления и приносить клиентам больше пользы. 

Мы в Mindbox долго решали это противоречие и, кажется, добились баланса: презентуем несколько релизов в день и каждый проходит несколько этапов проверки, чтобы баги не дошли до клиентов. Пайплайн удобен и для команды: больше сотни разработчиков работают одновременно и не блокируют действия друг друга, а обновления происходят автоматически. 

О том, какой путь проходит релиз и какие инструменты обеспечивают его надежность, расскажет engineering manager Mindbox, Бадал.

Читать далее
Всего голосов 5: ↑5 и ↓0+5
Комментарии5

Возвращаемся на Гроув-Стрит. Анализ движка Grand Theft Auto: San Andreas на Unity

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров11K

Серия Grand Theft Auto стала культовой в игровой индустрии, а San Andreas — одной из самых запоминающихся частей для многих игроков. Время проходит, но фанаты всё так же преданы игре. Кто-то достаёт старый и пыльный диск с ностальгией, а некоторые заходят ещё дальше. Сегодня проверим фанатский перенос GTA: San Andreas на движок Unity с помощью статического анализатора PVS-Studio!

Начать миссию →
Всего голосов 13: ↑13 и ↓0+13
Комментарии2

Как принимать платежи в Telegram | Оплата без всяких токенов и асинхронная обработка платежа

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров15K

Как принимать платежи на своем сайте или в telegram используя библиотеку yoomoney-api.

Читать далее
Всего голосов 6: ↑5 и ↓1+5
Комментарии31

«Внешние» сортировки: что это, зачем это и как это реализовать?

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров5.7K

Статья про внешние сортировки слиянием. Что это вообще такое, зачем это нужно и как это реализовать? На все эти вопросы я постарался ответить в данной статье, а также привёл примеры кода, написанного на C# 11.

Читать далее
Всего голосов 4: ↑3 и ↓1+4
Комментарии10