Библиотека шарписта | C#, F#, .NET, ASP.NET
22.9K subscribers
2.26K photos
36 videos
85 files
4.43K links
Все самое полезное для C#-разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/b60af5a4

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
Dependency_Injection_Principles,_Practices,_and_Patterns_by_Mark.pdf
14.2 MB
Dependency Injection Principles, Practices, and Patterns (2019)

Автор(ы): Mark Seemann, Steven van Deursen

Книга научит вас использовать внедрение зависимостей (DI, Dependency Injection) для уменьшения жестких зависимостей между компонентами приложения.

Вы изучите основы DI, ознакомитесь с типами приложений, которые от нее выигрывают. Вы поработаете с конкретными сценариями, используя C# и .NET для реализации DI в разных проектах.

Преимещество книги в том, что она учит вас DI с нуля, показывая соответствующие примеры, шаблоны и анти-шаблоны для создания слабосвязанных и грамотно структурированных приложений. Хорошо аннотированный код и диаграммы используют примеры на C# для иллюстрации принципов, которые безупречно работают с современными объектно-ориентированными языками и библиотеками DI.
Статья, в которой объясняется, почему вы должны описывать программное обеспечение по вариантам использования, а не по уровням и структурам, которые оно использует. Погружаемся в принципы чистой архитектуры .Net: https://proglib.io/w/1ff937f9
Актуальный вопрос поднял Николай Балакин на .NET Fest 2019. Действительно, что делать, если всё, что можно уже закэшировано, а код всё ещё тормозит? В своём докладе он приводит примеры работы некоторых низкоуровневых механизмов .NET, а также рассказывает, как с их помощью можно выиграть драгоценные секунды, когда счёт идет на отдельные такты процессора.

https://proglib.io/w/a30b46c9
Привет, Чувак на связи.

Веду канал с вакансиями в IT без херни.

Лично отбираю вакансии - никакой херни.
Вакансии краткие и по делу - никаких полотен в два экрана.
Только две вакансии в день - никакого спама, я уважаю своих читателей.
Все вакансии имеют стандартизированный вид - никакого хаоса.
Заставляю эйчаров переписывать вакансии по 10 раз - никаких дружных коллективов.
Если класс объявлен с модификатором sealed (запечатанный), то от этого класса нельзя наследовать и создавать производные классы.

В следующем примере класс B наследует от класса A, но никакие классы не могут наследовать от класса B:
class A {}
sealed class B : A {}


Модификатор sealed можно использовать для метода или свойства, которое переопределяет виртуальный метод или свойство в базовом классе. Это позволяет классам наследовать от вашего класса, запрещая им при этом переопределять определённые виртуальные методы или свойства.
1
Практический мануал по созданию базового приложения с распределенной архитектурой для обмена сообщениями в реальном времени. В качестве инструментария используется многоуровневый шаблон запуска, Abp Framework для инфраструктуры, SignalR для обмена данными между сервером и клиентом в реальном времени, и RabbitMQ в качестве шины распределенных событий.

https://proglib.io/w/358c3a38
Видеозапись доклада Алексея Голуб на .NET fwdays'20 про работу с деревьями выражений в C#, в ходе которого поднимались следующие вопросы:
– что такое дерево выражений;
– как скомпилировать код во время выполнения программы;
– как сделать рефлексию быстрее;
– как реализовать обобщенные операторы;
– как превратить доменный язык в дерево выражений;
– как утилизировать систему типов, чтобы сделать метапрограммирование безопасным;
– как перевести лямбду с одной речи в другую.

https://proglib.io/w/c9d53bdc
Необходимость генерировать новый тип класса во время выполнения программы может обусловлена ​​незнанием свойств вашего класса до выполнения, удовлетворением требований к производительности, необходимостью добавления функциональности в ваш новый тип и другим. Если такая задача возникнет, то можно обратиться к следующему мануалу: https://proglib.io/w/0bc2a53e
Доступ к функции set осуществляется с использованием объекта класса z, значения которого передаются в качестве параметров a и b. Поскольку переменные c1 и c2 являются публичными членами класса z, то они доступны с помощью имени класса. В результате мы получаем 10 20 и 5 125.
Подборка из 15 видеоуроков, представляющих из себя реальные проекты на C# начального и экспертного уровня: https://proglib.io/w/e9b32576
В .NET Core 3 Microsoft представила ряд новых и полезных инструментов для диагностики приложений:
– dotnet-counters для просмотра счетчиков производительности;
– dotnet-dump для сбора и анализа дампов;
– dotnet-trace для захвата событий времени выполнения, эквивалентных событиям ETW и образцам стеков ЦП.

В этой статье автор проводит некоторый анализ производительности с помощью dotnet-trace и PerfView на Linux.

https://proglib.io/w/96e5f70e
​​💸 12 способов зарабатывать с помощью программного кода

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

https://proglib.io/sh/u7tJsmH5S4
​​👨‍💻 Как выбрать сервер для 1С

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

https://proglib.io/sh/bL4TeHxcQy
Серия статей, где автор представляет практическую точку зрения на два принципиально противоположных подхода в разработке программ: объектно-ориентированный и функциональный.

Часть 1
Часть 2
Часть 3
#вопросы_для_самопроверки

Что такое ковариантность и контвариантность делегата?

Представленный ниже делегат является ковариантным или контрвариантным?
delegate T Factory<out T>();