Обновить
101.37

C# *

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

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

Современные Source Generators в .NET, часть 2

Уровень сложностиСредний
Время на прочтение19 мин
Охват и читатели9.9K

Это вторая часть серии (надеюсь) статей про современные Source Generators в .NET. Мотивация и общее описание есть в первой части, рекомендую начинать знакомство с неё.

В этой части мы поговорим про типовые сценарии разработки генераторов.

К сценариям

Пародия на замыкания

Уровень сложностиПростой
Время на прочтение12 мин
Охват и читатели8.1K


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

Читать далее

Как на самом деле работает Async/Await в C# (Часть 5)

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

Несколько недель назад в блоге «.NET Blog» появилась статья «Что такое .NET, и почему вы должны выбрать его?». В нем был представлен высокоуровневый обзор платформы, кратко описаны различные компоненты и архитектурные решения, а также обещаны более подробные посты по затронутым темам. Этот пост является первым таким продолжением, в котором подробно рассматривается история создания, архитектурные решения и детали реализации async/await в C# и .NET.

Читать далее

Использование библиотеки MediatR при реализации бизнес-логики в проектах, реализуемых на базе .NET

Время на прочтение10 мин
Охват и читатели11K

Использование библиотеки MediatR при реализации бизнес‑логики в проектах, реализуемых на базе.NET

На просторах интернета появились библиотеки, позволяющие упростить и ускорить построение бизнес‑логики разрабатываемого приложения. Одна из таких библиотек — MediatR. В данной статье я хочу описать небольшой пример из реального проекта. Проект, web приложение, предназначен для автоматизации некоторого бизнес‑процесса. В рамках данного проекта была реализована задача по согласованию, где использовался инструментарий библиотеки MediatR. Я не буду уделять особого внимания моментам, связанным с установкой и настройкой данной библиотеки в проекте, выделю только то, что необходимо для решения нашей задачи.

Читать далее

C#. Электронная подпись и библиотека BouncyCastle

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

Приветствую всех. В этой статье я бы хотел рассказать о работе с электронной подписью средствами библиотеки BouncyCastle на C#.

Весь код указанный здесь находится в репозитории github и доступен в виде nuget пакета.

Читать далее

Как на самом деле работает Async/Await в C# (Часть 4)

Уровень сложностиСложный
Время на прочтение6 мин
Охват и читатели11K

Несколько недель назад в блоге «.NET Blog» появилась статья «Что такое .NET, и почему вы должны выбрать его?». В нем был представлен высокоуровневый обзор платформы, кратко описаны различные компоненты и архитектурные решения, а также обещаны более подробные посты по затронутым темам. Этот пост является первым таким продолжением, в котором подробно рассматривается история создания, архитектурные решения и детали реализации async/await в C# и .NET.

Читать далее

C# и .NET: NuGet

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели10K

Менеджеры пакетов существуют для множества различных языков программирования и сред разработки. Они облегчают сбор повторно используемого кода создателями пакетов, а также установку этих пакетов потребителями пакетов. Пакеты могут храниться в общедоступных репозиториях в Интернете или в частных репозиториях только для использования командами в конкретной организации. NuGet — это диспетчер пакетов для .NET, и в Интернете есть много тысяч общедоступных пакетов NuGet, которые могут помочь вам выполнить все виды распространенных задач программирования. Сегодня мы сосредоточимся на использовании пакета NuGet.

Читать далее

Как подружить DDD и Entity Framework Core?

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

Привет, Хабравчане! Меня зовут Валентин, я backend‑разработчик в компании Bimeister.
Уже почти как год вместе с командой разрабатываем новый продукт с применением Domain‑driven design подхода. Как же так получилось?

Так вот, разработка начиналась совершенно с нуля и это была хорошая возможность применить данный подход и попробовать его на практике. В момент начала разработки, перед нашей командой сразу встал вопрос: «А как же хранить аггрегаты, сущности, value‑object'ы в базе данных с использованием EF Core? ». Если вы только начинаете применять DDD и перед вами и вашей командой встала такая же проблема, то эта статья поможет вам приблизиться к ее решению, да пребудет с вами сила Эванса!

Вошли и вышли, приключение на 20 минут

Разработка .NET Web приложения на Yandex Cloud Functions

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели7.9K

Яндекс Облако предоставляет возможность публикации .NET приложений разными способами, типичным из которых является docker контейнер, развернутый на созданных вычислительных ресурсах, что подразумевают оплату за выделенные процессоры и оперативную память. Более экономный вариант предоставляют serverless сервисы Cloud Functions и Serverless Containers, где оплата идет по фактически потребленным ресурсам, масштабирование осуществляется самим облаком. Контейнеры хороший вариант разработки, но более простым и легковесным является Cloud Functions.

Читать далее

Как на самом деле работает Async/Await в C# (Часть 3)

Уровень сложностиСложный
Время на прочтение6 мин
Охват и читатели20K

Несколько недель назад в блоге «.NET Blog» появилась статья «Что такое .NET, и почему вы должны выбрать его?». В нем был представлен высокоуровневый обзор платформы, кратко описаны различные компоненты и архитектурные решения, а также обещаны более подробные посты по затронутым темам. Этот пост является первым таким продолжением, в котором подробно рассматривается история создания, архитектурные решения и детали реализации async/await в C# и .NET.

Читать далее

Как на самом деле работает Async/Await в C# (Часть 2)

Уровень сложностиСложный
Время на прочтение7 мин
Охват и читатели20K

Несколько недель назад в блоге «.NET Blog» появилась статья «Что такое .NET, и почему вы должны выбрать его?». В нем был представлен высокоуровневый обзор платформы, кратко описаны различные компоненты и архитектурные решения, а также обещаны более подробные посты по затронутым темам. Этот пост является первым таким продолжением, в котором подробно рассматривается история создания, архитектурные решения и детали реализации async/await в C# и .NET.

Читать далее

Способы создания авторизации на сайте. Руководство с примерами. Безопасность в браузере

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

В данной статье мы разберем 4 способа как зарегистрировать нового пользователя:

1.Сторонние сервисы авторизации (такие как Google)

2.Авторизация с использованием токенов

3.Авторизация с помощью номера телефона

4.Логин + Пароль

Статья даст вам конкретный алгоритм реализации каждого способа. Необходимые библиотеки, а также примеры кода. Я постараюсь приводить в пример реализацию на чистейшем JavaScript, для того чтобы вы смогли внедрить функционал в свое проект, не зависимо от используемого фреймворка, однако также будут примеры для тандема Angular + Asp .Net Core. Мы обсудим как защитить ваш сайт от взлома. На сколько это сложно и возможно ли в принципе гарантировать 100% защиту. Итак, давайте приступим.

Читать далее

ThreadPool.Intro

Время на прочтение6 мин
Охват и читатели7.3K

Тема тредпула, скажем так, complex and hard. У меня в жизни было два «осознания», когда я гордо говорил себе — вот теперь-то я точно понял, как устроен и как работает тредпул в дотнете! Впрочем, после второго раза я неоднократно осознавал, как же я ошибался.

Читать далее

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

Как на самом деле работает Async/Await в C# (Часть 1)

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

Несколько недель назад в блоге «.NET Blog» появилась статья «Что такое .NET, и почему вы должны выбрать его?». В нем был представлен высокоуровневый обзор платформы, кратко описаны различные компоненты и архитектурные решения, а также обещаны более подробные посты по затронутым темам. Этот пост является первым таким продолжением, в котором подробно рассматривается история создания, архитектурные решения и детали реализации async/await в C# и .NET.

Читать далее

Выражение числа в виде букв

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели7K

Разрабатывая Idle игры часто сталкиваются с тем что нужно выразить число через его сокращенную форму. Если в игре используются маленькие числа (хотя бы до 20 знаков), то такие числа в принципе можно выражать в их существующем виде. Для примера в проекте unity создам отображение монет и кнопку, которая будет умножать число монет на некое значение.

Читать далее

System.String не то, чем кажется. Представление строк в памяти .NET

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

Тип System.String - один из самых используемых при разработке. В этой статье я хотел бы поговорить о нюансах его реализации. Вы узнаете о том, как строки хранятся в памяти и почему в каждой строке есть 4 пустых байта.

Читать далее

Преимущества изучения C# для начинающих программистов

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели16K

Приветствую, дорогой хаброжитель! В этой статье я расскажу тебе про прекрасный мир C# (произносится "Си-шарп"). Если ты новичок в программировании или только хочешь начать свое путешествие с C#, у меня есть десять отличных фактов про этот язык, с помощью которых я попробую доказать, что язык C# должен стать твоим основным языком программирования.

Читать далее

Record structs в C#: эффективные и безопасные типы данных

Время на прочтение3 мин
Охват и читатели22K

C# 9 представил новую функцию, называемую Запись (record), которая обеспечивает неизменяемость и семантику сравнения на основе значений для классов. Записи упрощают создание типов данных и обеспечивают лучшую безопасность при работе с ними. Однако до C# 10 они были доступны только для классов, теперь же у нас есть record struct, позволяющие применить те же преимущества Записей и к структурам.

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

Читать далее

[1 апреля] Все новые возможности C# 13 | Что нового в .NET 10, почему нет .NET 9

Время на прочтение3 мин
Охват и читатели27K

Я являюсь студентом по обмену из российского ГМИГ имени Трофима Лысенко (Главный Мурманский Институт Генетики). Учился на инженера-программиста и пол года назад был отправлен в Америку в качестве студента по обмену. Это у меня получилось благодаря двойному гражданству (я гражданин Ирана и России).

К нам на лекцию пришел один из разработчиков Microsoft и рассказал про .NET 10, подробнее в самом низу статьи под спойлером.

.NET 10 или как его теперь начнут называть .NET X - это новая версия .NET, которая выйдет уже в 2024 году. Большая часть этой статьи посвящена именно новым возможностям C# 13.

Почему .NET 10 и где .NET 9?

"У нас так принято." - Дословный перевод. Больше комментариев разработчик не дал.

Читать далее

ArrayPool<T>: подводные камни

Время на прочтение12 мин
Охват и читатели27K


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


Для уменьшения аллокаций в современном .NET предусмотрены Span/Memory<T>, stackalloc с поддержкой Span, структуры и другие средства. Но если без объекта в куче не обойтись, например, если объект слишком большой для стека, или используется в асинхронном коде — этот объект можно переиспользовать. И для самых крупных объектов — массивов, в .NET встроены несколько реализаций ArrayPool<T>.


В этой статье я расскажу о внутреннем устройстве реализаций ArrayPool<T> в .NET, о подводных камнях, которые могут сделать пулинг неэффективным, о concurrent-структурах данных, а также о пулинге объектов, отличных от массивов.

Читать дальше →

Вклад авторов